想用oracle的存储过程动态建表

2025-03-25 06:21:36
推荐回答(3个)
回答1:

建立序列:
create sequence t_id
increment by 1
start with 1
nomaxvalue
cache 20;
建立自动建表过程:
create or replace procedure pro_createtable(tname in varchar2 default to_char(sysdate,'yyyymm'))
as
v_sql varchar2(200);
v_tname varchar2(10);
begin
if length(tname)<>6 then
raise_application_error(-20000,'输入参数长度不够,不能转换为日期格式!');
end if ;
if to_number(substr(tname,5,2)) not between 1 and 12 then
raise_application_error(-20001,'输入参数中不包含有效的月份数字,不能转换为日期格式!');
end if ;
--v_tname:=to_char(to_date(tname,'yyyymm'),'yyyymm');
v_tname:='hd_'||tname;
v_sql:='create table '||v_tname||' ('||
'id number not null,'||
'name varchar2(20),'||
'city varchar2(20))'||
'tablespace users';
execute immediate v_sql;
end;
测试:
begin
pro_createtable;
pro_createtable('201106');
pro_createtable('201115');--报错
end;

回答2:

create or replace procedure createTable(tablename varchar2) is
sqlstr varchar2(200);
begin
sqlstr:='create table '||tablename||'hd'||to_char(sysdate,'yyyymm')||' (id number(10),name varchar2(20),city varchar2(20))';
execute immediate sqlstr;
commit;
end createTable;

测试通过,搞定

回答3:

上面做的严密性很强啊