【发布时间】:2018-05-25 06:08:29
【问题描述】:
我正在尝试在一个过程中创建一个临时表:
PROCEDURE pr_create_tmp_bp_table(fp_id NUMBER) IS
tbl_name CONSTANT VARCHAR2(20) := 'BP_TO_DELETE';
BEGIN
-- sanity checks removed for readablity
EXECUTE IMMEDIATE
'CREATE GLOBAL TEMPORARY TABLE ' || tbl_name || ' ' ||
'ON COMMIT PRESERVE ROWS AS ' ||
'SELECT * FROM infop_stammdaten.bp';
END;
如果我将 BEGIN.._END 块复制到 SQL 工作表,一切正常。所以我认为用户有权创建临时表。如果我从同一个 SQL 工作表中执行该过程,我会得到
Fehlerbericht -
ORA-01031: Nicht ausreichende Berechtigungen
ORA-06512: in "INFOP_STAMMDATEN.PA_DELETE_FP", Zeile 16
ORA-06512: in Zeile 6
01031. 00000 - "insufficient privileges"
*Cause: An attempt was made to perform a database operation without
the necessary privileges.
*Action: Ask your database administrator or designated security
administrator to grant you the necessary privileges
第 16 行 (Zeile 16) 指向创建临时表的 EXECUTE IMMEDIATE 语句。
在我看来,用户在 sql 工作表中没有相同的权限,并且当它执行一个过程时,该过程也在它自己的架构中。
【问题讨论】:
-
您必须指定以下内容: 1. 您是否使用同一用户在同一数据库/容器上运行此程序? 2. 如果用户是相同的 - 你确定语句通过并执行(在工作表中)? 3. 我看到
INFOP_STAMMDATEN.PA_DELETE_FP的第16 行发生了错误- 是包含过程pr_create_tmp_bp_table的包吗? 4.最重要的——你的用户有CRATE TABLE权限吗?
标签: oracle plsql create-table