如果我要增加个 字段 , 要语句重复执行 ;如下 但 alter 报错
declare sqlnum1 number; 
 
  begin 
  SELECT count(*) into sqlnum1 FROM USER_TAB_COLUMNS WHERE TABLE_NAME ='tbl_pos_stock_detail' and COLUMN_NAME='TERMTYP_CODE';
 
    if(sqlnum1 = 0)
        then
                alter table tbl_pos_stock_detail add(TERMTYP_CODE varchar2(100));
                comment on column TBL_POS_STOCK_DETAIL.TERMTYP_CODE is '终端类型代码';
                dbms.out_put.put_line("aaaaaaaaaaa");
       end if ;  end ;
 
 是不是 DML 不能在DDL 中执行 ,,还有什么方法重复执行,dbms.out_put.put_line 我在哪里看谢谢了

解决方案 »

  1.   

    用动态sql,execute immediate 'alter table tbl_pos_stock_detail add(TERMTYP_CODE varchar2(100))';
      

  2.   

     execute immediate 'alter table tbl_pos_stock_detail add(TERMTYP_CODE varchar2(100))
    '; execute immediate '  comment on column TBL_POS_STOCK_DETAIL.TERMTYP_CODE is ''终端类型代码''';
      

  3.   

    如果在sqlplus中执行,先要设置 
    set serveroutput on, 
    打开sqlplus的输出。 
      
    在程序中首先要调用 
    dbms_output.enable 
      
    然后用 
    dbms_output.put_line输出
      

  4.   


    是的你说的对 要用execute immediate 执行
    execute immediate 'alter table tbl_pos_stock_detail add(TERMTYP_CODE varchar2(100))';
    execute immediate 'comment on column TBL_POS_STOCK_DETAIL.TERMTYP_CODE is ''终端类型代码''';
    执行完毕set serveroutput on --即可看到输出的结果
      

  5.   

     我用的是sql windows  我执行完 
    execute immediate 'alter table tbl_pos_stock_detail add(TERMTYP_CODE varchar2(100))';
     提示我 无效的sql语句
      

  6.   

    SQL> create table tbl_pos_stock_detail (id number);表已创建。SQL> edi
    已写入 file afiedt.buf  1  declare
      2  sqlnum1 number;
      3  begin
      4  SELECT count(*) into sqlnum1 FROM USER_TAB_COLUMNS
      5  WHERE TABLE_NAME =upper('tbl_pos_stock_detail') and COLUMN_NAME='TERMTYP_CODE';
      6  if(sqlnum1 = 0) then
      7  execute immediate 'alter table tbl_pos_stock_detail add(TERMTYP_CODE varchar2(100))';
      8  execute immediate 'comment on column TBL_POS_STOCK_DETAIL.TERMTYP_CODE is ''终端类型代码''';
      9  end if ;
     10  dbms_output.put_line('aaaaaaaaaaa');
     11* end ;
    SQL> /
    aaaaaaaaaaaPL/SQL 过程已成功完成。SQL> desc tbl_pos_stock_detail;
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     ID                                                 NUMBER
     TERMTYP_CODE                                       VARCHAR2(100)SQL> 
      

  7.   

    TABLE_NAME ='tbl_pos_stock_detail'
    这里的表名和列名如果没有严格规定大小写的话,要大写
      

  8.   

    dbms.out_put.put_line("aaaaaaaaaaa");
    这里字符串外面用的是单引号而不是双引号...