PL/SQL で INSERT を行なう

テーブル定義

以下のようなレイアウトの利用者マスタ表を使用して PL/SQL のサンプルを作成する。

日本語名カラム名入力必須データの型と大きさ省略時
利用者IDUSER_IDYES4 バイト以内の文字列
部門DEPT_NONO4 バイト以内の文字列
利用者名USER_NAMENO32 バイト以内の文字列
作成日CREATED_ONNO日付(日+時間)SYSDATE
更新日MODIFIED_ONNO日付(日+時間)

DDL は 以下のとおり。

CREATE TABLE RIVUS.USER_MASTER
(
	USER_ID           VARCHAR2(4) NOT NULL,
	DEPT_NO           VARCHAR2(4),
	USER_NAME         VARCHAR2(32),
	CREATED_ON        DATE DEFAULT SYSDATE,
	MODIFIED_ON       DATE
);

PL/SQL で INSERT を実行する

SQLPlus のコマンドラインから SQL を実行するのと変わりなく記述することができる。

SQL*Plus の場合には実行の前に SET SERVEROUTPUT ON を実行しておく。

CREATE OR REPLACE PROCEDURE RIVUS.STEP01_INSERT
IS
BEGIN
	INSERT INTO USER_MASTER (
	        USER_ID, DEPT_NO, USER_NAME, CREATED_ON, MODIFIED_ON
	) VALUES (
	        '0020', '1001',
	        '小泉 純一',
	        DEFAULT,
	        NULL
	) ;
	DBMS_OUTPUT.PUT_LINE('インサートした件数は' || SQL%ROWCOUNT || '件です。');
	COMMIT ;
	DBMS_OUTPUT.PUT_LINE('COMMIT(SQL)後の ROWCOUNT は' || SQL%ROWCOUNT || 'です。');
END;
/
-- このプロシージャを実行してみる。
CALL STEP01_INSERT() ;
インサートした件数は1件です。
コミット(SQL)実行後の ROWCOUNT は0です。
 
コールが完了しました。

ソースコードの SQL%ROWCOUNT暗黙カーソル SQL と、その属性 ROWCOUNT である。 この PL/SQL のソースコード内の INSERT 文はPL/SQL エンジンで暗黙カーソルに変換されており、 自動的に カーソル のオープン〜クローズ処理までが行なわれている。

PL/SQL の INSERT で RETURNING 句を使用する

RETURNING を使用することで INSERT した結果を SELECT することなく取得することができる。
この例ではデフォルト制約によって自動的に作成日が設定されている CREATED_ON 項目を取得している。

CREATE OR REPLACE PROCEDURE RIVUS.STEP02_INSERT
IS
	vUser  USER_MASTER%ROWTYPE;
BEGIN
	INSERT INTO USER_MASTER (
	        USER_ID, DEPT_NO, USER_NAME, CREATED_ON, MODIFIED_ON
	) VALUES (
	        '0021', '1001',
	        '小泉 純一',
	        DEFAULT,
	        NULL
	) 
	RETURNING USER_ID, DEPT_NO, USER_NAME, CREATED_ON, MODIFIED_ON INTO vUser;
 
	DBMS_OUTPUT.PUT_LINE('インサートした件数は' || SQL%ROWCOUNT || '件です。');
	COMMIT ;
	DBMS_OUTPUT.PUT_LINE('COMMIT(SQL)後の ROWCOUNT は' || SQL%ROWCOUNT || 'です。');
	DBMS_OUTPUT.PUT_LINE('インサートした日付 は' || vUser.CREATED_ON || 'です。');
END;
/


SQL INSERT 関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)