sqlplus セット

  plus.wsf





  
<JOB>
<COMMENT>
************************************************************
 WEB WSH 実行スケルトン
************************************************************
</COMMENT>

<COMMENT>
************************************************************
 外部スクリプト定義
************************************************************
</COMMENT>
<SCRIPT
	language="VBScript"
	src="http://lightbox.in.coocan.jp/laylaClass.vbs">
</SCRIPT>

<SCRIPT language=VBScript>
' ***********************************************************
' 処理開始
' ***********************************************************
Call laylaFunctionTarget( "http://lightbox.in.coocan.jp/" )
Call laylaLoadFunction( "baseFunction.vbs" )

Call RunCmd( 120, "sqlplus LIGHTBOX/LIGHTBOX@//night/XE" )

</SCRIPT>
</JOB>
  


【Oracle ドキュメント】SQL*Plus コマンド一覧




  login.sql



カレントディレクトリに置くと、ログイン時に実行されます。

SET SERVEROUTPUT ON を指定しないと、DBMS_OUTPUT の結果が表示されません
SET AUTOCOMMIT IMM を指定すると、SQL の UPDATE 時に 自動的にコミットされます

  
SET VERIFY OFF
SET SERVEROUTPUT ON
SET LINESIZE 200
SET PAGESIZE 1000
--SET AUTOCOMMIT IMM
  
【Oracle ドキュメント】 : SERVEROUTPUT
【Oracle ドキュメント】 : AUTOCOMMIT
【Oracle ドキュメント】 : VERIFY

更新を即反映したい場合は、SET AUTOCOMMIT IMM を有効にします。
トランザクションを意図的に継続したい場合は、デフォルトであるオートコミットを無効状態で実行します

↓関連リンク
デッドロックテスト




  env.sql

  
show all
  



  show all の実行中画面




  SQL*Plusスクリプト のバッチ実行

action.sql
  
SET LINESIZE 200
SET PAGESIZE 1000
select * from 商品マスタ;
delete from 商品マスタ where 商品コード = '0000';
EXIT
  

↓実行コマンドライン
  
sqlplus LIGHTBOX/LIGHTBOX@//localhost/XE @action > action.txt
  


参考 : sqlplus による CSVファイル作成



  PL/SQL のビルド( ファンクション )

SQLPLUS のコマンドラインから、

@DISP_STRING

と入力します( 拡張子省略時は、.sql です )

( ※ コードの最後に "/" を書いて下さい )

DISP_STRING.sql
  
CREATE OR REPLACE FUNCTION DISP_STRING
(
	PM_STRING IN VARCHAR2	/* 引数の定義 */
)
RETURN VARCHAR2	/* 戻り値の定義 */

/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
	RET_VALUE	VARCHAR2(2000);
	WK_VALUE	VARCHAR2(2000);

/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
	DBMS_OUTPUT.PUT_LINE('デバッグ:開始');
	DBMS_OUTPUT.PUT_LINE('デバッグ:引数:'||PM_STRING);
	RET_VALUE := PM_STRING;
	RETURN RET_VALUE;

/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
	WHEN OTHERS THEN
		RET_VALUE := '例外発生:'||SQLCODE||':'||SQLERRM;
		RETURN RET_VALUE;
END;
/
  

select 文の一部として実行 ( SQLの場合は、行の最後にセミコロンを入力して ENTER )
  
select DISP_STRING('A') from dual;
  

PL/SQLとして実行 ( PL/SQLの場合は、最後にスラッシュを入力して ENTER )
  
DECLARE
	WK_DATA VARCHAR2(2000);
BEGIN
	WK_DATA := DISP_STRING('A');
END;
/
  



  PL/SQL のビルド( プロシージャ )

SQLPLUS のコマンドラインから、

@SHOW_DATE

と入力します( 拡張子省略時は、.sql です )

( ※ コードの最後に "/" を書いて下さい )

SHOW_DATE.sql
  
CREATE OR REPLACE PROCEDURE SHOW_DATE
(
	PM_STRING IN VARCHAR2
)

