如果我要增加个 字段 , 要语句重复执行 ;如下 但 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 我在哪里看谢谢了
'; execute immediate ' comment on column TBL_POS_STOCK_DETAIL.TERMTYP_CODE is ''终端类型代码''';
set serveroutput on,
打开sqlplus的输出。
在程序中首先要调用
dbms_output.enable
然后用
dbms_output.put_line输出
是的你说的对 要用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 --即可看到输出的结果
execute immediate 'alter table tbl_pos_stock_detail add(TERMTYP_CODE varchar2(100))';
提示我 无效的sql语句
已写入 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>
这里的表名和列名如果没有严格规定大小写的话,要大写
这里字符串外面用的是单引号而不是双引号...