我已获得对 Oracle 数据库的读取访问权限,以获取我自己的数据库的数据。DBA 给了我一个存储过程,他向我保证这是我所需要的,但我还不能从 Ruby 中运行它。
我安装了 ruby-oci8 gem 和 oracle 即时客户端。
这是我到目前为止所管理的。
require 'oci8'
conn = OCI8.new('user','pass','//remoteora1:1521/xxxx')
=> #<OCI8::RWHRUBY>
cursor = conn.parse("call REPOSITORY.GET_PMI_ADT( '722833', 'W', null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null)")
=> #<OCI8::Cursor:0x56f4d50>
这就是我卡住的地方。我有这个 OCI8::Cursor 对象,但我不知道如何处理它。它应该返回我一大堆结果(空值在查询中),但我什么也没得到。运行带有和不带参数的 cursor.exec (我不确定我需要什么参数)会给我错误。
cursor.exec 给出
OCIError: ORA-06553: PLS-:
ORA-06553: PLS-:
ORA-06553: PLS-:
ORA-06553: PLS-306: wrong number or typ
ORA-06553: PLS-306: wrong number or type of arguments in call to 'GET_PMI_ADT'
ORA-06553: PLS-306: wrong number or type of arguments in call to 'GET_PMI_ADT'
ORA-06553: PLS-306: wrong number or type of arguments in call to 'GET_PMI_ADT'
ORA-06553: PLS-306: wrong number or type of arguments in call to 'GET_PMI_ADT'
ORA-06553: PLS-306: wrong number or type of arguments in call to 'GET_PMI_ADT'
ORA-06553: PLS-306: wrong number or type of arguments in call to 'GET_PMI_ADT'
ORA-06553: PLS-306: wrong number or type of arguments in call to 'GET_PMI_ADT'
ETC...
cursor.fetch 给出
OCIError: ORA-24338: statement handle not executed
有人在这里有什么想法吗?我完全在我的头上。
此处为仍在观看的任何人提供更新。如果我将存储过程更改为
BEGIN REPOSITORY.GET_PMI_ADT( '722833', 'W', null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null); END;
我现在得到错误;
OCIERROR: ORA-06550: line 1, column 45:
PLS-00363: expression ' NULL' cannot be used as an assignment target
这是否确认存储过程不正确?有什么明显的方法可以纠正吗?