dbms_sql.parse
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/,如需轉載,請註明出處,否則將追究法律責任。