2016-05-25 47 views
1

1つのファイルからpowershellを使用してPL \ SQLの挿入/更新コマンドを実行するのに役立つ以下のスクリプトが書かれています。 同じファイルにselectコマンドを追加しても動作しません。 スクリプトファイルPANEL_UPDATE.sqlの内容Powershellを使用してOracleでPL SQLスクリプトを実行する

cls 
# Oracle Read File 

# Load the good assembly 
Add-Type -Path "C:\app\ssz\product\12.1.0\client_1\odp.net\managed\common\Oracle.ManagedDataAccess.dll" 

# Production connexion string 
$compConStr = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=Host1)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=serv1)));User Id=test1;Password=test123;" 

# Connection Object 
$oraConn= New-Object Oracle.ManagedDataAccess.Client.OracleConnection($compConStr) 
$oraConn.Open() 

# Requête SQL 
$MyQuery = get-content "C:\PANEL_UPDATE.sql"; 


Write-Output $MyQuery 

# Command Object 
$command1 = New-Object Oracle.ManagedDataAccess.Client.OracleCommand($MyQuery, $oraConn) 
#$command1 = New-Object Oracle.ManagedDataAccess.Client.OracleCommand 
#$command1.CommandText = $MyQuery 
#$command1.Connection = $oraConn 

# Execution 
$reader1=$command1.ExecuteNonQuery() 
#$reader1=$command1.ExecuteReader() 

#while ($reader1.read()) 
#{ 
# $DTable = $reader1["FILD_NAME"] 
#} 

# Fermeture de la conexion 
#$reader1.Close() 
$oraConn.Close() 

、以下のようにしている私はSELECTを削除する場合は、ここで

BEGIN 
    UPDATE TABLE1 SET COL1 = 'TEST1' WHERE COL1 = 'TEST2'; 
    UPDATE TABLE1 SET COL2 = 'TEST1' WHERE COL2 = 'TEST2'; 
    UPDATE TABLE1 SET COL3 = 'TEST1' WHERE COL2 = 'TEST2'; 
    SELECT COL1 FROM TABLE1 WHERE COL1 = 'TEST1'; 
END 

は、PowerShellの

Exception calling "ExecuteNonQuery" with "0" argument(s): "ORA-06550: line 1, column 319: 
PLS-00428: an INTO clause is expected in this SELECT statement" 
At C:\Users\ssz\Desktop\OracleReadFile.ps1:27 char:5 
+  $reader1=$command1.ExecuteNonQuery() 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+ CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
+ FullyQualifiedErrorId : OracleException 

からの例外ですそのファイルからのクエリは、私にとって完璧に動作します。

おかげで、 Saurabh

+1

は、 'INTO句これはあなたを助けるかもしれない – Noel

+0

このSELECT statement'に期待されている。http://stackoverflow.com/a/4269651/1163423 –

答えて

1

はそのマルチ行出力場合、REFカーソルを使用してみてくださいまたはそれがある場合INTO使用することができます...私は、すべてのSQLファイルからコマンドを実行しますPowerShellのスクリプトを変更するには助けてくださいスカラー出力。お役に立てれば。その理由は、エラーメッセージに権利がある

-- 1st approach using refcusor 

DECLARE 
p_lst sys_refcursor; 
BEGIN 
    UPDATE TABLE1 SET COL1 = 'TEST1' WHERE COL1 = 'TEST2'; 
    UPDATE TABLE1 SET COL2 = 'TEST1' WHERE COL2 = 'TEST2'; 
    UPDATE TABLE1 SET COL3 = 'TEST1' WHERE COL2 = 'TEST2'; 
Open P_LST FOR 
    SELECT COL1 FROM TABLE1 WHERE COL1 = 'TEST1'; 
END; 
/

-- 2st approach using INTO clause 

DECLARE 
p_lst varchar2(100); 
BEGIN 
    UPDATE TABLE1 SET COL1 = 'TEST1' WHERE COL1 = 'TEST2'; 
    UPDATE TABLE1 SET COL2 = 'TEST1' WHERE COL2 = 'TEST2'; 
    UPDATE TABLE1 SET COL3 = 'TEST1' WHERE COL2 = 'TEST2'; 
    SELECT COL1 INTO p_lst FROM TABLE1 WHERE COL1 = 'TEST1'; 
END; 
/
関連する問題