Oracle 存储过程动态建表

本文介绍了一种使用Oracle存储过程动态创建表的方法。通过传递表名(格式为hd_YYYYMM)作为参数,并验证其有效性,实现自动化创建带有特定结构的新表。文中详细展示了创建序列、表及存储过程的具体SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

动态sql,顾名思义就是动态执行的sql,也就是说在没执行之前是动态的拼接的。

任务

传入参数:新建的表名hd+当前的年和月,例如hd_201105
表结构是:字段1:id ,类型是number,可以自动增加
字段2:name 类型是varcha2,长度20
字段3:city 类型是varchar2,长度20

 

建立序列:

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;

 

 

 

 

 

参考文章

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

oracle存储过程中如何使用动态sql

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值