GRANT到EXECUTE在Oracle中执行立即截断表



我的用户是我的作业中Oracle实例中一个简单模式的所有者,让我们称我的user E,并具有一些重新启动权限。此外,我有一个USERE_ETL,用于接收另一个使用ETLtechnology的数据库的信息。我的用户E是某些表和过程的所有者DO_TRUNCATE.DOCUMENT_TASKSE.DO_TRUNCAT(,并且用户E_ETL每天都使用过程E.DO_TRUNCATE来清理我的E.DOCUMENT_TASKS中的所有数据并插入闪存新信息。但是我遇到了问题GRANT用户E_ETL立即执行截断表的函数E.DOCUMENT_TASKS,代码和错误是:

E.DOCUMENT_TASKS

CREATE TABLE "E"."DOCUMENT_TASKS" 
(    
"DOCUMENT" VARCHAR2(20 BYTE), 
"REVISION" VARCHAR2(5 BYTE), 
"TITLE" VARCHAR2(300 BYTE), 
"STATUS" VARCHAR2(50 BYTE), 
"TASK" VARCHAR2(120 BYTE), 
"ETL_DATE" TIMESTAMP (6) DEFAULT SYSDATE NOT NULL ENABLE
) SEGMENT CREATION IMMEDIATE 
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "E_D_01" ;

E.DO_TRUNCATE程序代码为:

create PROCEDURE DO_TRUNCATE ( ptname in varchar2)
as
begin
execute immediate 'truncate table '||upper(ptname);
end;

我已经为E_ETL用户提供了一些资助:

GRANT SELECT, DELETE, INDEX, INSERT, REFERENCES, UPDATE ON E.DOCUMENT_TASKS TO E_ETL;
GRANT EXECUTE ON DO_TRUNCATE TO E_ETL;

但我仍然有这个错误信息:

Database driver error...
Function Name : executeDirect
SQL Stmt : call DO_TRUNCATE ('DOCUMENT_TASKS')
Oracle Fatal Error
Database driver error...
Function Name : ExecuteDirect

谢谢大家!!!

错误Database driver error...表明您可能在连接数据库时出错;如果是这样,那么您将需要对其进行排序(但由于您尚未提供错误消息,因此我们无法提出建议(。

其他问题可能是:

  1. CALL更改为Oracle的BEGINEND语法:

    BEGIN DO_TRUNCATE ('DOCUMENT_TASKS'); END;
    
  2. 如果您不是作为拥有过程和表的E用户进行连接,请确保包含模式名称:

    BEGIN E.DO_TRUNCATE ('E.DOCUMENT_TASKS'); END;
    

这不是Oracle错误。它还说";executeDirect;。请详细说明错误

相关内容

  • 没有找到相关文章

最新更新