Oracleの----ストアド・プロシージャおよびファンクション

ストアドプロシージャの
保存されたプロセスモデルパラメータはOUT IN、OUT、Inを含んでいます。

(デフォルトのパラメータ・モード)において、プロシージャ・コールを保存していないとき、引数の値がパラメータに渡されていることを示し、パラメータの役割は、唯一のパラメータを読んで、変数を果たし、このパラメータを変更することはできません。パラメータ内の変数または式です。
OUT:ストアドプロシージャが呼び出されたときに、引数の値は無視されていることを示し、パラメータが初期化されていないPL / SQL変数を働き、初期パラメータ値がNULLで、ストアドプロシージャ呼び出しの終了後に、リード/ライト動作をすることができます、パラメータ値は引数を与えています。OUTパラメータは変数だけではなく、定数または式を指定できます。
OUTでストアドプロシージャが呼び出されたときに、パラメータは、パラメータ値に渡されていることを示します。パラメータの行為は、PL / SQL変数、読み書き可能な初期化。OUTのモードパラメータは、変数、定数または式であってもなくてもよいです。
パラメータは、プログラムが正常に引数に渡されたパラメータ値のみを終了する場合にのみときOUTモードでは、OUT使用してください。
例えば:

CREATE OR REPLACEプロシージャproc_divide
(OUT数、OUT数でnum2の中NUM1)は
R1番号;
R2番号;
始める
R1:TRUNC(NUM1 / NUM2を)=;
R2:= MOD(NUM1、NUM2);
NUM1:= R1;
num2の:= R2;

例外
た場合、その後ZERO_DIVIDE
DBMS_OUTPUT.PUT_LINE(「分母を分割することはゼロにはできません」);
その後、その他
DBMS_OUTPUT.PUT_LINE(「カーソルを使用してエラーラン!」);
エンドproc_divide;

SERVEROUTPUT ON SETは、
DECLARE
N1番号: &N1 =;
N2番号:&= N2;
始める
proc_divide(N1、N2);
DBMS_OUTPUT.PUT_LINE( '2つの数の除算の結果:' || N1);
DBMS_OUTPUT.PUT_LINE( 'モジュロ結果が' | | N2);
END;
関数は、
(1)関数は、ディスプレイを返すことを除いて、ストアドプロシージャ同様の機能を作成します。

(2)作成プロセスにおけるファンクションキーを宣言していなかったのではなく、代わりにあるか、キーワードとして使用します。

(3)関数が返すことがあります。戻りデータ型を。

操作 - (4)関数は、一般的に行わDML(削除、挿入、更新データ操作言語)ではありません。

 

ストアドプロシージャの呼び出し機能:たとえば、

-機能increaseSalary()
関数increaseSalary(番号でtheIncome)VARCHAR2を返すCREATE OR REPLACE
AS
theMessage VARCHAR2(50);
始める
theIncome <= 4000その後、IF
theMessage:; = '低所得、増加賃金%10'
ELSIF theIncome <=その後、8000
theMessage:= '低所得の増加、賃金の5%';
ELSIF theIncome <= 20000その後、
theMessage:= '収入、一般的に増加し、賃金%2';

theMessage:= '高収入の1%、昇給';
END IF;
theMessageを返す;
エンド;
-ストアドプロシージャ
プロシージャgetempinfoという作成または置き換え
(OUTがtheID型に%をemployees.employee_id
theName%のemployees.first_name OUTタイプ、
theSalary%employees.salary OUTタイプ、
theMessage OUT VARCHAR2)を

始まる
選択EMPLOYEE_ID、FIRST_NAME、給料、increaseSalary(給与)
theId、theName、theSalary、theMessageに
従業員から
EMPLOYEE_ID = theId。

例外
時にNO_DATA_FOUNDその後、
DBMS_OUTPUT.PUT_LINE( '没有该员工信息');
終わり;


serveroutputをオンに設定します。
宣言
theIdは%タイプemployees.employee_id:=&theId。
theName employees.first_name%のタイプ。
theSalary employees.salary%タイプ。
theMessage VARCHAR2(50)。
開始
输入员工のID - ; getempinfoという(&theId、theName、theSalary、theMessage)
|| theId || '的员工、名字为' || theName: 'ID为' DBMS_OUTPUT.PUT_LINEを(
|| '收入为' || theSalary || '' || theMessage)。
終わり;

おすすめ

転載: www.cnblogs.com/hyhy904/p/10992432.html