2015-08-24 20 views
0

我需要創建一個oracle腳本(非存儲過程),它有一些在腳本中多次使用的sql語句(process_audit sql語句)。我的預言腳本如何在oracle的同一腳本中重用代碼?

僞代碼:

begin 
open cursor1 
loop(1) 
open cursor2 
loop(2) 
if codition1 then 
    process_audit sql statements; 
else 
sql statements; 
end if; 
end loop(2); 
close cursor2; 
    end loop(1); 
    close cursor2; 
    process_audit sql statements; 
    end; 

在Java/C,我們可以創建一個函數,並把可重複使用的線,然後調用函數任何需要的地方。 我們可以在oracle sql腳本中做類似嗎? 我無法使用函數,因爲我無法在數據庫模式中永久創建任何東西。

+0

您可以在oracle中創建函數也可以參考http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/create_function.htm。 – Buddi

+0

你對「不是PL/SQL」有什麼意思? PL/SQL _是用於編寫Oracle函數,程序等的過程語言(任何你不能用SQL做的事情)。 –

+0

如果我使用了函數,那麼函數將在數據庫中永久創建,並且我不想在數據庫中創建任何東西。 – PVJ

回答

2

在定義段將代碼共同部分在內的程序(或功能)中PLSQL塊並運行它像這裏:

declare 
    var number := 0; 

    procedure process_audit is 
    begin 
    dbms_output.put_line(var); 
    end; 

begin 
    var := var + 10; 
    process_audit; 
    var := var * 5; 
    process_audit; 
end; 
1

可以在plsql塊,其將不會在所創建的宣告procedure and functionschema演示

-- Declarative part of block begins 
DECLARE 
    -- variable declaration 
    in_string VARCHAR2(100); 
    out_string VARCHAR2(200); 

    -- Procedure declaration and definition begins 
    PROCEDURE pseudo_proc(
    original IN VARCHAR2, 
    new_string OUT VARCHAR2 
    --more params ... 
) 
    IS 
    BEGIN 
     --your pseudo code 
    EXCEPTION 
     --handle exception 
    END; 
    -- Procedure declaration and definition ends 
BEGIN 
    pseudo_proc(in_string, out_string); -- Procedure invocation 
    pseudo_proc(in_string, out_string); -- Procedure invocation 
    pseudo_proc(in_string, out_string); -- Procedure invocation 
    -- any no of times..... 
END; 
-- Executable part of block ends 
/

請參閱doc

注意:所有其他變量應聲明在procedure or function聲明之上。

相關問題