Oracleの研究ノート(XIX)ルーチン - ストアドプロシージャ

ルーチン - ストアドプロシージャ

私たちは、プロシージャ、関数とトリガストアドルーチンがあり、アクションが必要なものをカプセル化するためのルーチンを使用することができます。
ここでは、ストアドプロシージャを学ぶために-

文法

create [or replace] procedure $procedure_name$ [(参数列表)]
    is/as --相当于declare
    begin
        [exception]--异常处理
    end $procedure_name$;
    
删除过程:drop procedure $procedure_name$

ストアドプロシージャを作成します。

パラメータなしでストアドプロシージャを作成します。

create or replace procedure hello
    is
    begin
        dbms_output.put_line('hello world');
    end hello;
    / --执行  

パラメータ化ストアドプロシージャを作成します。

三つのモードパラメータ、幅を定義せずにパラメータの型定義があります。

モード 説明
(デフォルト) モデルパラメータは、変数の形またはリテラル値で送信することができます
でる モデルパラメータは、変数として渡す必要があり、変数が割り当てられてはならない、受信プロセスによって返される結果
アウト モデルパラメータは、変数として渡す必要があります
--输出指定字符串(使用in)
create or replace procedure print(text in varchar2)
    is
    begin
        dbms_output.put_line(text);
    end print;
    /
    
--计算结果,返回给调用者(使用out)
create or replace procedure sum(num1 in int,num2 in int,result out int)
    is
    begin
        result := num1 +num2;
    end sum;
/

declare
    --变量不应该赋值
    v_result int := 5;
begin
    sum(5,6,v_result);
    --上面的语句还可以这样写,这样便于直观的知道参数对应哪一个
    --sum(num1 =>5,num2=>6,result=>v_result);
    dbms_output.put_line(v_result);
end;
/

--交换两个数字(使用in out)
create or replace procedure swap(a in out int,b in out int)
is
    v_temp int ;
begin
    v_temp := a;
    a := b;
    b := v_temp;
end swap;
/

declare
    a int :=5;
    b int := 9;
begin
    swap(a,b);
    dbms_output.put_line(a||','||b);
end;
/

実行

PL / SQLの実行

begin
    --包名.过程名
    --未定义包名,不需要写包名
    $procedure_name$;
end;
/
--如果想要其他用户访问当前用户的存储过程,当前用户下,授权给其他用户权限
grant execute on $procedure_name$ to $user_name$;

コマンドラインの実行

exec/execute $procedure_name$[(参数)]

おすすめ

転載: www.cnblogs.com/kexing/p/10951517.html