[英]How to throw exception in Stored procedure Oracle for lock in table
我在Oracle中有一個存儲過程,用於獲取和顯示數據。 但是我想在其中實現另一種功能。
我想要的是,我想引發一個異常,並且該異常我想登錄到Oracle表中
樣品存儲過程
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>
您無需將其顯示在屏幕上,而是將其存儲在某個表中。
如果將動態性能視圖的select特權的相關同義詞授予當前用戶,則可以添加如下所示的SQL Select語句:
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"
在調用游標之前。
如果v_locked
變量的值大於zero
則相關表具有row lock contention
。 如果v_locked > 0
它將被警告並記錄在一個簡單的表中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.