我在Oracle云开发环境中遇到了一个奇怪的问题。当我尝试执行存储proc时,它给我ORA-01001:开发环境中出现无效游标错误。但是,同一块在oracle-test中运行正常。
为了给予你一个总结,考虑下面的代码-
Create or replace package body "my_package" as
Procedure my_proc (out_param OUT Ref cursor, in_param_1 IN Varchar2, in_param_2 IN Number) Is
v_sql Varchar2(200) : = '';
Begin
v_sql = 'Select col1, col2, col3 from TableA
where col4 = ' || in_param_1 || ' AND col5 = ' || in_param_2 ;
Open out_param For v_sql ;
Exception
When Others Then
dbms_output.put_line ('Error in execution - ' || sqlErrm) ;
End ;
我的plSql test块只是调用该方法,并尝试对打开的游标返回的值执行一些操作。
Plsql块如下所示
DECLARE
TYPE rc IS REF CURSOR;
out_data rc;
my_col1 Varchar2(15) := '';
my_col2 Number := 0;
my_col3 Varchar2(10) := '';
Begin
my_proc (out_data, 'MY PARAM1', 'MY PARAM2') ;
Loop
FETCH out_data INTO my_col1, my_col2, my_col3
Exit When out_data%NOTFound
dbms_output.put_line(my_col1 || ', ' || my_col2 || ', ' || my_col3);
End Loop ;
End ;
我检查了对象上的赠款-应用了所有需要的授权(授权选择/授权执行)。
我在这里看到了很多其他的线程,比如this、this或this,但没有一个真正适合我。
请注意,我的程序是好的,所以是plSql块测试它。我可以测试一切都很好,在测试服务器。我有问题,只有在开发服务器。
1条答案
按热度按时间iyfjxgzm1#
我今天找到了答案,这是一个一揽子水平的赠款问题-我忘了授予。
总之,如果您在testSchema中创建了存储过程,并且您正在使用的一些表/视图分散在数据库中,那么最好的方法是合并所有表/视图,然后为所有这些对象给予select权限。
在高级别中,您需要运行此授权脚本
底线-所有对象都需要对计划执行存储过程的模式可见。
这只是我的用例,但我认为这对这里的许多用户来说会很方便。