SQL言語で使用可能なINSERTステートメントは、SPLプログラムでも使用できます。
SPL言語の式は、SQL INSERTステートメントで式が許可されている場合はどこでも使用できます。 したがって、SPL変数およびパラメータを使用して、挿入操作に値を供給することができる。
次の例は、呼び出しプログラムから渡されたデータを使用して新しい従業員を挿入する手順を示しています。
CREATE OR REPLACE PROCEDURE emp_insert (
p_empno IN emp.empno % TYPE、
p_ename IN emp.ename % TYPE、
p_jobでemp.job % TYPE、
p_mgr IN emp.mgr % TYPE、
p_hiredate IN emp.hiredate % TYPE、
p_salでemp.sal % タイプ、
p_comm I N emp.com m % タイプ、
p_deptno IN emp.de ptno % タイプ
)
IS
開始
emp値に挿入する (
p_empno,
p_ename,
p_job,
p_mgr,
p_hiredate,
p_sal,
p_comm,
p_deptno);
DBMS_OUTPUT.PUT_LINE('従業員を追加...') ;
DBMS_OUTPUT.PUT_LINE('Employee # : '| | p_empno);
DBMS_OUTPUT.PUT_LINE('Name : '| | p_ename);
DBMS_OUTPUT.PUT_LINE('Job : '| | p_job);
DBMS_OUTPUT.PUT_LINE('Manager : '| | p_mgr);
DBMS_OUTPUT.PUT_LINE('Hire Date : '| | p_hiredate);
DBMS_OUTPUT.PUT_LINE('Salary : '| | p_sal);
DBMS_OUTPUT.PUT_LINE('Commission : '| p_comm);
DBMS_OUTPUT.PUT_LINE('Dept # : '| | p_deptno);
DBMS_OUTPUT.PUT_LINE('----------------------');
例外
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE (「従業員# の挿入時のその他の例外」)
| | p_empno);
DBMS_OUTPUT.PUT_LINE('SQLCODE : '| | SQLCODE);
DBMS_OUTPUT.PUT_LINE('SQLERRM : '| | SQLERRM);
エンド;
例外が発生すると、プロシージャで行われたすべてのデータベースの変更は自動的にロールバックされます。 この例では、WHEN OTHERS句を持つEXCEPTIONセクションはすべての例外をキャッチします。 2つの変数が表示されます。 SQLCODEは、発生した特定の例外を識別する番号である。 SQLERRMは、エラーを説明するテキストメッセージです。
このプロシージャを実行すると、次の出力が生成されます。
EXEC emp_insert(9503,'PETERSON','ANALYST',7902,'31-MAR-05 ',5000,NULL,40);
従業員を追加...
従業員# : 9503
名前: ピーターソン
仕事: アナリスト
マネージャー: 7902
レンタル日: 31-MAR-05 00:00:00
給与: 5000
Dept # : 40
----------------------
SELECT * FROM emp WHERE empno = 9503;
empno | ename | job | mgr | hiredate | sal | comm | deptno
------ ---------- ---------------------- -------------------- ---------------------------------------
9503 | ピーターソン | アナリスト | 7902 | 31-MAR-05 00:00:00 | 5000.00 | | 40
(1行)
説明 INSERTステートメントは、FORALLステートメントに含めることができます。 FORALLステートメントを使用すると、1つのINSERTステートメントで、1つ以上のコレクションで指定された値から複数の行を挿入できます。