ホームページ  >  記事  >  データベース  >  Oracle ストアド プロシージャの基本構造には何が含まれますか?

Oracle ストアド プロシージャの基本構造には何が含まれますか?

青灯夜游
青灯夜游オリジナル
2022-03-02 16:52:153870ブラウズ

Oracle ストアド プロシージャの構造は、1. 処理宣言、2. 実行処理部分、3. ストアド プロシージャ例外の 3 つの部分で構成されますが、スクリプトのフォールト トレランスを強化する場合、およびストアド プロシージャの例外部分は省略できます。例外処理を記述するだけでデバッグが容易になります。

Oracle ストアド プロシージャの基本構造には何が含まれますか?

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

ストアド プロシージャとは何ですか?

ストアド プロシージャ: Baidu Encyclopedia で説明されています。ストアド プロシージャ (Stored Procedure) は大規模なデータベース システムで使用されます。 , 特定の関数を完了するための SQL ステートメントのセットがデータベースに保存されます。最初のコンパイル後、再度呼び出すときに再度コンパイルする必要はありません。ユーザーはストアド プロシージャの名前を指定し、パラメータを指定します (ストアド プロシージャの場合は、プロシージャにはパラメータがあります) ) を使用してストアド プロシージャを呼び出します。

簡単に言うと、これは 1 つのことを具体的に実行する SQL ステートメントです。

データベース自体または Java プログラムによって呼び出すことができます。

Oracle データベースのストアド プロシージャはプロシージャです。

ストアド プロシージャの構造

(1) 基本構造

Oracle ストアド プロシージャには 3 つの部分が含まれます:処理宣言、実行処理部分、ストアドプロシージャ例外(記述してもしなくてもよい、スクリプトのフォールトトレランスやデバッグの利便性向上のため、例外処理を記述する)

(2) No-パラメータ ストレージ プロシージャ

/**
name_procedure就是自己自定义的存储过程名
*/
create or replace procedure name_procedure AS/IS
	变量名1  数据类型;
	变量名2  数据类型;
BEGIN
	--要处理的业务逻辑
	EXCEPTION    --存储过程异常
END name_procedure;

(3). パラメータ ストアド プロシージャ

通常のパラメータ ストアド プロシージャ

/*
age 类型为number 初始化为20;
*/
CREATE OR REPLACE PROCEDURE name_procedure (param1 TYPE)
AS/IS
name varchar(20);
age number :=20;
BEGIN
  --业务处理.....
END ;

パラメータと代入を含むストアド プロシージャ

CREATE OR REPLACE PROCEDURE 存储过程名称(
       s_no in varchar,
       s_name out varchar,
       s_age number) AS
total NUMBER := 0;
BEGIN
  SELECT COUNT(1) INTO total FROM student s WHERE s.age=s_age;
  dbms_output.put_line('符合该年龄的学生有'||total||'人');
  EXCEPTION
    WHEN too_many_rows THEN 
    DBMS_OUTPUT.PUT_LINE('返回值多于1行'); 
END

パラメータ IN は入力パラメータを表し、パラメータのデフォルト モードです。

  • OUT は戻り値パラメータを表し、その型は Oracle の任意の有効な型を使用できます。

  • #OUT モードで定義されたパラメータはプロセス本体内でのみ割り当てることができます。つまり、パラメータは呼び出し元のプロセスに特定の値を渡すことができます

  • IN OUT は、パラメーターがプロセスに値を渡すことができる、または特定の値を渡すことができることを意味します。

行 7: パラメーターを使用したクエリ ステートメントフィルター条件として s_age、INTO キーワードを指定し、見つかった結果を total 変数に代入します。

8 行目: クエリ結果を出力します。「||」はデータベース内の文字列を接続するために使用されます

9 ~ 11 行目: 例外処理を実行します

ストアド プロシージャの構文

(1)演算子

Oracle ストアド プロシージャの基本構造には何が含まれますか?

(2) SELECT INTO STATEMENTステートメント

  • クエリ結果を 1 つの変数または複数の変数に割り当てます

要件: 結果は 100 点です生徒の名前、年齢, 発祥の地

CREATE OR REPLACE PROCEDURE DEMO_CDD1 IS
s_name VARCHAR2;   --学生名称
s_age NUMBER;      --学生年龄
s_address VARCHAR2; --学生籍贯
BEGIN
  --给单个变量赋值
  SELECT student_address INTO s_address
  FROM student where student_grade=100;
   --给多个变量赋值
  SELECT student_name,student_age INTO s_name,s_age
  FROM student where student_grade=100;
  --输出成绩为100分的那个学生信息
  dbms_output.put_line('姓名:'||s_name||',年龄:'||s_age||',籍贯:'||s_address);
END

#(3) Select文

#

//if 后面一定要添加THEN 相当于Java中的 大括号
IF s_sex=1 THEN
  dbms_output.put_line('这个学生是男生');
ELSE IF THEN
  dbms_output.put_line('这个学生是女生');
ELSE
  dbms_output.put_line('这个学生性别错误');
END IF
##(4) ループ文

# #a.基本ループ

LOOP
  IF 表达式 THEN
    EXIT;
  END IF
END LOOP;
b.while ループ
WHILE 表达式 LOOP
  dbms_output.put_line('haha');
END LOOP;

c.for ループ

//a 1 到 20 范围
FOR a in 10 .. 20 LOOP
  dbms_output.put_line('value of a: ' || a);
END LOOP;

推奨チュートリアル: 「

Oracle チュートリアル

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

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