Oracle 存储过程动态建表
动态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;
参考文章
你们的评论、反馈,及对你们有所用,是我整理材料和博文写作的最大的鼓励和唯一动力。欢迎讨论和关注!
没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。