oracle ORA-01001:开发环境中出现无效游标错误

t3irkdon  于 2023-03-17  发布在  Oracle
关注(0)|答案(1)|浏览(296)

我在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 ;

我检查了对象上的赠款-应用了所有需要的授权(授权选择/授权执行)。
我在这里看到了很多其他的线程,比如thisthisthis,但没有一个真正适合我。
请注意,我的程序是好的,所以是plSql块测试它。我可以测试一切都很好,在测试服务器。我有问题,只有在开发服务器。

iyfjxgzm

iyfjxgzm1#

我今天找到了答案,这是一个一揽子水平的赠款问题-我忘了授予。
总之,如果您在testSchema中创建了存储过程,并且您正在使用的一些表/视图分散在数据库中,那么最好的方法是合并所有表/视图,然后为所有这些对象给予select权限。
在高级别中,您需要运行此授权脚本

Grant Select On schemaX.tableA To testSchema;
Grant Select On schemaX.tableB To testSchema;
Grant Select On schemaY.tableM To testSchema;
Grant Select On schemaZ.viewX To testSchema;

底线-所有对象都需要对计划执行存储过程的模式可见。
这只是我的用例,但我认为这对这里的许多用户来说会很方便。

相关问题