Oracle データベースは、豊富な機能と非常に高い信頼性を備えた効率的なデータベース管理システムであり、エンタープライズ レベルのアプリケーションで広く使用されています。 Oracle ストアド プロシージャは、複数の SQL ステートメントを結合して保存できる特別なプログラム ユニットであり、日常のデータ処理タスクで使用されます。この記事では、Oracle ストアド プロシージャで SQL ステートメントを記述する方法を紹介します。
1. ストアド プロシージャを使用する理由
エンタープライズ アプリケーションを開発する場合、通常、データ インポート、データ クリーニング、データ変換、データ分析などのさまざまなデータ処理タスクに遭遇します。これらのタスクの中で、SQL ステートメントは最も重要なツールであり、データに対してさまざまな処理操作を実行できます。ただし、複雑なデータ処理タスクの場合は、複数の SQL ステートメントを記述する必要があり、これらの SQL ステートメントが繰り返し使用される場合があります。 SQL文を毎回手動で作成すると、時間と労力がかかるだけでなく、エラーが発生する可能性があります。このとき、ストアド プロシージャが機能する可能性があります。
ストアド プロシージャは、複数の SQL ステートメントをグループ化して全体的な論理ユニットを形成できる特別なプログラム ユニットです。ストアド プロシージャは SQL ステートメントをカプセル化して再利用できるため、コードの作成とメンテナンスが簡素化され、開発効率が向上します。さらに、ストアド プロシージャを使用すると、データベースのパフォーマンスが向上し、データベースとのやり取りの数が減り、それによってネットワークの遅延とデータ伝送損失が削減されます。
2. ストアド プロシージャの基本構文
ストアド プロシージャは PL/SQL 言語で記述されます。 PL/SQL は Oracle データベース専用のプログラミング言語であり、オブジェクト指向プログラミングと手続き型プログラミングをサポートします。ストアド プロシージャは、宣言部分、プロシージャ本体部分、例外処理部分の 3 つの部分で構成されます。
DECLARE
(变量声明部分)
BEGIN
(过程体部分)
EXCEPTION
(异常处理部分)
END;
このうち、「DECLARE」は宣言部、「BEGIN」は処理本体部、「EXCEPTION」は例外処理部を表します。宣言部分では、プロセスに必要な変数、カーソル、その他のデータ構造を宣言し、これらのデータ構造をプロセス本体で使用できるようにする必要があります。
プロセス本体部分には、特定の SQL 文と PL/SQL コードが記述され、宣言部分で宣言された変数と変数を使用できます。カーソルおよびその他のデータ構造を使用できます。プロセス本体では、SQL ステートメントを使用してデータベース内のテーブルやビューなどのデータ構造にアクセスしたり、カーソル オブジェクトを使用してクエリ結果セットを格納したりできます。同時に、制御フロー構造をプロセス本体で使用して、ループや分岐などの操作を実装することもできます。例:
BEGIN
--声明变量 DECLARE var1 VARCHAR2(20); BEGIN --执行sql语句并存储结果 SELECT column1 INTO var1 FROM table1 WHERE id=1; --输出结果 dbms_output.put_line(var1); END;
END;
上記のコードでは、宣言セクションで var1 という名前の変数を宣言し、プロシージャ本体のステートメントで SELECT を使用してクエリを実行しました。 table1 の id 1 のデータを取得し、クエリ結果を変数 var1 に代入し、最後に結果を出力します。プロセス本体では、結果を出力するために dbms_output.put_line() も呼び出されます。
--声明变量 DECLARE var1 VARCHAR2(20); BEGIN --执行sql语句并存储结果 SELECT column1 INTO var1 FROM table1 WHERE id=1; --输出结果 dbms_output.put_line(var1); EXCEPTION WHEN no_data_found THEN dbms_output.put_line('查询结果为空'); WHEN others THEN dbms_output.put_line('发生未知异常'); END;
--声明变量和游标对象 v_empno NUMBER; --员工编号 v_ename VARCHAR2(20); --员工姓名 v_sal NUMBER; --员工工资 v_count NUMBER := 0; --统计变量 CURSOR c_emp IS SELECT * FROM emp;
FOR emp_rec IN c_emp LOOP v_empno := emp_rec.empno; v_ename := emp_rec.ename; v_sal := emp_rec.sal; --如果工资低于2000,将工资增加1000 IF v_sal<2000 THEN UPDATE emp SET sal=sal+1000 WHERE empno=v_empno; v_count := v_count + 1; END IF; END LOOP; --输出处理结果 dbms_output.put_line('共更新了'||v_count||'行数据');
WHEN others THEN dbms_output.put_line('发生异常:'||SQLERRM);
以上がOracle ストアド プロシージャの SQL ステートメントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。