dbms_sql.parse

chaobaojun發表於2013-04-03

 

create or replace procedure proc_dbms_sql
(
    table_name in varchar2,       --表名
    field_name1 in varchar2,      --欄位名
    datatype1 in varchar2,        --欄位型別
    field_name2 in varchar2,      --欄位名
    datatype2 in varchar2         --欄位型別
)as
    v_cursor number;              --定義游標
    v_string varchar2(200);      --定義字串變數
    v_row number;                  --行數
begin
    v_cursor:=dbms_sql.open_cursor;     --為處理開啟游標
    v_string:='create table '||table_name||'('||field_name1||' '||datatype1||','||field_name2||' '||datatype2||')';
    dbms_sql.parse(v_cursor,v_string,dbms_sql.native);    --分析語句
    v_row:=dbms_sql.execute(v_cursor);   --執行語句
    dbms_sql.close_cursor(v_cursor);     --關閉游標
    exception
        when others then
            dbms_sql.close_cursor(v_cursor);  --關閉游標
            raise;
end;

ORA-01031: 許可權不足
ORA-06512: 在 "WMS_LS.PROC_DBMS_SQL", line 21
ORA-06512: 在 line 3

執行上面過程時報錯!當時test時,執行到dmbs_sql.parse這個地方報錯的,首先先想到的 GRANT EXECUTE ON  dbms_sql TO wms_ls; 但是還是不行。

後來在想就是執行ddl語句的許可權不足,ddl是create table .但是,這個使用者有DBA ROLES ,DBA角色裡面有CREATE ANY TABLE許可權啊,怎麼還報這個錯誤,那我在專門執行grant create any TABLE to wms_ls;試試。結果OK,可以通過。

反思:難道角色裡面的create any table 許可權對這個使用者不起作用,為什麼??

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21861353/viewspace-757672/,如需轉載,請註明出處,否則將追究法律責任。