详细描述:Oracle 判断表,如果列名存在,就删除列名。

解决方案 »

  1.   

    查询SQL:
    select count(*)
    from dba_tab_columns
    where table_name = 'table_name' and column_name  = 'column_name'
      

  2.   

    /*判断表列名如果存在,执行删除*/ 
    ---------建表
    CREATE TABLE KB_QA 
    (qa_id INT,
    order_no Number(6,2)
    );
    -------- 测试数据
    INSERT INTO KB_QA VALUES(1,11.11);
    INSERT INTO KB_QA VALUES(2,12.12);
    INSERT INTO KB_QA VALUES(3,13.13);
    INSERT INTO KB_QA VALUES(4,14.14);
    COMMIT;
    ------ ALTER前
    QA_ID ORDER_NO
    ----- --------
        1    11.11
        2    12.12
        3    13.13
        4    14.14
    ------------ sp
    CREATE OR REPLACE PROCEDURE ALTER_KB_QA AS
      V_SQL         VARCHAR2(1000);
      V_COLUMN_NAME VARCHAR2(100) := 'ORDER_NO';
      V_TABLE_NAME  VARCHAR2(100) := 'KB_QA';
      V_COUNT       INT;BEGIN
      ----- 1
      SELECT COUNT(*)
        INTO V_COUNT
        FROM USER_TAB_COLUMNS T
       WHERE T.TABLE_NAME = V_TABLE_NAME
         AND T.COLUMN_NAME = V_COLUMN_NAME;  IF V_COUNT > 0
      THEN
      
        V_SQL := 'ALTER TABLE ' || V_TABLE_NAME || ' DROP COLUMN ' ||
                 V_COLUMN_NAME;
        EXECUTE IMMEDIATE V_SQL;
        DBMS_OUTPUT.PUT_LINE(V_TABLE_NAME || '.' || V_COLUMN_NAME ||
                             ' has dropped!');
      
      ELSE
        DBMS_OUTPUT.PUT_LINE('There is no column named :' || V_TABLE_NAME || '.' ||
                             V_COLUMN_NAME);
      END IF;
    END;
    /-------- 运行sp
    SQL> EXEC ALTER_KB_QA;    --------  结果
       QA_ID 
     ------ 
          1 
          2  
          3  
          4  
      

  3.   

    每次发现sun的代码都是很长一串,不过还是要顶一下
      

  4.   

    SUN,请问你是用什么工具的?TOAD?
      

  5.   


    suncrafted XD解答的贴,认真劲就让人佩服,友情顶一下。
      

  6.   


    呵呵  sun每次代码都很详细
      

  7.   

     SELECT COUNT(*)
          INTO V_CNT
          FROM DUAL
         WHERE EXISTS (SELECT 1 FROM dba_tab_columns WHERE table_name = 'table_name'and column_name  = 'column_name' );