【问题标题】:Getting ORA-00904 when creating a stored procedure that references a dbms package创建引用 dbms 包的存储过程时出现 ORA-00904
【发布时间】:2020-06-14 00:43:35
【问题描述】:

我正在创建一个存储过程以从对象存储中的存储桶中获取数据并将其加载到表中。但我在创建 SP 时收到错误 ORA-00904。知道有什么问题吗?

create or replace procedure watcher_load
is
 v_exists varchar2(1) := 'F';

 CURSOR c_filelist is
        select replace(regexp_substr(OBJECT_NAME ,'[^_]*(_|$)',1,2), '_', '' ) 
                object_name,
                bytes 
        from DBMS_CLOUD.LIST_OBJECTS('user_cred','https://objectstorage.oraclecloud.com/n/bunge/bingo_subside/o/')
        where object_name like '20%_%_bingo_hourly_res.json';

begin

 FOR i in c_filelist
  LOOP

   select 'T' into v_exists from watcher_table where filename = i.object_name;
   if v_exists != 'T' then
        insert into watcher_table (region, filename, bytes)
        values (i.region, i.object_name, i.bytes);
   end if;

  END LOOP;

 commit;

end watcher_load;
/

PROCEDURE WATCHER_LOAD 错误:

LINE/COL ERROR
-------- -----------------------------------------------------------------
6/9      PL/SQL: SQL Statement ignored
9/15     PL/SQL: ORA-00904: "DBMS_CLOUD"."LIST_OBJECTS": invalid
         identifier

17/4     PL/SQL: SQL Statement ignored
17/65    PL/SQL: ORA-00904: "I"."FILENAME": invalid identifier
17/65    PLS-00364: loop index variable 'I' use is invalid
19/9     PL/SQL: SQL Statement ignored
20/39    PLS-00364: loop index variable 'I' use is invalid
20/41    PL/SQL: ORA-00984: column not allowed here

【问题讨论】:

  • 您可以访问 DBMS_CLOUD 包吗?您能与 Oracle 管理员核实一下吗?根据 oracle - 注意:要使用 ADMIN 以外的用户运行 DBMS_CLOUD 子程序,您需要向该用户授予 EXECUTE 权限。例如,以 ADMIN 身份运行以下命令以授予 adwc_user 权限:Link here-docs.oracle.com/en/cloud/paas/autonomous-data-warehouse-cloud/…
  • 是的,用户有权访问 DBMS_CLOUD 包。我可以运行可以从此命令返回行的查询,但存储过程出错。
  • @koushiksinharoy 实际上已修复它:)。非常奇怪,不确定用户如何使用 dbms_cloud 运行查询,但对于存储过程,用户需要对包的显式权限。感谢您的帮助!
  • @belve - 用户以前可能只有通过角色授予的权限,默认情况下在存储的 PL/SQL 中不尊重这些权限。在此处寻找有关 AUTHID 的答案。
  • 很高兴它有帮助。请将答案标记为正确答案...

标签: sql oracle stored-procedures plsql


【解决方案1】:

根据 oracle - 注意:要使用 ADMIN 以外的用户运行 DBMS_CLOUD 子程序,您需要向该用户授予 EXECUTE 权限。例如,以 ADMIN 身份运行以下命令到
grant privileges to adwc_user 链接在这里-https://docs.oracle.com/en/cloud/paas/autonomous-data-warehouse-cloud/user/dbms-cloud.html#GUID-3D0A5361-672C-467D-AA90-656B1B4D4E37

【讨论】:

    猜你喜欢
    • 2021-11-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 2016-11-28
    相关资源
    最近更新 更多