Oracle PL SQL中編寫空操作的儲存過程

2021-09-01 13:07:56 字數 965 閱讀 2994

儘管我們編寫儲存過程(stored procedure)是希望其完成一些特定的功能。但是在某些情況下,現有的儲存功能所實現的功能可能已經不再需要或者我們打算採用其它方式來實現,此時為了實現對現有系統的最小改動量(以盡可能的減少對現有系統的影響),我們不能刪除這個儲存過程,但需要修改這個儲存過程使其做空操作,即不實現任何實質性功能。

但是,oracle在編譯儲存過程時,對儲存過程體的**有所要求:1、儲存過程所宣告的所有引數,在儲存過程體中必須使用到;2、儲存過程體中所有宣告或者計算出的變數值必須在本過程中要被使用到。因此,要實現儲存過程的空操作,我們無法通過注釋掉原有儲存過程體中的所有**來實現,因為注釋後的**根本無法通過編譯。也就是說,我們需要一些特殊處理以實現儲存過程實現空操作:將儲存過程體的**寫為乙個if語句,而該語句的條件永遠無法成立,並且這個語句又使用到了儲存過程定義的所有變數。這樣便可以使儲存過程編譯通過,而在其具體執行時,又不實現任何實質功能。

比如,下面的儲存過程中,假設timestamp表示的是系統當前時間距離2023年1月1日的秒數(因此,該值永遠只會是正數,不會是負數)。

create or replace procedure adisabledsp(timestamp number,

tablename varchar2) is

begin

if timestamp<0 then --該條件永遠無法成立,且使用了輸入引數timestamp

dbms_output.put_line('we are going to operate on table ' || tablename); --使用了輸入引數tablename

end if;

end;

上面的**,通過在if語句中指定「timestamp<0」這一無法成立的條件,使得整個if語句體內的**永遠無法被執行,從而達到空操作的目的。並且,if語句中的條件子句以及語句體中使用了本儲存過程定義的所有變數,保證了編譯能夠通過。

oracle plsql中decode 函式用法

在oracle plsql的,decode函式有乙個if then else語句的功能。decode函式的語法是 decode expression search result search result default expression值進行比較。search 是對表達相比的價值。result...

oracle PL SQL 中變數繫結用法

從oracle的共享池的設計 和oracle推薦的 pl sql 寫法中,可以看出,變數繫結對效能有比較大的影響,那麼,如何在pl sql 中使用變數繫結呢?首先看看不使用變數繫結的用法 declare cursor cur temp id number is select from table a...

Oracle PL SQL 中如何使用Array

因為在pl sql中並沒有陣列,這是我查資料找的範例和自己寫的範例來解釋如何在pl sql中使用陣列。也許很多人已知道,不過就是讓不知道的朋友們了解一下吧。單維陣列 declare type emp ssn array is table of number index by binary integ...