VBS/PHP : OO4O : 一時PL/SQLを実行して、DBMS_OUTPUT の結果を取得する


  PL/SQL から比較的多くの文字列を取得する手段




PL/SQL のプロシージャからデータを戻すには、引数のタイプを OUTPUT にしてビルド
しますが、サーバーに登録できない場合は、PL/SQL 文字列として作成して、DBMS_OUTPUT
を利用して取得する事が可能です


Oracle10g の Express では、DBMS_OUTPUT に対する使用権限が無いので、以下を参考にして下さい
【Oracle:PL/SQL】 テキストファイルの書き込み

Oracle 11g : DBMS_OUTPUT

ENABLEプロシージャ
GET_LINEプロシージャ
OraParameters.Add


  

<JOB>
<OBJECT id="Fso" progid="Scripting.FileSystemObject" />

<OBJECT id="OraSession" progid="OracleInProcServer.XOraSession" />
<REFERENCE guid="F2D4ED20-FFD3-101A-ADF2-04021C007002" />

<SCRIPT language=VBScript>
Dim OraDatabase,OraDynaset
' ***********************************************************
' 処理開始
' ***********************************************************
' GUI 
if vbCancel = MsgBox( "処理を開始しますか?   ", vbOKCancel , "サンプル" ) then
	Wscript.Echo "キャンセルされました"
	Wscript.Quit
end if

' REFERENCE 要素定義の為可能な定数参照
Wscript.Echo "ORADB_DEFAULT = " & ORADB_DEFAULT
Wscript.Echo "ORADB_ORAMODE = " & ORADB_ORAMODE
Wscript.Echo "ORADB_NOWAIT = " & ORADB_NOWAIT
Wscript.Echo "ORADB_NO_REFETCH = " & ORADB_NO_REFETCH
Wscript.Echo "ORADB_NONBLK = " & ORADB_NONBLK
Wscript.Echo "ORADB_ENLIST_IN_MTS = " & ORADB_ENLIST_IN_MTS
Wscript.Echo "ORADB_ENLIST_FOR_CALLBACK = " & ORADB_ENLIST_FOR_CALLBACK

' "PC名/サービス", "ユーザ/パスワード"
Set OraDatabase = OraSession.OpenDatabase("night/xe", "LB/LB", ORADB_DEFAULT)
Call OraDatabase.LastServerErrReset

' DBMS_OUTPUT を使用可能にする
Query = "BEGIN DBMS_OUTPUT.ENABLE(); END;"
Call OraDatabase.ExecuteSQL( Query )

' CrLf では動かないので、Lf に変換して実行
Query = REplace(RegTrim(GetResource("myTextData")),vbCrLf,vbLf)
Call OraDatabase.ExecuteSQL( Query )

' DBMS_OUTPUT.GET_LINE の仕様に基づいてパラメータの設定
Call OraDatabase.Parameters.Add( "PARAM", "", ORAPARM_OUTPUT )
OraDatabase.Parameters("PARAM").ServerType = ORATYPE_VARCHAR2

Call OraDatabase.Parameters.Add("STATUS", 0, ORAPARM_OUTPUT )
OraDatabase.Parameters("STATUS").ServerType = ORATYPE_NUMBER

' 結果を読みだす為のメソッドを実行
Query = "BEGIN DBMS_OUTPUT.GET_LINE(:PARAM,:STATUS); END;"
Call OraDatabase.ExecuteSQL( Query )

' メモリ上のデータを読み出し
Do while OraDatabase.Parameters("STATUS").Value = 0
	' 表示
	Wscript.Echo OraDatabase.Parameters("PARAM").Value
	' 繰り返し
	OraDatabase.ExecuteSQL( Query )
Loop

' パラメータの削除
Call OraDatabase.Parameters.Remove("STATUS")
Call OraDatabase.Parameters.Remove("PARAM")

' **********************************************************
' オブジェクト解放
' **********************************************************
Set OraDatabase = Nothing

Wscript.Echo "処理が終了しました"

' ***********************************************************
' 文字列前後の漢字スペースを含むホワイトスペースの削除
' ***********************************************************
Function RegTrim( strValue )

	Dim regEx, str

	Set regEx = New RegExp
	regEx.IgnoreCase = True
	regEx.Pattern = "^[ \s]+"
	str = regEx.Replace( strValue, "" )
	regEx.Pattern = "[ \s]+$"
	RegTrim = regEx.Replace( str, "" )

End Function
</SCRIPT>

<COMMENT>
************************************************************
 ソース内テキストデータ
************************************************************
</COMMENT>
<RESOURCE id="myTextData">
<![CDATA[
DECLARE 
	WK_KEY VARCHAR2(4) := '0001';
	WK_NAME VARCHAR2(50);
BEGIN 
	SELECT 氏名 INTO WK_NAME
		FROM 社員マスタ
		where 社員コード = WK_KEY;

	DBMS_OUTPUT.PUT_LINE(WK_NAME);
END;
]]>
</RESOURCE>

</JOB>
  







  参照

関連する記事

VBScript : WSH : (超) 雛型
VBScript : ADO と OO4O による PL/SQL 呼び出し( 入力引数のみ )
OO4O によるバッチ処理
VBScript : OO4O : 利用できるディレクトリオブジェクトの一覧




  PHP で同等の実行

  

