Oracle 儲存過程動態建表

2021-09-22 07:15:07 字數 1651 閱讀 7727

動態sql,顧名思義就是動態執行的sql,也就是說在沒執行之前是動態的拼接的。

任務

傳入引數:新建的表名hd+當前的年和月,例如hd_201105

表結構是:欄位1:id ,型別是number,可以自動增加

欄位2:name 型別是varcha2,長度20

欄位3:city 型別是varchar2,長度20

建立序列:

create

sequence t_id

increment by1

start

with

1nomaxvalue

cache

20;

建立自動建表過程:

create

orreplace

procedure pro_createtable(tname in

varchar2

default to_char(sysdate,'

yyyymm'))

asv_sql

varchar2(200

); v_tname

varchar2(10

);begin

if length(tname)<>

6then

-20000,'

輸入引數長度不夠,不能轉換為日期格式!');

endif;

if to_number(substr(tname,5,2)) not

between

1and

12then

-20001,'

輸入引數中不包含有效的月份數字,不能轉換為日期格式!');

endif;

--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

沒有整理與歸納的知識,一文不值!高度概括與梳理的知識,才是自己真正的知識與技能。 永遠不要讓自己的自由、好奇、充滿創造力的想法被現實的框架所束縛,讓創造力自由成長吧! 多花時間,關心他(她)人,正如別人所關心你的。理想的騰飛與實現,沒有別人的支援與幫助,是萬萬不能的。

ORACLE中建儲存過程

建立測試表 create table xiaoyan id number primary key,username varchar2 24 age varchar2 3 address varchar2 1024 other varchar2 1024 comment on table xiaoya...

oracle 動態儲存過程

1.定時 begin sys.dbms scheduler.create job job name job pro his delete cp job type stored procedure job action pro his delete cp start date sysdate,repe...

MYSQL批量建表儲存過程

分表比較多的情況,如何批量建立,可通過儲存過程實現 建立乙個儲存過程 紅色表結構,藍色為表名及表數量 delimiter create procedure sp create tab begin set str id int 11 not null auto increment comment 自增...