Oracle 找到子记录时引发异常
我有一个plsql过程来删除子表和父表中的记录 我想在找到子记录时引发异常 我该怎么做Oracle 找到子记录时引发异常,oracle,stored-procedures,plsql,Oracle,Stored Procedures,Plsql,我有一个plsql过程来删除子表和父表中的记录 我想在找到子记录时引发异常 我该怎么做 CREATE OR REPLACE PROCEDURE myproc( p_id number, p_id2 number, p_par3 number) AS BEGIN DELETE FROM child_table WHERE id1 = p_id and par=p_par3; DELETE FROM
CREATE OR REPLACE PROCEDURE myproc(
p_id number,
p_id2 number,
p_par3 number)
AS
BEGIN
DELETE FROM child_table
WHERE id1 = p_id and par=p_par3;
DELETE FROM parent_table
WHERE no = p_id2;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
--raise
END myproc;
/
如果不想捕获异常,请删除异常块
CREATE OR REPLACE PROCEDURE myproc(p_id NUMBER, p_id2 NUMBER, p_par3 NUMBER) AS
BEGIN
DELETE FROM child_table
WHERE id1 = p_id
AND par = p_par3;
DELETE FROM parent_table WHERE no = p_id2;
COMMIT; /* do you really want to commit in a procedure? */
END myproc;
你不必把它们全都抓住()。如果你真的坚持捕捉并重新饲养,你可以使用或:
如果您想更具体一些,并且只捕获子异常,则必须进行编号,因为PL/SQL中不存在此错误:
CREATE OR REPLACE PROCEDURE myproc(p_id NUMBER, p_id2 NUMBER, p_par3 NUMBER) AS
child_exists EXCEPTION;
PRAGMA EXCEPTION_INIT(child_exists, -2292); /* raises ORA-02292 */
BEGIN
DELETE FROM child_table
WHERE id1 = p_id
AND par = p_par3;
DELETE FROM parent_table WHERE no = p_id2;
COMMIT; /* do you really want to commit in a procedure? */
EXCEPTION
WHEN child_exists THEN
-- do something
RAISE;
END myproc;
如果不想捕获异常,请删除异常块
CREATE OR REPLACE PROCEDURE myproc(p_id NUMBER, p_id2 NUMBER, p_par3 NUMBER) AS
BEGIN
DELETE FROM child_table
WHERE id1 = p_id
AND par = p_par3;
DELETE FROM parent_table WHERE no = p_id2;
COMMIT; /* do you really want to commit in a procedure? */
END myproc;
你不必把它们全都抓住()。如果你真的坚持捕捉并重新饲养,你可以使用或:
如果您想更具体一些,并且只捕获子异常,则必须进行编号,因为PL/SQL中不存在此错误:
CREATE OR REPLACE PROCEDURE myproc(p_id NUMBER, p_id2 NUMBER, p_par3 NUMBER) AS
child_exists EXCEPTION;
PRAGMA EXCEPTION_INIT(child_exists, -2292); /* raises ORA-02292 */
BEGIN
DELETE FROM child_table
WHERE id1 = p_id
AND par = p_par3;
DELETE FROM parent_table WHERE no = p_id2;
COMMIT; /* do you really want to commit in a procedure? */
EXCEPTION
WHEN child_exists THEN
-- do something
RAISE;
END myproc;
我想在找到子记录时引发异常
嗯
亚历山德罗
PS:修改了我的阅读理解能力不足的答案,我想你们想要一个例外,当儿童记录找不到的时候
我想在找到子记录时引发异常
嗯
亚历山德罗
PS:修改了我对阅读理解缺陷的回答,我想你想要一个例外,当未找到儿童记录时。在myproc中是否可能有类似的内容<代码>PRAGMA异常初始化(违反外键,-02291)如果过程中存在commit,您能建议会发生什么吗?当然,尽管我认为删除操作会引发
ORA-02292
,请参阅我的更新。对于用户定义的异常的进一步阅读:COMMIT结束事务,并且应该仅由调用的应用程序(如果不是PL/SQL)或最顶层的过程/语句(如果应用程序是PL/SQL)决定。通过中间过程频繁提交会中断事务流(例如,在批处理中间出现错误时,批处理过程将无法重新启动)。请参阅示例。是的,您是对的,我的应用程序中有一个executeUpdate
。谢谢。有可能在myproc中有这样的东西吗<代码>PRAGMA异常初始化(违反外键,-02291)如果过程中存在commit,您能建议会发生什么吗?当然,尽管我认为删除操作会引发ORA-02292
,请参阅我的更新。对于用户定义的异常的进一步阅读:COMMIT结束事务,并且应该仅由调用的应用程序(如果不是PL/SQL)或最顶层的过程/语句(如果应用程序是PL/SQL)决定。通过中间过程频繁提交会中断事务流(例如,在批处理中间出现错误时,批处理过程将无法重新启动)。请参阅示例。是的,您是对的,我的应用程序中有一个executeUpdate
。谢谢。感谢您的回复,Vincent Malgrat解决方案解决了我的问题。感谢您的回复,Vincent Malgrat解决方案解决了我的问题。谢谢。