ホームページ  >  記事  >  データベース  >  Oracle ストアド プロシージャの機能とは何ですか

Oracle ストアド プロシージャの機能とは何ですか

青灯夜游
青灯夜游オリジナル
2022-02-24 17:58:414469ブラウズ

Oracle ストアド プロシージャの機能は次のとおりです: 1. 複雑な操作を簡素化し、全体的な開発コストを削減します; 2. データの独立性を高めます; 3. エラーの可能性を効果的に減らし、セキュリティを向上できます; 4. パフォーマンスを向上します。

Oracle ストアド プロシージャの機能とは何ですか

このチュートリアルの動作環境: Windows 7 システム、Oracle 11g バージョン、Dell G3 コンピューター。

Oracle ストアド プロシージャは、実際のデータベース開発プロセスでよく使用され、データベース開発者にとって必須のスキルとして、SQL ステートメントにおいてかけがえのない役割を果たします。いわゆるストアド プロシージャは、特定のビジネス機能を実行するためにデータベースに保存されるプログラム モジュールです。これは、1つ以上のPL/SQLコード・ブロックまたはSQL文で構成される一連のコード・ブロックです。

ストアド プロシージャの役割 (利点):

  • 複雑な操作を簡素化し、全体的な開発コストを削減します。

    ストアド プロシージャは、実際に実行されるビジネス ロジックの PL/SQL ブロックと複数の SQL 文をストアド プロシージャにカプセル化します。他の開発者は、書かれたプロシージャを呼び出すだけで、再理解することなく必要な結果が得られます。ビジネスを抽出し、専門の人に書いてもらいます。

  • # データの独立性を高めます。

    機能はビューと似ており、テーブルの基本データが変更された場合、呼び出し元のプログラムを変更することなく、プロセス内のコードを変更するだけで済みます。これにより、ユーザー プログラムが基本データに直接対応するコードを記述する必要がなくなります。これにより、コードの結合性が高まり、結合が少なくなります。

  • セキュリティを向上させます。

    ストアド プロシージャを使用すると、エラーの可能性が効果的に減ります。特定の操作を実行するためにストアド プロシージャを使用しない場合は、複数の個別の SQL ステートメントを実行する必要があり、実行ステップが多すぎるとエラーが発生する可能性が高くなります。 ############性能を上げる。

    実際の開発プロセスでは、ビジネス モジュール関数の開発で、問題を解決するために複数の SQL 文と複数の PL/SQL プログラム ブロックの使用が必要になる場合があります。これをプロシージャに書き込むことで、Oracle はそれを 1 回コンパイルするだけで済み、後でいつでも呼び出すことができます。プロシージャを使用せず、多数の SQL ステートメントをプログラムに直接記述する場合は、プログラムを複数回コンパイルし、データベースに複数回接続する必要があり、パフォーマンスが大幅に低下します。
  • Oracle ストアド プロシージャの作成構文:

  • create [or replace] procedure 过程名
    ( p1 in|out datatype,
      p2 in|out datatype,
      ...
      pn in|out datatype
        
    ) is 
        
        ....--声明部分
        begin
        
        ....--过程体
        end;
文法分析:

1. プロシージャ キーワードは、ストアド プロシージャの作成に使用されます。手順 注文します。

2. 作成 [または置換]: ストアド プロシージャが既に存在する場合は、元のプロシージャを上書きして置換します。

3. in|out: ストアド プロシージャには、入力パラメータと出力パラメータという 2 つのパラメータ オプションがあります。in は入力パラメータを表し、out は出力パラメータを表します。プロセスを使用する場合、入力パラメータには対応する変数が渡され、対応する変数は送信パラメータで受信される必要があります。

4. datatype は、受信および送信パラメータ変数に対応するデータ型を示します。

5. の後には、プロセスで使用される宣言された変数が続きます。

6. begin...endの途中に書かれているのがストアドプロシージャの具体的な操作です。

例 1. クラス内の特定のコースにおける生徒の成績ランキングを計算するストアド プロシージャを作成します。ストアド プロシージャを使用して、対応するランキングを計算して返します。コードは次のとおりです:

create or replace procedure sp_score_pm(
p_in_stuid in varchar2,--学号
p_in_courseid in  varchar2, --课程ID
p_out_pm out number--排名
)
is
ls_score number:=0;
ls_pm number:=0;
begin
  --获取该学生的成绩
  select t.score into ls_score from score t
   where t.stuid = p_in_stuid
     and t.courseid = p_in_courseid;
  --获取成绩比该学生高的人数
  select count(1) into ls_pm from score t
   where t.courseid = p_in_courseid
   and  t.score>ls_score;
   --得到该学生的成绩排名
   p_out_pm:=ls_pm+1;
exception
  when no_data_found  then
     dbms_output.put_line('该学生的课程:'||p_in_courseid|| '的成绩在成绩表中找不到');
end;

上記のコードを通じて、SQL ウィンドウで直接コンパイルを実行できます。コンパイルが成功したら、ストアド プロシージャを呼び出して、学生の対応するコース成績ランキングを取得できます。ストアド プロシージャには、受信パラメータと送信パラメータの割り当てが必要です, そのため、PL/SQL ステートメント ブロックを通じてテストできます。コードは次のとおりです:

declare
ls_pm number;--排名
begin
  --SC201801001
  sp_score_pm('SC201801001','R20180101',ls_pm);
  dbms_output.put_line('学号:SC201801001,课程号:R20180101 的成绩排名是:'||ls_pm);
  sp_score_pm('SC201801001','R20180102',ls_pm);
  dbms_output.put_line('学号:SC201801001,课程号:R20180102 的成绩排名是:'||ls_pm);
  --SC201801002
  sp_score_pm('SC201801002','R20180101',ls_pm);
  dbms_output.put_line('学号:SC201801002,课程号:R20180101 的成绩排名是:'||ls_pm);
  sp_score_pm('SC201801002','R20180102',ls_pm);
  dbms_output.put_line('学号:SC201801002,课程号:R20180102 的成绩排名是:'||ls_pm);
  
end;

結果は次のとおりです:

推奨されるチュートリアル: 「

Oracle チュートリアル

Oracle ストアド プロシージャの機能とは何ですか

以上がOracle ストアド プロシージャの機能とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。