<?
com_load_typelib("{F2D4ED20-FFD3-101A-ADF2-04021C007002},5,0");

$OraSession = new COM( "OracleInProcServer.XOraSession" );

// ***********************************************************
// 処理開始
// ***********************************************************
$plsql = <<<MYTEXT
DECLARE 
	WK_KEY VARCHAR2(4) := '0001';
	WK_NAME VARCHAR2(50);
BEGIN 
	SELECT 氏名 INTO WK_NAME
		FROM 社員マスタ
		where 社員コード = WK_KEY;

	DBMS_OUTPUT.PUT_LINE(WK_NAME);
END;
MYTEXT;

// "PC名/サービス", "ユーザ/パスワード"
$OraDatabase = $OraSession->OpenDatabase("night/xe", "LB/LB", ORADB_DEFAULT);
$OraDatabase->LastServerErrReset();

// DBMS_OUTPUT を使用可能にする
$Query = "BEGIN DBMS_OUTPUT.ENABLE(); END;";
$OraDatabase->ExecuteSQL( $Query );

// CrLf では動かないので、Lf に変換して実行
$Query = str_replace("\r\n","\n", $plsql );
$OraDatabase->ExecuteSQL( $Query );

// DBMS_OUTPUT.GET_LINE の仕様に基づいてパラメータの設定
$OraDatabase->Parameters->Add("PARAM", "", ORAPARM_OUTPUT);
$OraDatabase->Parameters["PARAM"]->ServerType = ORATYPE_VARCHAR2;

$OraDatabase->Parameters->Add("STATUS", 0, ORAPARM_OUTPUT);
$OraDatabase->Parameters["STATUS"]->ServerType = ORATYPE_NUMBER;

// 結果を読みだす為のメソッドを実行
$Query = "BEGIN DBMS_OUTPUT.GET_LINE(:PARAM,:STATUS); END;";
$OraDatabase->ExecuteSQL( $Query );

// メモリ上のデータを読み出し
while( $OraDatabase->Parameters["STATUS"]->Value == 0 ) {
	print $OraDatabase->Parameters["PARAM"]->Value . "\n";
	$OraDatabase->ExecuteSQL( $Query );
}
		
// パラメータの削除
$OraDatabase->Parameters->Remove("STATUS");
$OraDatabase->Parameters->Remove("PARAM");


print "処理が終了しました";

?>
  

PHPドキュメントへのリンク

PHP: com_load_typelib - Manual







yahoo  google  MSDN  MSDN(us)  WinFAQ  Win Howto  tohoho  ie_DHTML  vector  wdic  辞書  天気 


[oracle]
claudebot
24/04/18 22:04:50
InfoBoard Version 1.00 : Language=Perl

1 BatchHelper COMprog CommonSpec Cprog CprogBase CprogSAMPLE CprogSTD CprogSTD2 CprogWinsock Cygwin GameScript HTML HTMLcss InstallShield InstallShieldFunc JScript JScriptSAMPLE Jsfuncs LLINK OldProg OracleGold OracleSilver PRO PRObrowser PROc PROconePOINT PROcontrol PROftpclient PROjscript PROmailer PROperl PROperlCHAT PROphp PROphpLesson PROphpLesson2 PROphpLesson3 PROphpfunction PROphpfunctionArray PROphpfunctionMisc PROphpfunctionString PROsql PROvb PROvbFunction PROvbString PROvbdbmtn PROvbonepoint PROwebapp PROwin1POINT PROwinSYSTEM PROwinYOROZU PROwindows ProjectBoard RealPHP ScriptAPP ScriptMaster VBRealtime Vsfuncs a1root access accreq adsi ajax amazon argus asp aspSample aspVarious aspdotnet aw2kinst cappvariety centura ckeyword classStyle cmaterial cmbin cmdbapp cmenum cmlang cmlistbox cmstd cmstdseed cmtxt cs daz3d db dbCommon dbaccess dnettool dos download flex2 flex3 flex4 framemtn framereq freeWorld freesoft gimp ginpro giodownload google hdml home hta htmlDom ie9svg install java javaSwing javascript jetsql jquery jsp jspTest jspVarious lightbox listasp listmsapi listmsie listmsiis listmsnt listmspatch listmsscript listmsvb listmsvc memo ms msde mysql netbeans oraPlsql oracle oracleWiper oraclehelper orafunc other panoramio pear perl personal pgdojo pgdojo_cal pgdojo_holiday pgdojo_idx pgdojo_ref pgdojo_req php phpVarious phpguide plsql postgres ps r205 realC realwebapp regex rgaki ruby rule sboard sc scprint scquest sdb sdbquest seesaa setup sh_Imagick sh_canvas sh_dotnet sh_google sh_tool sh_web shadowbox shgm shjquery shvbs shweb sjscript skadai skywalker smalltech sperl sqlq src systemdoc tcpip tegaki three toolbox twitter typeface usb useXML vb vbdb vbsfunc vbsguide vbsrc vpc wcsignup webanymind webappgen webclass webparts webtool webwsh win8 winofsql wmi work wp youtube