我有一个本地运行的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)
答案 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")