簡單的反向生產DDL語句的指令碼
DECLARE
v_ddlsql VARCHAR2(32767);
BEGIN
FOR rec IN (SELECT * FROM user_tables WHERE table_name = 'T2') LOOP
v_ddlsql := 'create table ' || rec.table_name || '(';
FOR cols IN (SELECT *
FROM user_tab_cols c
WHERE c.table_name = rec.table_name
ORDER BY c.column_id) LOOP
v_ddlsql := v_ddlsql || ' ' || cols.column_name;
IF cols.data_type = 'VARCHAR2' THEN
IF cols.char_used = 'B' THEN
v_ddlsql := v_ddlsql || ' varchar2(' || cols.data_length || ')';
ELSE
v_ddlsql := v_ddlsql || ' varchar2(' || cols.char_length ||
' char)';
END IF;
ELSIF cols.data_type = 'NUMBER' THEN
IF cols.data_precision IS NOT NULL THEN
v_ddlsql := v_ddlsql || ' number(' || cols.data_precision || ',' ||
cols.data_scale || ')';
ELSE
v_ddlsql := v_ddlsql || ' number(38,0)';
END IF;
ELSIF cols.data_type = 'BLOB' THEN
v_ddlsql := v_ddlsql || ' blob ';
ELSIF cols.data_type = 'CLOB' THEN
v_ddlsql := v_ddlsql || ' clob ';
ELSIF cols.data_type = 'DATE' THEN
v_ddlsql := v_ddlsql || ' date ';
END IF;
IF cols.data_default IS NOT NULL THEN
v_ddlsql := v_ddlsql || ' default ' || cols.data_default;
END IF;
IF cols.nullable = 'N' THEN
v_ddlsql := v_ddlsql || ' not null ';
END IF;
v_ddlsql := v_ddlsql || ',' || chr(10);
END LOOP;
--處理約束
FOR rec_cons IN (SELECT uc.constraint_name,
decode(uc.constraint_type,
'C',
'check',
'P',
'primary key',
'U',
'unique') constraint_type,
uc.table_name,
uc.search_condition search_condition
FROM user_constraints uc
WHERE uc.table_name = rec.table_name
AND uc.constraint_name NOT LIKE 'SYS%') LOOP
v_ddlsql := v_ddlsql || ' constraint ' || rec_cons.constraint_name || ' ' ||
rec_cons.constraint_type;
IF rec_cons.constraint_type = 'check' THEN
v_ddlsql := v_ddlsql || ' (' || rec_cons.search_condition || '),' ||
chr(10);
ELSE
v_ddlsql := v_ddlsql || ' (';
FOR rec_cons_cols IN (SELECT *
FROM user_cons_columns s
WHERE s.constraint_name =
rec_cons.constraint_name
ORDER BY s.position) LOOP
v_ddlsql := v_ddlsql || rec_cons_cols.column_name || ',';
END LOOP;
v_ddlsql := substr(v_ddlsql, 1, length(v_ddlsql) - 1);
v_ddlsql := v_ddlsql || ') using index,' || chr(10);
END IF;
END LOOP;
v_ddlsql := substr(v_ddlsql, 1, length(v_ddlsql) - 2);
v_ddlsql := v_ddlsql || ');' || chr(10);
--處理索引
FOR rec_index IN (SELECT *
FROM user_indexes ind
WHERE ind.table_name = rec.table_name
AND ind.index_name NOT LIKE 'SYS%'
AND ind.uniqueness <> 'UNIQUE') LOOP
v_ddlsql := v_ddlsql || 'create index ' || rec_index.index_name ||
' on ' || rec.table_name || '(';
FOR rec_index_cols IN (SELECT *
FROM user_ind_columns uic
WHERE uic.table_name = rec.table_name
AND uic.index_name = rec_index.index_name
ORDER BY uic.column_position) LOOP
v_ddlsql := v_ddlsql || rec_index_cols.column_name || ',';
END LOOP;
v_ddlsql := substr(v_ddlsql, 1, length(v_ddlsql) - 1);
v_ddlsql := v_ddlsql || ');' || chr(10);
END LOOP;
dbms_output.put_line(v_ddlsql);
END LOOP;
END;
測試:
create table t2(
a number not null,
b varchar2(40),
c date default sysdate not null ,
d varchar2(10 char),
e clob,
f blob
)
alter table t2 add constraint pk_t2 primary key (a) using index;
create index t2_index1 on t2(b,c);
程式碼輸出:
create table T2( A number(38,0) not null ,
B varchar2(40),
C date default sysdate not null ,
D varchar2(10 char),
E clob ,
F blob ,
constraint PK_T2 primary key (A) using index);
create index T2_INDEX1 on T2(B,C);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8520577/viewspace-773969/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【C/C++】ghost ddl指令碼簡單實現C++指令碼
- Shell 指令碼語句指令碼
- MySQL入門---(一)SQL的DDL語句MySql
- MySql和簡單的sql語句MySql
- 簡單的SQL語句學習SQL
- MySQL的簡單查詢語句MySql
- 英語簡單句
- Oracle中獲取TABLE的DDL語句的方法Oracle
- oracle檢視物件DDL語句Oracle物件
- Shell指令碼之for迴圈語句的應用指令碼
- MySQL:一個簡單insert語句的大概流程MySql
- 簡單的 Shell 指令碼入門教程指令碼
- redis中lua指令碼的簡單使用Redis指令碼
- [20220125]生產系統怪異的查詢語句.txt
- MySQL密碼加密認證的簡單指令碼MySql密碼加密指令碼
- DBeave如何檢視資料庫表的DDL建立語句資料庫
- 6.3. 基本SQL語句——6.3.1. DDLSQL
- [20230510]測試使用tpt ddl指令碼是否產生日誌.txt指令碼
- 織夢CMS最簡單實用的SQL語句SQL
- Java簡單迴圈語句案例Java
- JavaScript return語句簡單介紹JavaScript
- 簡單的快捷指令
- 一條簡單的更新語句,MySQL是如何加鎖的?MySql
- Shell指令碼應用 – for、while迴圈語句指令碼While
- 資料庫介紹--認識簡單的SQL語句資料庫SQL
- 最簡單的sql語句(增刪改查統計)SQL
- 課時34:豐富的else語句以及簡潔的with語句
- 讀 NebulaGraph原始碼 | 查詢語句 LOOKUP 的一生原始碼
- SQL Server-簡單查詢語句SQLServer
- elasticsearch實現簡單的指令碼排序(script sort)Elasticsearch指令碼排序
- 簡單易懂的XSS(跨站指令碼攻擊)指令碼
- 【Node】簡單快捷的圖片壓縮指令碼指令碼
- Oracle:select 或 inactive 會話語句產生鎖?Oracle會話
- Sqlserver自動查詢缺失索引及拼出建立索引的語句的指令碼SQLServer索引指令碼
- Linux Shell指令碼程式設計while語句案例Linux指令碼程式設計While
- 簡單介紹Lua中三種迴圈語句的使用
- MySQL 執行DDL語句 hang住了怎麼辦?MySql
- mysql的DDL操作對業務產生影響測試MySql
- 怎麼用python寫簡單的遊戲指令碼?Python遊戲指令碼