MS SQL:
if not exists(SELECT * FROM syscolumns WHERE (id IN  
(SELECT id FROM sysobjects  WHERE (name = 'Workers'))) AND (name = 'ID') )
begin
Alter Table Workers ADD [ID] bigint NULL 
exec sp_addextendedproperty N'MS_Description', N'ID', N'user', N'dbo', N'table', N'Workers', N'column', N'ID'
end请问ORACLE,如何写呢?

解决方案 »

  1.   

    declare 
       v_count number          := 0;
       v_sql   varchar(2000)   := null;
       
    begin   SELECT count(1) 
       INTO   v_count
       FROM   syscolumns 
       WHERE  id IN (SELECT id FROM sysobjects  WHERE name = 'Workers') 
       AND    name = 'ID';   if v_count > 0 then
          v_sql  := 'Alter Table Workers ADD ';
          execute immediate v_sql;
          v_sql  := 'comment on column workers....'
          execute immediate v_sql;
       end if;end;
    /
    不太懂ms sql的那个函数,解释下吧,期待楼下
      

  2.   


    同意,修改补充一下,在oracle里有关表的字段的信息在user_tab_columns表里。SELECT count(1) 
       INTO   v_count
       FROM   syscolumns 
       WHERE  id IN (SELECT id FROM sysobjects  WHERE name = 'Workers') 
       AND    name = 'ID';改为select count(1) into v_count from user_tab_columns where upper(table_name) = upper('Workers') and 
    upper(column_name) = upper('ID');
      

  3.   

    2楼,请问在ms sql中,哪个函数不清楚呢?
      

  4.   

    to: 2楼
    sysobjects是MS SQL的系统表
    但不是Oracle的系统表
      

  5.   


    MSSQL:
    如果系统对象表的ID,不存在在系统列表中,
    即增加workers 表ID 为bigint类型
    sp_addextendedproperty 系统的过程,为增加系统字段的描述
      

  6.   

    sp_addextendedproperty N'MS_Description', N'ID', N'user', N'dbo', N'table', N'Workers', N'column', N'ID'这句解释下吧,我猜是在某个列上加comment
      

  7.   

    是的,只是ms sql的标准写法谢谢2楼,你的方法可行。
    但有没有更新简便的语句处理呢?其实我想要的结果是:增加字段,不过先判断字段是否已经存在,如果存在就不添加,如果不存在就添加
      

  8.   

    那恐怕要分开执行3个sql了,因为第一个是DML语句,后面两个是DDL语句,好像不能写在一起,DDL语句在plsql程序块里面也不能直接用,需要动态sql来解决。我问问oracle的人。
      

  9.   

    是的,刚才我就是因为DDL语句在plsql程序块里面,所以总是提示出错。
    用动态的就可行了。非常感谢你的帮助,如果更简洁的方法,麻烦你转告我,谢谢了