我的用户是我的作业中Oracle实例中一个简单模式的所有者,让我们称我的user E,并具有一些重新启动权限。此外,我有一个USERE_ETL,用于接收另一个使用ETLtechnology的数据库的信息。我的用户E是某些表和过程的所有者DO_TRUNCATE.DOCUMENT_TASKS和E.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...
表明您可能在连接数据库时出错;如果是这样,那么您将需要对其进行排序(但由于您尚未提供错误消息,因此我们无法提出建议(。
其他问题可能是:
-
将
CALL
更改为Oracle的BEGIN
END
语法:BEGIN DO_TRUNCATE ('DOCUMENT_TASKS'); END;
-
如果您不是作为拥有过程和表的
E
用户进行连接,请确保包含模式名称:BEGIN E.DO_TRUNCATE ('E.DOCUMENT_TASKS'); END;
这不是Oracle错误。它还说";executeDirect;。请详细说明错误