/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
	RET_VALUE	VARCHAR2(2000);
	WK_VALUE	VARCHAR2(2000);

/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
	DBMS_OUTPUT.PUT_LINE('デバッグ:開始');
	DBMS_OUTPUT.PUT_LINE('デバッグ:引数:'||PM_STRING);

	-- *************************************************
	-- SELECT 〜 INTO 
	-- 関数の結果を変数にセットする処理
	-- この場合は、WK_VALUE := sysdate でも良い
	-- 実際は、テーブルから1行のデータを取得して
	-- 変数に代入したい場合に使用
	-- *************************************************
	SELECT sysdate INTO WK_VALUE from DUAL;

	DBMS_OUTPUT.PUT_LINE('デバッグ:結果:'||WK_VALUE);

/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
	WHEN OTHERS THEN
		DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
END;
/
  
さらに詳しい SELECT 〜 INTO のサンプル


SQL*Plus コマンドとして実行 ( コマンドは、入力して ENTER )
  
EXEC SHOW_DATE('A')
  

PL/SQLとして実行 ( PL/SQLの場合は、最後にスラッシュを入力して ENTER )
  
BEGIN SHOW_DATE('A'); END;
/
  

SQLとして実行 (SQLの場合は、行の最後にセミコロンを入力して ENTER )
  
CALL SHOW_DATE('A');
  



  PL/SQL のビルド( OUT引数のあるプロシージャ )

GET_DATA.sql
  
CREATE or REPLACE PROCEDURE GET_DATA
(
	PM_STRING IN VARCHAR2,
	PM_NAME OUT VARCHAR2
)

/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
	RET_VALUE	VARCHAR2(2000);
	WK_VALUE	VARCHAR2(2000);

	CURSOR cur_main IS
		SELECT * FROM 社員マスタ
		where 社員コード = PM_STRING;

	COMMENT_REC cur_main%ROWTYPE; 

/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
	DBMS_OUTPUT.PUT_LINE('デバッグ:開始');
	DBMS_OUTPUT.PUT_LINE('デバッグ:引数:'||PM_STRING);

	OPEN cur_main;

	FETCH cur_main INTO COMMENT_REC;
	DBMS_OUTPUT.PUT_LINE('デバッグ:結果:'||COMMENT_REC.氏名);
	-- 引数に戻す
	PM_NAME := COMMENT_REC.氏名;

	CLOSE cur_main;

/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
	WHEN OTHERS THEN
		DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
END;
/
  

E3.sql (実行用)
  
-- SQL*Plusでは、コマンド内で未定義の置換変数が検出された場合、
-- 値の入力を求めるプロンプトが表示されます。
DECLARE
	WK_DATA VARCHAR2(2000);
BEGIN
	GET_DATA( '&TARGET', WK_DATA );
	DBMS_OUTPUT.PUT_LINE( 'OUT引数の内容:'||WK_DATA );
END;
/
  


【Oracle ドキュメント】置換変数



  PL/SQL のビルド( 引数無し : ループ処理 )

GET_DATA_LOOP.sql
  
CREATE or REPLACE PROCEDURE GET_DATA_LOOP

/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
	RET_VALUE	VARCHAR2(2000);
	WK_VALUE	VARCHAR2(2000);

	CURSOR cur_main IS
		SELECT * FROM 社員マスタ
		order by 社員コード;

	COMMENT_REC cur_main%ROWTYPE; 

/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
	DBMS_OUTPUT.PUT_LINE('デバッグ:開始');

	OPEN cur_main;

	LOOP 
		FETCH cur_main INTO COMMENT_REC;
		if cur_main%NOTFOUND then 
			EXIT; 
		end if; 

		DBMS_OUTPUT.PUT_LINE('デバッグ:結果:'||COMMENT_REC.氏名);
	 
	END LOOP; 

	CLOSE cur_main;

/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
	WHEN OTHERS THEN
		DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
END;
/
  

実行
  
EXEC GET_DATA_LOOP
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