PARSE¶
PARSE
プロシージャは、SQLコマンドまたはSPLブロックを解析します。SQLコマンドがDDLコマンドの場合、すぐに実行され、 EXECUTE
関数を実行する必要はありません。
PARSE(<c> INTEGER, <statement> VARCHAR2, <language_flag> INTEGER)
Parameters
c
開いているカーソルのカーソルID。
statement
解析するSQLコマンドまたはSPLブロック。SQLコマンドはセミコロンターミネータで終了してはなりませんが、SPLブロックにはセミコロンターミネータが必要です。
language_flag
Oracle構文との互換性のために提供される言語フラグ。
DBMS_SQL.V6, DBMS_SQL.V7
またはDBMS_SQL.native
を使用します。このフラグは無視され、すべての構文はEDBAdvancedServer形式であると想定されます。
Examples
次の匿名ブロックは、 job
という名前のテーブルを作成します。DDLステートメントは PARSE
プロシージャによってすぐに実行され、別の EXECUTE
ステップを必要としないことに注意してください。
DECLARE
curid INTEGER;
BEGIN
curid := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(curid, 'CREATE TABLE job (jobno NUMBER(3), ' ||
'jname VARCHAR2(9))',DBMS_SQL.native);
DBMS_SQL.CLOSE_CURSOR(curid);
END;
以下は、 job
テーブルに2つの行を挿入します。
DECLARE
curid INTEGER;
v_sql VARCHAR2(50);
v_status INTEGER;
BEGIN
curid := DBMS_SQL.OPEN_CURSOR;
v_sql := 'INSERT INTO job VALUES (100, ''ANALYST'')';
DBMS_SQL.PARSE(curid, v_sql, DBMS_SQL.native);
v_status := DBMS_SQL.EXECUTE(curid);
DBMS_OUTPUT.PUT_LINE('Number of rows processed: ' || v_status);
v_sql := 'INSERT INTO job VALUES (200, ''CLERK'')';
DBMS_SQL.PARSE(curid, v_sql, DBMS_SQL.native);
v_status := DBMS_SQL.EXECUTE(curid);
DBMS_OUTPUT.PUT_LINE('Number of rows processed: ' || v_status);
DBMS_SQL.CLOSE_CURSOR(curid);
END;
Number of rows processed: 1
Number of rows processed: 1
次の匿名ブロックは、 DBMS_SQL
パッケージを使用して、2つの INSERT
ステートメントを含むブロックを実行します。ブロックの終わりには終了セミコロンが含まれていますが、前の例では、個々の INSERT
ステートメントには終了セミコロンがありません。
DECLARE
curid INTEGER;
v_sql VARCHAR2(100);
v_status INTEGER;
BEGIN
curid := DBMS_SQL.OPEN_CURSOR;
v_sql := 'BEGIN ' ||
'INSERT INTO job VALUES (300, ''MANAGER''); ' ||
'INSERT INTO job VALUES (400, ''SALESMAN''); ' ||
'END;';
DBMS_SQL.PARSE(curid, v_sql, DBMS_SQL.native);
v_status := DBMS_SQL.EXECUTE(curid);
DBMS_SQL.CLOSE_CURSOR(curid);
END;