Purpose:
========
The purpose of this article is to explain how you can transfer table
definitions from one database to another database by generating script
files.
How to Generate 'CREATE TABLE' Scripts from Existing Tables:
============================================================
If basic tables, that is, tables with no partitions, constraints, indexes,
etc. are sufficient for your purposes, then you can use the script listed
at the end of this article.
If you need detailed CREATE TABLE SQL statements, then you can follow
this example:
exp user_name/password file=table_name.dmp rows=n tables=\('table_name'\);
(Use brackets to escape the backslash because of shell interpretation.)
imp user_name/password file= table_name.dmp indexfile=table_name.log
on UNIX:
sed 's/REM //' table_name.log >table_name.sql
on another platforms:
open file table_name.log in any text editor and replace string 'REM ' by ''
(empty string).
save as table_name.sql
Check the file table_name.sql for the script that you need.
============ Script for basic CREATE TABLE SQL statement ================
spool table.lst
set serveroutput on size 1000000
declare
starting boolean :=true;
r_owner varchar2(30) := '&1';
r_table_name varchar2(30) := '&2';
begin
dbms_output.put_line('create table '||r_owner||'.'||r_table_name||'(');
for r in (select column_name, data_type, data_length, data_precision, data_scale, data_default, nullable
from all_tab_columns
where table_name = upper(r_table_name)
and owner=upper(r_owner)
order by column_id)
loop
if starting then
starting:=false;
else
dbms_output.put_line(',');
end if;
if r.data_type='NUMBER' then
if r.data_scale is null then
dbms_output.put(r.column_name||' NUMBER('||r.data_precision||')');
else
dbms_output.put(r.column_name||' NUMBER('||r.data_precision||','||r.data_scale||')');
end if;
else if r.data_type = 'DATE' then
dbms_output.put_line(r.column_name||' DATE');
else if instr(r.data_type, 'CHAR') >0 then
dbms_output.put(r.column_name||' '||r.data_type||'('||r.data_length||')');
else
dbms_output.put(r.column_name||' '||r.data_type);
end if;
end if;
end if;
if r.data_default is not null then
dbms_output.put(' DEFAULT '||r.data_default);
end if;
if r.nullable = 'N' then
dbms_output.put(' NOT NULL ');
end if;
end loop;
dbms_output.put_line(' ); ');
end;
/
spool off
生成创建table 的sql sed ‘s/REM //‘
jnrjian2024-04-21 9:30
相关推荐
唠点键盘之外的10 小时前
26 向量数据库实战:从 0 搭一条能用的检索链路(pgvector + Spring AI)云和恩墨11 小时前
数据库监控简史:监控不止于告警——从图表大爆发到健康管理闭环ly768911 小时前
MongoDB 事务开销实测:快照隔离下的写冲突、重试与分片事务边界豆角焖肉11 小时前
Spring AOP 自定义注解实现系统操作日志金伟API102412 小时前
不会写复杂SQL怎么办?执笔为剑12 小时前
2.1.2-1、V8R3迁移到V8R6-Oracle兼容特性geovindu13 小时前
sql:Search-Optimized SQL Queries using mysql 9.0for_ever_love__13 小时前
MySQL SELECT 与 WHERE 优化实战:可搜索条件、联合索引与执行计划2501_9318037513 小时前
MySQL 锁机制详解Nturmoils14 小时前
SQL 编辑器不只是写查询:我用 KStudio 排查一次订单异常