【发布时间】:2021-02-08 23:57:03
【问题描述】:
我想找到一种使用 .NET Data Proider for Oracle (System.Data.OracleClient) 在 PowerShell 中运行包含 PL/SQL 的 .sql 文件的方法。 我肯定会避免使用 sqlplus 来完成这项任务。
这就是我现在的位置
add-type -AssemblyName System.Data.OracleClient
function Execute-OracleSQL
{
Param
(
# UserName required to login
[string]
$UserName,
# Password required to login
[string]
$Password,
# DataSource (This is the TNSNAME of the Oracle connection)
[string]
$DataSource,
# SQL File to execute.
[string]
$File
)
Begin
{
}
Process
{
$FileLines = Get-Content $File
$crlf = [System.Environment]::NewLine
$Statement = [string]::Join($crlf,$FileLines)
$connection_string = "User Id=$UserName;Password=$Password;Data Source=$DataSource"
try{
$con = New-Object System.Data.OracleClient.OracleConnection($connection_string)
$con.Open()
$cmd = $con.CreateCommand()
$cmd.CommandText = $Statement
$cmd.ExecuteNonQuery();
} catch {
Write-Error (“Database Exception: {0}`n{1}” -f $con.ConnectionString, $_.Exception.ToString())
stop-transcript
exit 1
} finally{
if ($con.State -eq ‘Open’) { $con.close() }
}
}
End
{
}
}
但我不断收到以下错误消息 "ORA-00933: SQL 命令未正确结束
文件的内容非常基本:
DROP TABLE <schema name>.<table name>;
create table <schema name>.<table name>
(
seqtuninglog NUMBER,
sta number,
msg varchar2(1000),
usrupd varchar2(20),
datupd date
);
【问题讨论】:
-
错误提示问题出在文件中的 SQL 上,您没有显示。
-
我猜是终结者的问题。以
.sql结尾的文件通常意味着在SQL*Plus 之类的环境中运行,该环境期望SQL 以;结尾,而PL/SQL 以/结尾。但是,当您在大多数客户端中运行命令时,您必须删除这些终止符。但正如 Alex 所说,这将有助于添加有关文件内容的更多信息。 -
我刚刚编辑了提到 .sql 文件内容的帖子。
-
并且内容包含终止符
;,@JonHeller 说应该删除。 -
不幸的是,这没有帮助。错误信息是一样的。
标签: sql oracle powershell plsql system.data.oracleclient