【发布时间】:2017-12-13 23:03:58
【问题描述】:
我想请你帮我解决一个问题
我目前有 SQL 表 PRODUCT 和 PRODUCT_PARAMETER。
PRODUCT 有一个有趣的领域:PRODUCT_ID(还有其他一堆,不重要)。
PRODUCT_PARAMETER 链接到PRODUCT_ID 上的PRODUCT,并具有KEY 和VALUE 列。
我需要找出所有没有PRODUCT_PARAMETER 键为“cost”的产品,或者它们有参数但值为NULL。 PRODUCT_PARAMETER 可以有不同的键
另外,由于我使用它的系统的限制,我无法更改数据库的结构,必须在一个 SQL 命令中完成,后者可能是最让我痛苦的,因为我对能够做到从数据库中提取我需要的一半
SELECT PRODUCT_ID FROM PRODUCT MINUS
SELECT PRODUCT_ID FROM PRODUCT_PARAMETER WHERE KEY LIKE 'cost';
剔除没有参数的产品和
SELECT PRODUCT_ID FROM PRODUCT_PARAMETER WHERE KEY LIKE 'cost' AND VALUE IS NULL
用于在现有键中提取具有 NULL 值的产品。
在顶层,我需要将这两个结果都放入由蓝图定义的单个 sys_refcursor 中
FUNCTION VALIDATION_FCTN RETURN SYS_REFCURSOR IS
v_rc sys_refcursor;
BEGIN
OPEN v_rc FOR #fillSelectStatementHere;
RETURN v_rc;
END;
只要它返回单个 refcursor 中的所有值,我可以稍微修改一下,以防合并游标比 SELECT 语句更好。虽然我对 SQL 编程非常陌生并且以前从未见过PLSQL,但如果可能的话,我更喜欢SELECT 解决方案。
提前谢谢你
【问题讨论】:
-
为什么
LIKE没有任何通配符? (我可能会改用=。) -
@jarlh 这只是这里的习惯。当涉及字符串时,所有其他测试都是用 LIKE 编写的,无论是否有通配符。