まず、ストアドプロシージャは何ですか。
ストアドプロシージャ(ストアドプロシージャ)貯蔵後にコンパイルされたデータベースにSQL文の特定のセットを完了するための関数のセットです。ユーザによって指定され、ストアドプロシージャのパラメータはそれを実行するために与える名(もしパラメータを持つストアドプロシージャ)。ストアドプロシージャは、任意の適切に設計されたデータベース・アプリケーションは、ストアドプロシージャを使用する必要があり、データベース内の重要な課題です。
ストアドプロシージャは、SQL文で書かれたアプリケーションが呼び出すだけで使用することができ、データベースサーバにストレージをコンパイルし、最適化した後に制御プロセスを流れています。ORACLEでは、関連するプロセスの複数のパッケージを形成するために一緒に組み合わされてもよいです。次のような利点:
1.ストアド・プロシージャおよび関数は、データベースに格納されているデータベース・オブジェクトに名前を付けることができます。コードはローカルに格納されていないため、データベースに保存されている利点は、明白である、ユーザーがクライアント上の任意のデータベースにログオンして、コードを呼び出したり、修正することができます。
2.ストアド・プロシージャおよび関数は、ストアド・プロシージャおよび関数を使用するために、ストアドプロシージャおよび関数の所有者からの許可を持っている必要があり、データベースのセキュリティを保証することによって提供することができ、使用者または作成者は、ストアド・プロシージャまたは関数呼び出しを実行するために自身を承認しました。
3.情報ストアド・プロシージャおよび関数は、データ・ディクショナリに書かれているので、ストアドプロシージャが共通モジュールとして見ることができ、ユーザー作成PL / SQLストアド・プロシージャまたは他のプログラムがそれを呼び出すことができる(ただし、ストアド・プロシージャおよび関数PLを呼び出すことはできません/ SQLプログラム)。再使用可能な機能は、ストアドプロシージャとして設計することができます。
4.手順および他の高レベルの言語のような関数のように、ストアドプロシージャや関数を渡すパラメータを渡すことができ、パラメータもさまざまな方法があります。ストアドプロシージャを使用して、戻り値を持つことができない、戻り値を持つことができ、ストアドプロシージャパラメータの戻り値が戻されなければならない。この関数は、他の標準機能と同様に、我々は関数名の関数値を呼び出すことによって返すことができ、特定のデータ型を持っています。
5.ストアドプロシージャと関数は、それが唯一のコンパイラによって呼び出すことができ、構文エラーを排除するためにコンパイルする必要があります。
第二に、ストアドプロシージャを作成します。
ストアドプロシージャ名を作成する[または交換] [(入力および出力パラメータ、イン/アウトパラメータ)]
AS /あります
ベギン
文章;
[例外
文章;]
ストアドプロシージャ名を終了します。
[実施例1 ] パラメータを取らないストアドプロシージャ。
SQL> serveroutputをオンに設定
SQL>プロシージャpro_no_parを作成または交換です
2開始
3アップデートEMPセットSAL = SAL + ID = 3 800。
4コミット;
5 DBMS_OUTPUT.PUT_LINE( '給与が調整された!!');
6 pro_no_par端;
7 /
SQL> pro_no_parを実行します。
賃金が調整されました!!
PL / SQLプロシージャが正常に完了しました。
[実施例2 ] パラメータでプロセスモデルに格納されている(:、位置によって渡さ;混合モード配信名が通過モード、3つのパラメータが存在します)
SQL> serveroutputをオンに設定
SQL>プロシージャpro_in_parを作成したり、交換してください
NVARCHAR2 2(VAR_1、
数3 VAR_2)されています
4開始
5更新EMPセットSAL = SAL + VAR_2 ENAME = VAR_1。
6コミット;
7 DBMS_OUTPUT.PUT_LINE(VAR_1 || || VAR_2 || 'ドルを!' '賃金が上昇してきました');
8エンドpro_in_par。
9 /
SQL> pro_in_par( 'スミス'、1500)を実行します。
スミスの給料は1500元増加しています!
【例3】 一个带out模式和in out模式参数存储过程
SQL> create or replace procedure pro_out_par
2 (var_1 in out number,
3 var_2 out emp.ename%type,
4 var_3 out emp.sal%type) is
5 begin
6 select ename,sal into var_2,var_3 from emp where id=var_1;
7 end pro_out_par;
8 /
SQL>set serveroutput on
SQL>declare
2 ex_var_1 number;
3 ex_var_2 emp.ename%type;
4 ex_var_3 emp.sal%type;
5 begin
6 ex_var_1:=8;
7 pro_out_par(ex_var_1,ex_var_2,ex_var_3);
8 dbms_output.put_line('员工号为'||ex_var_1||'的员工姓名是:'||ex_var_2||'工资是:'||ex_var_3);
9 end;
10 /
员工号为8的员工姓名是:周瑜工资是:8500
三、存储过程参数说明:三种形式的参数
1. IN 定义一个输入参数变量,用于传递参数给存储过程
2. OUT 定义一个输出参数变量,用于从存储过程获取数据
3. IN OUT 定义一个输入、输出参数变量,兼有以上两者的功能
四、 删除存储过程
DROP PROCEDURE 存储过程名;
例如:
SQL> drop procedure pro_no_par;
过程已删除。