概述
需要用到动态sql。
1、首先要给用户赋予权限:
grant create any table to 用户名;
2、创建存储过程:
create procedure p_create_table
(v_sql varchar2)--输入建表语句
as
begin
execute immediate v_sql;
end;
3、执行:
- create or replace procedure createtable(tname in varchar2)
- is
- SQLTEXT varchar2(400);
- v_createsql varchar2(400);
- v_dropsql varchar2(100);
- v_count number(9);
- begin
- SQLTEXT := 'grant create any table to newsname'; --newsname为数据库用户名,这里需要给他创建表的权限
- EXECUTE IMMEDIATE SQLTEXT;
- v_createsql:='create table '||tname||'(
- a number(8) primary key,
- b varchar2(20))';
- v_dropsql:='drop table '||tname||' cascade constraints';
- select count(*) into v_count from user_tables where table_name=upper(tname);
- if v_count>0 then
- execute immediate v_dropsql;
- commit;
- end if;
- execute immediate v_createsql;
- commit;
- end;
就这个存储过程来说,CREATE TABLE想使用CREATE ANY TABLE权限,而CREATE ANY TABLE权限来自DBA角色,默认情况下,虽然在会话环境中可见,但在存储过程中不可见(无效)。
所以根据上面的第一条规则,可以显示地将CREATE ANY TABLE权限授予cog就可以了,即
GRANT CREATE ANY TABLE TO COG;
最后
以上就是缥缈香水为你收集整理的Oralce存储过程中创建表的全部内容,希望文章能够帮你解决Oralce存储过程中创建表所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复