首页 > Linux操作系统 > Linux操作系统 > 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博客 ” ,链接:https://blog.itpub.net/21861353/viewspace-757672/ ,如需转载,请注明出处,否则将追究法律责任。