我想写一个存储过程,功能是建立一个表B,表B的结构是表A的结构外加2个新的字段,我自己定义了新加的这2个字段的名字A1和A2。
其中我已经把表A的所有字段组合成了一个字符串str了于是我这样写 
execute immediate ' create table B ('||str||',A1,A2)as select '||str||',''none'',''none'' from A';报错  提示我A1和A2是未定义的列,我该怎么办呢?

解决方案 »

  1.   

     create table B as select a.*,'' as A1,'' AS A2 from A;
      

  2.   


    execute immediate 'create table B (
    col1,col2,A1,A2) as select col1,col2,''none'',''none'' from A';
      

  3.   

    execute immediate ' create table B as select a.*,''none'' A1,''none'' A2 from  a';
      

  4.   

    谢谢,但是这样做我以为这一行数据的A1和A2字段会是none值,但是却都是空值,怎么付上我希望的'none'呢?
      

  5.   

    declare
    id varchar2(20);
    BEGIN
    id:='id';
    EXECUTE IMMEDIATE 'CREATE TABLE g ('||ID||',A1,A2)AS SELECT '||ID||',''NONE'',''NONE'' FROM TEST';
    END;
    我这样执行可以,好像一样的吧,你将完整的代码贴出来!
      

  6.   

    create table B as select 'col' as A1, 'col' AS A2 from A;
      

  7.   

    oh my god  这样就可以 
    --试都不去试  浪费我
    SQL> begin
      2    execute immediate ' create table emp_bk as select a.*,''none'' A1,''none'' A2 from emp a';
      3    end;
      4  /
     
    PL/SQL procedure successfully completed
     
    SQL> select * from emp_bk
      2  /
     
    EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO A1   A2
    ----- ---------- --------- ----- ----------- --------- --------- ------ ---- ----
     7369 SMITH      CLERK      7902 1980-12-17     800.00               20 none none
     7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30 none none
     7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30 none none
     7566 JONES      MANAGER    7839 1981-4-2      2975.00               20 none none
     7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30 none none
     7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30 none none
     7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10 none none
     7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20 none none
     7839 KING       PRESIDENT       1981-11-17    5000.00               10 none none
     7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30 none none
     7876 ADAMS      CLERK      7788 1987-5-23     1100.00               20 none none
     7900 JAMES      CLERK      7698 1981-12-3      950.00               30 none none
     7902 FORD       ANALYST    7566 1981-12-3     3000.00               20 none none
     7934 MILLER     CLERK      7782 1982-1-23     1300.00               10 none none
     
    14 rows selected