[英]Oracle Pl/SQL alter table columns
我已经用SQL查询创建了一个table2
: create table2 as select * from table1
Create table as select ...
不会保留table2
table1
所有列属性。
是否可以使用table1
所有列属性生成一个SQL文件以ALTER
table2
列属性( DATA_LENGTH
, DATA_PRECISION
, DATA_SCALE
, DEFAULT_LENGTH
, DATA_DEFAULT
)?
谢谢!
--drop table table2;
create table table1 (
x number(10, 2) default 10,
y varchar2(200) default 'NA'
);
create table table2 as select * from table1;
让我们尝试使用data_default:
create table search_user_tab_columns as
select table_name, column_name, to_lob(DATA_DEFAULT) dd
from user_tab_columns
where table_name = 'TABLE1';
由于data_default是user_tab_columns中的长数据,因此我们必须创建一个中间数据
search_user_tab_columns (dummy) :-(
select 'ALTER TABLE "' || table_name || '" MODIFY "' || column_name || '" DEFAULT ' || Dd || ';'
from search_user_tab_columns
where table_name = 'TABLE1';
注意:
SELECT DBMS_METADATA.GET_DDL('TABLE','<TABLE_NAME>','<SCHEMA_NAME>') from dual;
如果从现有表创建表,这是更好的方法。 但是有时您可以出于特定目的尝试此操作。
如果只需要获取属性。
SELECT DBMS_METADATA.GET_DDL('TABLE','<TABLE_NAME>','<SCHEMA_NAME>') from dual;
您可以看到所有属性
select column_name as "Name"
, nullable as "Null?"
, concat(concat(concat(data_type,'('),data_length),')') as "Type"
from user_tab_columns
where table_name = 'MY_TABLE';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.