0

当调用一个应该创建视图的过程时,它返回“Insufficient Privileges”。我可以使用 SQL 命令本身创建视图,但不能在运行过程时创建。完成的所有操作都在模式所有者中。请让我知道如何解决这个问题。

/* 1. FIRST, I LOGON TO MY OWN SCHEMA, CALLED 'MY_SCHEMA' */
/* (IF YOU WANT TO USE A DIFFERENT ONE, JUST REPLACE THE TEXT MY_SCHEMA WITH YOUR OWN SCHEMA NAME) */

/* 2. DROP THE EXAMPLE TABLE IF IT ALREADY EXISTS */
DECLARE TBL_COUNT INT;
BEGIN
  SELECT COUNT(*) INTO TBL_COUNT FROM ALL_TABLES WHERE OWNER = 'MY_SCHEMA' AND TABLE_NAME = 'EXAMPLE';
  IF TBL_COUNT > 0 THEN
    EXECUTE IMMEDIATE('DROP TABLE "MY_SCHEMA"."EXAMPLE"');
  END IF;
END;
/
-- Result : Done

/* 2. CREATE THE EXAMPLE TABLE */
CREATE TABLE MY_SCHEMA.EXAMPLE
(
  COL1 INTEGER
);
-- Result : Done 

/* 3. THEN, CREATE A VIEW IN MY OWN SCHEMA, WHICH POINTS TO THE TABLE IN MY OWN SCHEMA */
CREATE OR REPLACE VIEW MY_SCHEMA.VW_EXAMPLE AS SELECT * FROM MY_SCHEMA.EXAMPLE;
-- Result : Done 

/* 4. DROP THE VIEW, JUST FOR ARGUMENT'S SAKE */
DROP VIEW MY_SCHEMA.VW_EXAMPLE;
-- Result : Done 

/* 5. NOW CREATE A PROCEDURE IN MY OWN SCHEMA, WHICH CREATES A VIEW IN MY OWN SCHEMA, WHICH POINTS TO A TABLE IN MY OWN SCHEMA */
CREATE OR REPLACE PROCEDURE MY_SCHEMA.PRC_EXAMPLE AS
BEGIN
  EXECUTE IMMEDIATE 'CREATE OR REPLACE VIEW MY_SCHEMA.VW_EXAMPLE AS SELECT * FROM MY_SCHEMA.EXAMPLE';
END;
-- Done

/* 6. LET'S CALL THE PROCEDURE FROM MY OWN SCHEMA, WHICH SHOULD CREATE THE VIEW IN MY OWN SCHEMA, POINTING TO A TABLE IN MY OWN SCHMEA */
BEGIN
  MY_SCHEMA.PRC_EXAMPLE;
END;
-- ORA-01031 : Insufficient privileges
4

1 回答 1

0

用户 MY_SCHEMA 的权限是什么?

在过程(或 PL/SQL 块)内,只有直接授予的权限适用。DBA由角色(例如角色或)授予的特权RESOURCE不适用于过程或 PL/SQL 块内。

于 2016-03-08T08:28:14.243 回答