Oracle Pl / SQL alter table列

时间:2017-07-13 11:05:25

标签: sql oracle

我使用SQL查询创建了table2create table2 as select * from table1

Create table as select ...并未保留table1table2的所有列属性。

是否可以生成一个SQL文件到ALTER table2列属性(DATA_LENGTHDATA_PRECISIONDATA_SCALEDEFAULT_LENGTH,{ {1}})包含DATA_DEFAULT的所有列属性?

谢谢!

3 个答案:

答案 0 :(得分:1)

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

如果从现有表创建表,这是更好的方法。但是有时您可以出于特定目的尝试此操作。

答案 1 :(得分:0)

如果您只需要获取属性。

SELECT DBMS_METADATA.GET_DDL('TABLE','<TABLE_NAME>','<SCHEMA_NAME>') from dual;

答案 2 :(得分:0)

试试这个:

  

您可以看到所有属性

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