您的位置:首页 > 数据库 > Oracle

oracle 存储过程动态创建表

2011-11-07 11:30 351 查看
在oracle 存储过程执行动态语句 创建表的时候 往往会出现 权限不足的提示。这是

只需要 两部 就可问题。

1、显示授权 grant create any table to someone;

2、加关键字 craete or replace procedure prc_test authid current_user as
create or replace

procedure createcallsinfo authid current_user as

tablename varchar2(20);

sqlstr varchar2(600);

flag number(10,0);

sqlfalg varchar(200);

begin

flag:=0;

tablename:=UPPER('zj_hd_info_');

tablename:= CONCAT(tablename,to_char(sysdate,'yyyy_MM'));

sqlfalg:='select count(*) from user_TABLES where table_name='''||tablename||'''';

dbms_output.put_line(sqlfalg);

execute immediate sqlfalg into flag;

if flag=0 then --如果没有这个表 则去创建

begin

sqlstr:='create table hd_info_'||tablename ||'(C_ID NUMBER(18,0),

C_C_ID VARCHAR2(50),

C_ZJ_ID VARCHAR2(50),

C_SERVER_TYPE VARCHAR2(50),

C_VIRTUAL_NUMBER VARCHAR2(20),

C_CALLER VARCHAR2(20),

C_TRUE_CALLER VARCHAR2(20),

C_CALLED VARCHAR2(20),

C_START VARCHAR2(50),

C_END VARCHAR2(50),

C_CONNECT VARCHAR2(50),

C_DIRECTION VARCHAR2(50),

C_CHANNEL VARCHAR2(50),

C_RELATION_ID VARCHAR2(50),

C_NUMBER_TYPE VARCHAR2(50),

C_W_CONNECT VARCHAR2(4),

C_CALL_TYPE VARCHAR2(50),

C_RECORD_NAME VARCHAR2(50),

C_COST NUMBER(18,0))';

execute immediate sqlstr;

end;

end if;

end;

execute immediate sqlstr; 在执行sql 语句的时候 要看你执行的sql 语句最终的返回结果,。如果有返回值需要
用变量去接住。

如果没有返回值 则直接 execute
immediate sqlstr; 这行写就行。 加上了返回值 反而会报错。

好了
弄了半天的存储过程终于搞定。感谢我的主啊。。

~~
阿门!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: