0
我想用ruby-oci8 gem执行存储过程。 而我可以执行正常的查询,但不是我的程序。用ruby-oci8执行程序
# irb -r oci8
Warning: NLS_LANG is not set. fallback to US7ASCII.
irb(main):001:0> conn = OCI8.new('AAA/[email protected]//10.112.68.14:1521/dptedp0')
irb(main):002:0> conn.exec("SELECT * FROM mytable"){|r| puts r.join(", ")}
1, user1, data1
2, user2, data2
irb(main):003:0> conn.exec("ALTER TRIGGER trigger_mytable_id ENABLE")
=> 0
irb(main):004:0> conn.exec("ALTER TRIGGER trigger_mytable_id DISABLE")
=> 0
直到这里所有的工作正常,但是当我尝试执行一个程序,它没有工作。
irb(main):005:0> conn.exec("EXECUTE reset_seq('mytable_id_seq', 'mytable', 'id')")
OCIError: ORA-00900: invalid SQL statement
from stmt.c:253:in oci8lib_191.so
from /opt/ruby/gems/ruby-oci8-2.1.2/lib/oci8/oci8.rb:474:in `exec'
from /opt/ruby/gems/ruby-oci8-2.1.2/lib/oci8/oci8.rb:282:in `exec_internal'
from /opt/ruby/gems/ruby-oci8-2.1.2/lib/oci8/oci8.rb:275:in `exec'
from (irb):9
from /usr/bin/irb:12:in `<main>'
我的程序在sqldeveloper中运行良好。
execute reset_seq('lrf_id_seq', 'lrf', 'id')
anonymous block completed
我没有返回任何值。 有没有可能用oci8 gem执行这样的程序?
我使用: 红宝石1.9.3p429 红宝石OCI8(2.1.2)
坦克你,它完美 – fabio
仅供参考,EXECUTE是SQLPLUS命令。 Sqlplus将'EXECUTE xxxx'转换为'begin xxxx;结束;'并将转换后的字符串发送到Oracle服务器。 –