【发布时间】:2017-08-04 20:46:33
【问题描述】:
如果在 sqldeveloper 命令中,差异是什么
select dbms_metadata.get_ddl('TABLE','table_name','owner') from dual;
给我结果
CREATE TABLE "OWNER"."TABLE_NAME"
("HENCD" VARCHAR2(4),
"HCACT" VARCHAR2(12),
"HETID" VARCHAR2(30),
"HERID" VARCHAR2(20),
"HFNCD" VARCHAR2(1),
"HPSIN" VARCHAR2(2)
CONSTRAINT "PK_TRANQ_BPSBATCH" PRIMARY KEY ("HETID", "HFNCD", "FIRM_CUST_IND")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "DAT01" ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 20 PCTUSED 80 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 302858240 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "DAT01" "
但在我看到的实际脚本中:
DROP TABLE table_name
/
CREATE TABLEtable_name(
hencd VARCHAR2(4),
hcact VARCHAR2(12),
hetid VARCHAR2(20),
herid VARCHAR2(20),
hfncd VARCHAR2(1),
hpsin VARCHAR2(1), )
GRANT SELECT ON tran_queue_bps_batch TO public
/
GRANT ALL ON tran_queue_bps_batch TO dtebatch
/
-- Indexes for TRAN_QUEUE_BPS_BATCH
CREATE INDEX indname1 ON table_name (intact_tag, hasdt)
TABLESPACE idx01
/
我必须使用哪一个来删除并重新创建带有附加列的表?
【问题讨论】:
-
DBMS_METADATA 为数据字典中的现有数据库对象生成 DDL 语句。它生成的 SQL 更加规范,因为它无法判断这些值是默认值还是自定义值。其他脚本是手写的。您要使用哪个版本取决于您。
-
你的意思是如果我使用 UNIX 版本,DBMS_METADATA 会给我 sqldeveloper 的结果?
-
如果您想做的是添加一列,那么您应该编写一个脚本来执行
alter table table_name add new_column number或其他任何操作。如果不需要,删除和重新创建表是没有意义的。
标签: oracle