我是一名非常初学的Julia用户,但我想将它用于我的一些项目。
我的许多项目都要求我快速连接到Oracle以获取其他一些数据的ID号。我可以通过从shell或tcl等其他程序运行sqlplus来实现这一点,但是我已经尝试过Julia文档中的语法,但总是会出现一个错误或其他错误。
在Tcl中它看起来像这样
exec sqlplus -s user/pass@dbname << "
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
select ID from table1 where name='abc';
exit;
"
来自朱莉娅,我试图像这样使用run命令
run(`sqlplus -s user/pass@dbname << "
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
select ID from table1 where name='abc';
exit;
"
`)
但我从Julia那里得到了各种错误,如
Stacktrace:
[1] depwarn(::String, ::Symbol) at ./deprecated.jl:70
[2] warn_shell_special(::String) at ./shell.jl:8
[3] #shell_parse#236(::String, ::Function, ::String, ::Bool) at ./shell.jl:103
[4] (::Base.#kw##shell_parse)(::Array{Any,1}, ::Base.#shell_parse, ::String, ::Bool) at ./<missing>:0 (repeats 2 times)
[5] @cmd(::ANY) at ./process.jl:796
[6] eval(::Module, ::Any) at ./boot.jl:235
[7] eval_user_input(::Any, ::Base.REPL.REPLBackend) at ./REPL.jl:66
[8] macro expansion at ./REPL.jl:97 [inlined]
[9] (::Base.REPL.##1#2{Base.REPL.REPLBackend})() at ./event.jl:73
任何人的帮助?
答案 0 :(得分:2)
这是一个在我的机器上运行的函数,它还在变量中返回sqlplus
命令的输出(如果需要)。如果不需要输出,则可以使用更简单的解决方案。
sqlplus_script = """
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
select ID from table1 where name='abc';
exit;
"""
sqlplus_cmd = `sqlplus -s user/pass@dbname`
# sqlplus_cmd = `cat` # used for testing
function stringpipe(cmd,instring)
inpipe = Pipe()
outpipe = Pipe()
p = spawn(pipeline(cmd,stdin=inpipe,stdout=outpipe))
write(inpipe, instring)
close(inpipe)
close(outpipe.in)
s = read(outpipe,String)
return s
end
println(stringpipe(sqlplus_cmd, sqlplus_script))
它主要是不言自明的(BTW使用Julia版本0.6,但应该可以使用0.5)。