簡體   English   中英

如何在存儲過程Oracle中引發異常以鎖定表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM