执行sql脚本vi OCI8连接对象

时间:2015-01-14 23:09:36

标签: ruby oracle oci8

我有一个本地运行的oracle瘦客户端,并且已经成功创建了一个ruby脚本来连接到远程oracle数据库。我成功地调用(从table_name中选择*)到数据库以获取表的内容:

begin  
    con = OCI8.new('<user>', <password>, '<host>:<port>/XE')  
    con.exec('select name from actor') do |records|
        puts records
    end
rescue OCIError
  puts "Database Connection Error"
end

我还想运行驻留在远程主机上的oracle目录中的sql脚本。 通常我会执行以下操作:

su - oracle
sqlplus <user>/<password>
<SQL> @<script_name>

这将运行脚本

在ruby脚本中,我尝试以下方法:

con.exec('@<script_name>')

然而,我收到以下错误:

stmt.c:230:in oci8lib_200.bundle: ORA-00900: invalid SQL statement (OCIError)    

2 个答案:

答案 0 :(得分:1)

@<script_name>是一个sqlplus命令。 当sqlplus找到@<script_name>时,它会打开<script_name>,将其内容划分为SQL语句并执行它们。 如果要通过ruby在脚本中运行SQL语句,则需要编写打开脚本的代码,对其内容进行划分并将SQL语句逐个传递给con.exec

  

我还想运行驻留在远程主机上的oracle目录中的sql脚本。通常我会执行以下操作:

不,它不能。 sqlplus读取驻留在本地主机上的sql脚本。

答案 1 :(得分:0)

您可以将此脚本放在一个函数( function_name )中并执行

con.exec("select function_name from dual")