Oracleでは、データベース格納プロセスと記憶関数の使用について


記憶プロセスと記憶関数とは、すべてのユーザプログラムのためにデータベースに格納されたサブルーチンを記憶プロセス、記憶関数といいます。格納プロセスは値を返しませんでした。記憶関数には戻り値があります。  ストレージの作成      CREATE PROCEUREコマンドで記憶プロセスと記憶関数を作成します。      文法:create[or replace]PROCEUREプロセス名(パラメータリスト)AS        PLSQLサブルーチン;  保存プロセス例:指定された従業員のための元の給料に基づいて10%の賃金を支払う。 /*指定された従業員のために、元の給料の10%の給料をもとにして、そして給料前と給料後の給料を印刷します。*/SQL>create or replace procedure raseSalary(emped in number)    as    pSal emp.sal%type;--従業員の現在の給料を保存します。    Begin--その従業員の給料を調べます。    select sal into psal from emphere empno=emppid;その社員に給料を上げる。    udate emp set sal=sal*1.1 where empno=emppid;--賃上げ前後の賃金を印刷する    dbms_out put.put_LINE('社員番号:'𞓜𞓜epid𞓜𞓜';𞓜';が給料を上げる前に   ' || pspal𞓜𞓜が給料を上げた後、𞓜pspal*1.1)    end; 1  /Procedure created--格納プロセス呼び出し--方法一SQL>serverout put onSQL>exec rasesalary(7369)従業員番号:7369給料を上げる前に800元の給料を上げた後に880方法の2    set serverout put onbegin rasesalary(7369)end/PL/SQL procedure success fully completted       記憶関数      関数(Function)は、名前付きの記憶プログラムです。パラメータを持って計算値を返します。関数とプロセスの構造は似ていますが、関数値を返すためにRETURNのサブフレーズが必要です。関数は、関数名、結果値の種類、パラメータタイプなどを指定します。     ストレージ関数のシンタックスを確立します。CREATE[OR REPLACE]FNCTION関数名(パラメータリスト)RETURN関数値タイプASPLSQLサブルーチン。 例:ある従業員の年収を調べる。SQL>/**//    /*     従業員の総収入を調べる    */    create or replace function queryEmpSalary(emppid in number)    return number   as    pSal number;--変数を定義して従業員の給料を保存します。    pComm number;--変数保存従業員のボーナスを定義します。   begin   select sal,comm into psp,pcompm from emphere empno=emppid;   return pspal*12+nvl(pcomp,0)   end;   /Function created   l   関数の呼び出しSQL>declare    v_。sal number    begin    v_。sal:=queryEmpSalary(7934)    dbms_out put.put_line('salary is)'𞓜v_sal);    end;    /salary is:15600 PL/SQL procedure success fully compleeted SQL>begin    dbms_out put.put_line('salary is:''124 queryEmpSalary(7934);    end;    /salary is:15600 PL/SQL procedure succefully completted        トリガー       データベースフリップフロップは表に関連して記憶されているPL/SQLプログラムです。Oracleは、特定のデータ操作文(Insert,udate,delete)が指定された表に発行される毎に、フリップフロップで定義されたステートメントシーケンスを自動的に実行する。       トリガーの種類         ステートメントレベルトリガー        指定された操作語句の操作の前または後に一度実行します。この文がどれだけの行に影響を与えたかに関わらず。         行レベルトリガー(FOR EACH ROW)        トリガーステートメント機能の各レコードがトリガされます。行レベルトリガーでは、oldとnewダミー記録変数を使用して、値の状態を識別します。      トリガーCREATEを作成  [TRIGGERトリガー名   {BEFOREE AFTER   {DELETE_INSERT_UDATE[OF列名]   オン  表の名前   [FOR EACH ROW[WHEN(条件)]   PLSQLブロック       例1:非稼働時間を制限してデータベースにデータSQLを挿入する>create or replace    trigger securityEmp    before insert on emp    declare    begin    if to_char(sysdate,'day')in('木曜日','土曜日','日曜日')    or to_number(to_char(sysdate、'hh 24')not between 8 and 18 then    レイセ.appication_error(-20001、'非稼働時間にデータを挿入することはできません。')    end if;   end;   /Trigger createdトリガ文と疑似記録変数の値
トリガ文
:old
:new
インセンス
すべてのフィールドが空です。
挿入するデータを
Update
以前の行の値を更新します。
更新後の値
delete
以前の行の値を削除します。
すべてのフィールドが空です。
例2:確認データ(チェックempテーブルのsalの修正値が元の値より低くない)SQL>create or replace trigger chockSal    before udate of sal on emp    for each row    declare    begin    if:new.sal<:old.sal then    レイセ.appication_error(-20001、'更新後の給与は更新前より小さい')    end if;    end;   /Trigger created運転後の結果:SQL>udate emp set sal=260 where empno=7499;udate emp set sal=260 where empno=7499 ORA-20001:更新後の給与は更新前よりORA-0512:「SCOTT.CHECKSAL」、ライン4 ORA-0488:触発器'SCOTT.CHECKSAL'の実行中にエラーが発生しました。       トリガーまとめ      トリガーは使用可能です。         データ確認・         複雑な安全性検査・         監査、追跡表に作成されたデータ操作などを行います。      トリガー、プロセス、関数を調べます。         Select*from user_triggers;         Select*from user_source;