PL/SQL 如何修复进程标志 id=4 错误打印以及如何显示错误消息
Posted
技术标签:
【中文标题】PL/SQL 如何修复进程标志 id=4 错误打印以及如何显示错误消息【英文标题】:PL/SQL how can ı fixed process flag id=4 wrong printing and how can I error message 【发布时间】:2021-07-06 05:31:40 【问题描述】:创建表
create table curexample_test (id number, x number, y number, result number, process_flag varchar2(1), error_message varchar2(400))
insert into curexample_test
select 1, 20,4,null,null,null from dual
union
select 2, 15,3,null,null,null from dual
union
select 3, 36,9,null,null,null from dual
union
select 4, 7,0,null,null,null from dual
union
select 5, 105,15,null,null,null from dual
select * from curexample_test
创建函数
create or replace function divider(n1 in number, n2 in number)
return number
is
pragma autonomous_transaction;
n3 number;
begin
if n2 = 0 then
n3 :=null;
update curexample_test set process_flag = 'E' where n3 = null ;
else
n3 :=n1 / n2;
update curexample_test set process_flag = 'S' where n3 !=0 ;
end if;
COMMIT;
return n3;
end;
调用函数
select id,x,y , divider(x,y) as result,process_flag,error_message from curexample_test;
【问题讨论】:
【参考方案1】:我们很少在函数中执行 DML;如果必须这样做,请使用程序。
从您的代码开始:
UPDATE
语句中的 WHERE
子句必须修复
如果要存储 RESULT
,请同时修复 SET
子句
如果您将某些东西与NULL
进行比较,那么它不是例如where n3 = null
但where n3 IS NULL
SQL> CREATE OR REPLACE FUNCTION divider (n1 IN NUMBER, n2 IN NUMBER)
2 RETURN NUMBER
3 IS
4 PRAGMA AUTONOMOUS_TRANSACTION;
5
6 n3 NUMBER;
7 BEGIN
8 IF n2 = 0
9 THEN
10 n3 := NULL;
11
12 UPDATE curexample_test
13 SET result = n3, process_flag = 'E'
14 --WHERE n3 = NULL;
15 WHERE x = n1
16 AND y = n2;
17 ELSE
18 n3 := n1 / n2;
19
20 UPDATE curexample_test
21 SET result = n3, process_flag = 'S'
22 -- WHERE n3 != 0;
23 WHERE x = n1
24 AND y = n2;
25 END IF;
26
27 COMMIT;
28 RETURN n3;
29 END;
30 /
Function created.
测试:
SQL> SELECT id,
2 x,
3 y,
4 divider (x, y) AS result,
5 process_flag,
6 error_message
7 FROM curexample_test;
ID X Y RESULT PROCESS_FLAG ERROR_MESSAGE
---------- ---------- ---------- ---------- --------------- --------------------
1 20 4 5
2 15 3 5
3 36 9 4
4 7 0
5 105 15 7
然后是表格内容
SQL> select * from curexample_test;
ID X Y RESULT PROCESS_FLAG ERROR_MESSAGE
---------- ---------- ---------- ---------- --------------- --------------------
1 20 4 5 S
2 15 3 5 S
3 36 9 4 S
4 7 0 E
5 105 15 7 S
SQL>
【讨论】:
还有我如何为 id=4 添加错误消息 在不成功的情况下,错误信息应该打印在表格的error_message字段中。 将它添加到 UPDATE 语句中,它的 SET 子句 - 就像 RESULT 或 PROCESS_FLAG。没有区别。 非常感谢,我猜是catch异常 你并没有像 IF 那样“捕捉”任何东西。以上是关于PL/SQL 如何修复进程标志 id=4 错误打印以及如何显示错误消息的主要内容,如果未能解决你的问题,请参考以下文章
如何修复 PL/SQL:ORA-00932:不一致的数据类型:预期的 CLOB 得到了 -
编写一个 PL/SQL Proc 并在 proc 中调用一个函数。输入是productid。打印出订购产品 ID 的客户姓名