動態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;
參考文章