没有数据时避免异常
Avoid Exception when there is no data
我正在做一个项目,我有一个用 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;
现在我想确保 运行 sp 即使 cusmm_cus_document table 是空的。
当您使用 GROUP BY
和 AGGREGATE
函数时,它一定会为您提供结果。如果 table 中没有数据,那么它也会给你 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
的聚合查询总是 returns 恰好一行。列将是 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
好像是一个参数,但是和列名冲突。给它一个不同的名字!
- 我删除了
CASE
表达式中的 ELSE ''
。 ''
无论如何都是 NULL
,默认返回值是 NULL
,没有 ELSE
。
- 如果没有行匹配,结果将为
NULL
。如果您想要不同的值,请使用 COALESCE()
.
我正在做一个项目,我有一个用 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;
现在我想确保 运行 sp 即使 cusmm_cus_document table 是空的。
当您使用 GROUP BY
和 AGGREGATE
函数时,它一定会为您提供结果。如果 table 中没有数据,那么它也会给你 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
的聚合查询总是 returns 恰好一行。列将是 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
好像是一个参数,但是和列名冲突。给它一个不同的名字!- 我删除了
CASE
表达式中的ELSE ''
。''
无论如何都是NULL
,默认返回值是NULL
,没有ELSE
。 - 如果没有行匹配,结果将为
NULL
。如果您想要不同的值,请使用COALESCE()
.