我正在一个项目上,并且我有一个用Oracle DB编写的数据库模式。我有一些问题。
我将向您展示我的现有代码->
PACKAGE BODY pkg_customer_overview
IS
PROCEDURE get_invest_agreement_info (
opassport_no OUT VARCHAR2,
onational_id_no OUT VARCHAR2,
BEGIN
SELECT MAX(CASE WHEN doc_type=2 THEN doc_number ELSE '' END),
MAX(CASE WHEN doc_type=1 THEN doc_number ELSE '' END)
INTO opassport_no,
onational_id_no
FROM cusmm_cus_document
WHERE customer_number=c.customer_number
GROUP BY customer_number;
现在,即使cusmm_cus_document表为空,我也要确保运行sp。
虽然您正在使用GROUP BY
和AGGREGATE
功能,但一定会为您提供结果。如果表中没有数据,那么它也会为您提供null
输出。
查看此:
SQL> --EMPTY TABLE SQL> WITH YOUR_TABLE ( D ) AS ( 2 SELECT 1 3 FROM DUAL 4 WHERE 1 = 2 -- condition to create empty table 5 ) 6 SELECT 7 coalesce(max(d),-999) AS RESULT -- default value 999 8 FROM YOUR_TABLE 9 WHERE D = 2; -- extra condition, though not needed as table is empty. RESULT ---------- -999 SQL>
干杯!
只需删除GROUP BY
。没有GROUP BY
的聚合查询总是返回恰好一行。列将为NULL
:
SELECT MAX(CASE WHEN doc_type = 2 THEN doc_number END),
MAX(CASE WHEN doc_type = 1 THEN doc_number END)
INTO opassport_no, onational_id_no
FROM cusmm_cus_document c
WHERE c.customer_number = in_customer_number;
注意:
customer_number
似乎是一个参数,但它与列名冲突。给它起一个不同的名字!ELSE ''
表达式中的CASE
。 ''
始终是NULL
,默认返回值为NULL
,没有ELSE
。NULL
。如果要使用其他值,请使用COALESCE()
。