INSERT¶
</ div>
SQL言語で使用可能なINSERTコマンドは、SPLプログラムでも使用できます。
SQL
INSERTコマンドで式が許可されている場合は、SPL言語の式を使用できます。したがって、SPL変数およびパラメーターを使用して、挿入オペレーションに値を提供できます。
以下は、呼び出し側プログラムから渡されたデータを使用して、新しい従業員の挿入を実行するプロシージャの例です。
CREATE OR REPLACE PROCEDURE emp_insert (
* p_empno IN emp.empno%TYPE,
* p_ename IN emp.ename%TYPE,
* p_job IN emp.job%TYPE,
* p_mgr IN emp.mgr%TYPE,
* p_hiredate IN emp.hiredate%TYPE,
* p_sal IN emp.sal%TYPE,
* p_comm IN emp.comm%TYPE,
* p_deptno IN emp.deptno%TYPE
)
IS
BEGIN
* INSERT INTO emp VALUES (
* p_empno,
* p_ename,
* p_job,
* p_mgr,
* p_hiredate,
* p_sal,
* p_comm,
* p_deptno);
* DBMS_OUTPUT.PUT_LINE('Added employee...');
* 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('----------------------');
EXCEPTION
* WHEN OTHERS THEN
* DBMS_OUTPUT.PUT_LINE('OTHERS exception on INSERT of employee # '
* || p_empno);
* DBMS_OUTPUT.PUT_LINE('SQLCODE : ' || SQLCODE);
* DBMS_OUTPUT.PUT_LINE('SQLERRM : ' || SQLERRM);
END;
例外が発生した場合、プロシージャで行われたすべてのデータベース変更は自動的にロールバックされます。この例では、WHEN OTHERS句を含むEXCEPTIONセクションがすべての例外をキャッチします。
2つの変数が表示されます。
SQLCODEは、発生した特定の例外を識別する番号です。
SQLERRMは、エラーを説明するテキストメッセージです。例外ハンドリングの詳細については、Exception
Handlingを参照してください。
以下は、このプロシージャが実行されたときの出力を示しています。
EXEC emp_insert(9503,'PETERSON','ANALYST',7902,'31-MAR-05',5000,NULL,40);
Added employee...
Employee # : 9503
Name : PETERSON
Job : ANALYST
Manager : 7902
Hire Date : 31-MAR-05 00:00:00
Salary : 5000
Dept # : 40
----------------------
SELECT * FROM emp WHERE empno = 9503;
* empno | ename | job | mgr | hiredate | sal | comm | deptno
-------+--------+--------+------+-------------------+---------+------+-------
* 9503 |PETERSON| ANALYST| 7902 | 31-MAR-05 00:00:00| 5000.00 | | 40
(1 row)
!!! Note *
INSERTコマンドは、FORALLステートメントに含めることができます。
FORALLステートメントを使用すると、1つのINSERTコマンドで、1つ以上のコレクションで提供された値からマルチプルの行を挿入できます。
FORALLステートメントの詳細については、Using the FORALL
Statementを参照してください。