Oracle データベースのストアド プロシージャは、データベースの操作効率とデータ セキュリティを大幅に向上させるプリコンパイルされたプログラムです。ストアド プロシージャを使用すると、ユーザーは複雑なビジネス ロジックを呼び出し可能なコード ブロックにカプセル化し、簡単に再利用できます。
ストアド プロシージャの開発では、SQL ステートメントの実行は不可欠な操作です。この記事では、Oracle ストアド プロシージャを使用して SQL ステートメントを実行する方法とテクニックを紹介します。
ストアド プロシージャで SQL ステートメントを実行する最も基本的な方法は、静的 SQL ステートメントを使用することです。静的 SQL ステートメントとは、ストアド プロシージャの作成時に決定され、直接実行できる SQL ステートメントを指します。例:
CREATE OR REPLACE PROCEDURE test_proc IS BEGIN INSERT INTO test_table VALUES (1, 'test'); COMMIT; END; /
上記の例では、静的 INSERT INTO ステートメントが test_proc ストアド プロシージャで実行され、ストアされます。データを test_table テーブルに挿入します。
静的 SQL ステートメントはほとんどの状況のニーズを満たすことができますが、特定のケースでは動的 SQL ステートメントを使用する必要がある場合があります。動的 SQL ステートメントとは、実行時にパラメーターやその他の情報に基づいて動的に生成される SQL ステートメントを指します。例:
CREATE OR REPLACE PROCEDURE test_proc2(p_id NUMBER) IS v_sql VARCHAR2(200); BEGIN v_sql := 'UPDATE test_table SET name = ''new_value'' WHERE id = ' || p_id; EXECUTE IMMEDIATE v_sql; COMMIT; END; /
上記の例では、動的 UPDATE ステートメントは、test_proc2 の入力パラメーター p_id に基づいて生成されます。ストアド プロシージャ、および使用される EXECUTE IMMEDIATE コマンドが実行されます。動的 SQL ステートメントを使用する場合は、SQL インジェクションなどの問題に注意する必要があることに注意してください。
場合によっては、ストアド プロシージャで複数の SQL ステートメントを実行する必要があります。 Oracle では、BEGIN および END ステートメント ブロックを使用してコード セグメントを形成し、一緒に処理できます。例:
CREATE OR REPLACE PROCEDURE test_proc3 IS BEGIN INSERT INTO test_table VALUES (1, 'test1'); INSERT INTO test_table VALUES (2, 'test2'); COMMIT; END; /
上の例では、test_proc3 ストアド プロシージャで 2 つの静的 INSERT INTO ステートメントが実行されます。
ストアド プロシージャでは、カーソルを使用して SQL クエリの結果セットをコードに返し、さらに処理することができます。カーソルは、SQL クエリ結果セット内の 1 つ以上のデータ行を指すために使用できるデータ構造です。カーソルを使用するには、次の手順が必要です。
例:
CREATE OR REPLACE PROCEDURE test_proc4 IS CURSOR c_test IS SELECT * FROM test_table; r_test c_test%ROWTYPE; BEGIN OPEN c_test; LOOP FETCH c_test INTO r_test; EXIT WHEN c_test%NOTFOUND; DBMS_OUTPUT.PUT_LINE('ID: ' || r_test.id || ', NAME: ' || r_test.name); END LOOP; CLOSE c_test; END; /
上の例では、カーソル変数 c_test が test_proc4 ストアド プロシージャで宣言されています。 OPEN 文を使用してオープンされます。 Cursor。FETCH 文を使用してカーソル変数からデータ行を取得し、DBMS_OUTPUT.PUT_LINE を使用して出力します。
バインド変数は、SQL インジェクションやその他の問題を回避するために SQL ステートメントにバインドできる Oracle データベースの特別な変数です。コードの可読性とセキュリティが向上します。バインド変数を使用するには、次の手順が必要です。
CREATE OR REPLACE PROCEDURE test_proc5(p_id NUMBER) IS v_sql VARCHAR2(200); v_name VARCHAR2(50); BEGIN v_sql := 'SELECT name FROM test_table WHERE id = :id'; EXECUTE IMMEDIATE v_sql INTO v_name USING p_id; DBMS_OUTPUT.PUT_LINE('NAME: ' || v_name); END; /
以上がOracleストアドプロシージャ実行SQLの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。