Ruby on rails 将sqlplus与ruby一起使用时出现的问题
我想在ruby中使用sqlplus。不想使用任何gems[bec我无法在没有其他团队帮助的情况下将其安装到我们的服务器上..等等],并希望将其保持在最低限度 在我的ruby脚本中,我正在尝试这样简单的东西:Ruby on rails 将sqlplus与ruby一起使用时出现的问题,ruby-on-rails,ruby,oracle,sqlplus,Ruby On Rails,Ruby,Oracle,Sqlplus,我想在ruby中使用sqlplus。不想使用任何gems[bec我无法在没有其他团队帮助的情况下将其安装到我们的服务器上..等等],并希望将其保持在最低限度 在我的ruby脚本中,我正在尝试这样简单的东西: `rlwrap sqlplus user/pswd@host << EOF` `set serveroutput on;` `commit;` #ERROR1: sh: commit: not found sql = "insert /*+
`rlwrap sqlplus user/pswd@host << EOF`
`set serveroutput on;`
`commit;` #ERROR1: sh: commit: not found
sql = "insert /*+ APPEND*/ INTO table(col1, col2) values (#{data[0]},#{data[1]});"
`#{sql}` #ERROR2: sh: Syntax error: "(" unexpected
`rlwrap sqlplus用户/pswd@host答案是,不要使用SQL*Plus。不要从脚本内部调用命令行实用程序;在ruby-oci8
gem和ruby plsql
gem之间,您可以在SQL*Plus中完成任何您可以完成的事情。答案是,不要使用SQL*Plus。不要从脚本内部调用命令行实用程序;在ruby-oci8
gem和ruby plsql
gem之间,您可以在SQL*Plus中完成任何您可以完成的事情。出现错误的原因是您将每一行分别发送到shell。如果您的整个语句被包装在一对反勾号中,那么它可能会起作用
但是,如果您确实无法安装正确的gems,请将命令放在临时文件中,并告诉sqlplus执行该命令,例如:
require 'tempfile'
file = Tempfile.open(['test', '.sql'])
file.puts "set serveroutput on;"
file.puts "commit;"
file.puts "insert /*+ APPEND*/ INTO table(col1, col2) values (#{data[0]},#{data[1]});"
file.puts "exit;" # needed or sqlplus will never return control to your script
file.close
output = `sqlplus user/pswd@host @#{file.path}`
file.unlink
您必须非常小心:
- 引用值(如果使用oci8/dbi,则可以使用绑定变量)
- 错误处理。如果使用ruby库,错误将引发异常。使用sqlplus,您将不得不解析输出。恶心李>
所以这是可以做到的,但我强烈建议您跳过任何需要的障碍,以正确安装oci8(可能还有ruby DBI:)
ps您确定要在插入之前提交吗?出现错误的原因是您将每一行分别发送到shell。如果您的整个语句被包装在一对反勾号中,那么它可能会起作用
但是,如果您确实无法安装正确的gems,请将命令放在临时文件中,并告诉sqlplus执行该命令,例如:
require 'tempfile'
file = Tempfile.open(['test', '.sql'])
file.puts "set serveroutput on;"
file.puts "commit;"
file.puts "insert /*+ APPEND*/ INTO table(col1, col2) values (#{data[0]},#{data[1]});"
file.puts "exit;" # needed or sqlplus will never return control to your script
file.close
output = `sqlplus user/pswd@host @#{file.path}`
file.unlink
您必须非常小心:
- 引用值(如果使用oci8/dbi,则可以使用绑定变量)
- 错误处理。如果使用ruby库,错误将引发异常。使用sqlplus,您将不得不解析输出。恶心李>
所以这是可以做到的,但我强烈建议您跳过任何需要的障碍,以正确安装oci8(可能还有ruby DBI:)
ps您确定要在插入之前提交吗?您是想在Ruby代码或shell脚本中执行此操作吗?您是想在Ruby代码或shell脚本中执行此操作吗?