如何在存储过程Oracle中为锁定表引发异常
我在Oracle中有一个用于获取和显示数据的存储过程。但我想在其中实现另外一个功能 我想要的是,我想要抛出一个异常,而这个异常我想要登录到一个Oracle表中 示例存储过程如何在存储过程Oracle中为锁定表引发异常,oracle,exception,stored-procedures,Oracle,Exception,Stored Procedures,我在Oracle中有一个用于获取和显示数据的存储过程。但我想在其中实现另外一个功能 我想要的是,我想要抛出一个异常,而这个异常我想要登录到一个Oracle表中 示例存储过程 CREATE OR REPLACE PROCEDURE GET_FCA_GISDATA( P_GRPNAME IN NVARCHAR2, TB
CREATE OR REPLACE PROCEDURE GET_FCA_GISDATA(
P_GRPNAME IN NVARCHAR2,
TBLDATA_APP OUT SYS_REFCURSOR
) AS
BEGIN
OPEN TBLDATA_APP FOR
SELECT IP.ID,
IP.SAP_ID,
IP.ID_OD_COUNTCHANGE,
IP.ID_OD_CHANGEDDATE,
IP.RRH_COUNTCHANGE,
IP.RRH_CHANGEDDATE,
IP.TENANCY_COUNTCHANGE,
IP.TENANCY_CHANGEDDATE,
ST.STATUS,
IP.RFE1_DATE_BAND,
IP.RFS_DATE_BAND,
IP.CREATED_BY
FROM TBL_IPCOLO_MAST_INFO IP
LEFT JOIN TBL_IPCOLO_STATUS ST
ON IP.FCA_STATUS = ST.ID
WHERE UMS_GRP_TO_NAME = P_GRPNAME
AND ST.ISACTIVE = 1
ORDER BY 12 DESC;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END GET_FCA_GISDATA;
请建议如何引发异常。如何引发您自己的异常?像这样:
SQL> set serveroutput on
SQL> create or replace procedure p_test is
2 my_ex exception;
3 begin
4 raise my_ex;
5 exception
6 when my_ex then
7 dbms_output.put_line('My exception');
8 end;
9 /
Procedure created.
SQL> exec p_test
My exception
PL/SQL procedure successfully completed.
SQL>
与其在屏幕上显示,不如将其存储到某个表中。如果将动态性能视图的选择权限的相关同义词授予当前用户,则可以添加如下SQL Select语句:
在调用游标之前
如果
v_locked
变量的值大于0
,则相关表具有行锁争用
。如果v\u locked>0
,则会发出警报并记录在一个简单的表中 该过程永远不会在锁定的行上抛出错误;正是这个程序接受了这个ref游标并处理它,才需要处理这个错误。@Boneist:ohh,我明白了。。你能推荐一些示例来抛出自定义错误吗??你知道这个请求背后的原因吗?如何引用您的程序?这里没有足够的信息告诉您需要做什么。打开游标时不能强制发生错误,因为所做的只是设置一段代码(“执行计划”),告诉Oracle如何获取下一行。它实际上并不获取行。而且,作为select语句,它实际上并不关心行是否被锁定。@Boneist如果在循环中他正在执行dml(更新插入或删除数据),那么可能会得到错误异常,对吗?@Moudiz如果示例过程显示了如何使用ref游标,那么是的,可以处理错误。但是,编写的示例过程永远不会返回关于锁定行的错误。
Select count(1)
Into v_locked
From all_objects o
Join v$locked_object l on o.object_id = l.object_id
Join v$session s on l.session_id = s.sid
Join v$session_wait w on s.sid = w.sid
Where o.object_name = 'TBL_IPCOLO_MAST_INFO'
and s.status = 'ACTIVE'
and lower(w.event) like '%enq%contention%' --> "enq: TX - row lock contention"