gpt4 book ai didi

oracle - sql max 函数没有出现异常

转载 作者:行者123 更新时间:2023-12-04 05:03:04 25 4
gpt4 key购买 nike

我写了下面的查询,期望在没有找到行时抛出 NO_DATA_FOUND 异常。

BEGIN
SELECT MAX(A_id) + 1 INTO id_variable from table_A;
EXCEPTION
WHEN NO_DATA_FOUND THEN
SELECT MAX(A_id) + 1 INTO id_variable from table_A_archive;
END;

table_A 中没有数据,但没有抛出异常,最终 id_variable 值变为 null。
我用谷歌搜索并注意到 MAX 函数忽略空值,但我找不到任何可以使其抛出异常的补救措施。

如何让它抛出异常,以便控制异常并查看存档表。

除了采用 count() 然后仅在 count() > 0 时获取值之外,还有其他选择吗?

最佳答案

不,它不会成为异常(exception)。 MAX 不会提高 no_data_found 因为它会返回 值(value)。

看到这个:

SQL> select max(a_id) from table_a;

MAX(A_ID)
----------


SQL> select a_id from table_a;

no rows selected

SQL>

is there any other alternative than taking the count() and then getting the value only if count() > 0.



您可以拥有您的 自定义异常 然后 提高当值为 时空 .

例如,
SQL> CREATE TABLE table_A(a_id NUMBER);

Table created.

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 id_variable NUMBER;
3 is_null EXCEPTION;
4 BEGIN
5 SELECT MAX(A_id) + 1 INTO id_variable FROM table_A;
6 IF id_variable IS NULL THEN
7 raise is_null;
8 END IF;
9 EXCEPTION
10 WHEN is_null THEN
11 DBMS_OUTPUT.PUT_LINE('Came into Exception');
12 END;
13 /
Came into Exception

PL/SQL procedure successfully completed.

SQL>

更新 如果您不想引发异常而只想从 中进行选择另一 table 当 MAX 返回 NULL 时,则添加 IF-ELSE堵塞。

例如,
SQL> CREATE TABLE table_A(a_id NUMBER);

Table created.

SQL> CREATE TABLE table_b(a_id NUMBER);

Table created.

SQL> INSERT INTO table_b VALUES(1);

1 row created.

SQL> COMMIT;

Commit complete.

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 id_variable NUMBER;
3 BEGIN
4 SELECT max(A_id) + 1 INTO id_variable from table_A;
5 IF id_variable IS NULL
6 THEN
7 SELECT A_id + 1 INTO id_variable FROM table_b;
8 END IF;
9 DBMS_OUTPUT.PUT_LINE('ID value is '||id_variable);
10 END;
11 /
ID value is 2

PL/SQL procedure successfully completed.

关于oracle - sql max 函数没有出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30797126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com