1.create table A as select * from b;
 如果要在A表中另外增加一个B表所没有字段acc_nbr varchar(30); 在上面那个SQL中如何改写.
不用alter table A add accs_nbr varchar(30);2.create table A as select * from b primary index asset_row_id;这个在建表时,想同时建立索引,SQL好象有问题.应该如何写?

解决方案 »

  1.   

    create table A as select * from b;alter table A add (col_1 DataType(N1), col_2 DataType(N2), ...);
      

  2.   

    -- 方法二:相看这个表的建表语句,在此语句的基础上去修改代码,修改成你需要的建表的语句:scott@SZTYORA> select dbms_metadata.get_ddl('TABLE','EMP') from dual;DBMS_METADATA.GET_DDL('TABLE','EMP')
    -----------------------------------------------------------------------------  CREATE TABLE "SCOTT"."EMP"
       (    "EMPNO" NUMBER(4,0),
            "ENAME" VARCHAR2(10),
            "JOB" VARCHAR2(9),
            "MGR" NUMBER(4,0),
            "HIREDATE" DATE,
            "SAL" NUMBER(10,2),
            "COMM" NUMBER(7,2),
            "DEPTNO" NUMBER(2,0)
       ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
      TABLESPACE "USERS"
      

  3.   

    如果要在A表中另外增加一个B表所没有字段acc_nbr varchar(30); 在上面那个SQL中如何改写.declare
    is flag varchar2(30);
    begin
     EXECUTE immediate '
    create table A as select b.*,'||flag ||' acc_nbr  from b
    ';
    end 
      

  4.   

    create table A as select b.*,lpad(' ',30) as accs_nbr  from b;
      

  5.   

    思路还是不错的.但是如果是number数值型的呢?
      

  6.   

    1、create  table ... as select ....; alter table....; 即是最好的方法
         oracle不提供直接语法支持,即使其它变通方法,可能比上面的方法还麻烦,并且可能达不到你想要的效果,
         一句话,没必要。2、oracle不支持,还是多写一句吧。
      

  7.   

    你理解错了,这个不是最好的方法.建表之后,再alter table去增加字段,改变表的结构,会影响以后访问或更新表的性能的.