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;

 

 

 

 

 

參考文章

想用oracle的存儲過程動態建表

oracle存儲過程中如何使用動態sql

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM