我正在尝试使用oracle的sqlcl以编程方式创建oracle数据转储文件。脚本如下所示:
SET SQLFORMAT XML
SPOOL 'ABC.XML'
SELECT * FROM ABC;
SPOOL OFF
SPOOL 'XYZ.XML'
SELECT * FROM XYZ;
SPOOL OFF
//MORE TABLES BELOW
命令如下所示:
exit | "path\to\sqlcl\folder\bin\sql.exe" username/password@connection_string @"path\to\data\dump\script\datadumpscript.sql"
通过在cmd(windows10)中执行命令,它可以正常工作。
执行逻辑的代码来自此线程,转换为vb.net:
Private Shared Sub ExecuteCommand(ByVal command As String)
Dim exitCode As Integer
Dim processInfo As ProcessStartInfo
Dim process As Process
processInfo = New ProcessStartInfo("cmd.exe", "/c """ & command & """")
processInfo.CreateNoWindow = True
processInfo.UseShellExecute = False
processInfo.RedirectStandardError = True
processInfo.RedirectStandardOutput = True
process = Process.Start(processInfo)
process.WaitForExit()
Dim output As String = process.StandardOutput.ReadToEnd()
Dim [error] As String = process.StandardError.ReadToEnd()
exitCode = process.ExitCode
System.Diagnostics.Debug.WriteLine("output>>" & (If(String.IsNullOrEmpty(output), "(none)", output)))
System.Diagnostics.Debug.WriteLine("error>>" & (If(String.IsNullOrEmpty([error]), "(none)", [error])))
System.Diagnostics.Debug.WriteLine("ExitCode: " & exitCode.ToString(), "ExecuteCommand")
process.Close()
End Sub
当从代码中调用时,通过传入上面的命令,程序确实转到“process.waitforexit()”并阻塞,但只有spool脚本中的第一个文件被创建为大小为0的文件,该文件被java二进制文件锁定,之后什么也没有发生。导出过程似乎没有运行。
任何建议都将不胜感激。谢谢您。
2条答案
按热度按时间vddsk6oq1#
创建一个存储过程/匿名pl/sql块,使用utl\u file实用程序将数据从表转储到文件将是另一种选择。下面的脚本是从表的一列中提取数据的基本脚本,但可以扩展到多个列或所有列。
hrysbysz2#
调整参数后,我发现
processInfo.UseShellExecute = True
修复了无法运行的问题。但是,通过这种方式,即使在processInfo.CreateNoWindow = True
.我正在寻找一种方法来隐藏控制台窗口,但如果我不能它仍然是可以接受的。