需要修改下面的oracle查询

时间:2016-04-18 03:50:11

标签: oracle plsql

我有下面的脚本,我想修改它这样一种方式让我们说如果它是第一次执行然后它会创建列但是让我们说如果它是第二次执行那么它会显示失败消息,这是不正确的它应该显示创建列的消息,如果有任何异常,请说由于某些技术异常而没有创建列,那么它应该显示失败消息,请告知如何实现此

SELECT COUNT(*) INTO L_COL_EXISTS FROM USER_TAB_COLS WHERE COLUMN_NAME = 'TOR' and TABLE_NAME='AVOICE';    
    IF L_COL_EXISTS = 1
    THEN          
      outcome := 'Success';
    ELSE
      outcome := 'Fail';
    END IF;  
    DBMS_OUTPUT.PUT_LINE(outcome);  

伙计们请告知

1 个答案:

答案 0 :(得分:0)

我想它可以帮到你

CREATE OR REPLACE PROCEDURE add_column
(
   v_table_name  IN VARCHAR2,
   v_column_name IN VARCHAR2,
   v_column_type IN VARCHAR2
) 
IS
  v_column_exists     pls_integer;
  v_ddl_str           varchar2(1024);
BEGIN
    BEGIN
        SELECT count(*)
        INTO   v_column_exists
        FROM   user_tab_columns
        WHERE  table_name = upper(v_table_name)
               and column_name = upper(v_column_name);
    EXCEPTION
        WHEN OTHERS THEN
             RAISE;
    END;

    if v_column_exists = 0 then 
        v_ddl_str := 'alter table ' || v_table_name || ' add ( ' ||  v_column_name || ' ' || v_column_type || ')';
        BEGIN
            EXECUTE IMMEDIATE alter_str;
        EXCEPTION
           WHEN OTHERS THEN
              dbms_output.put_line ('something wrong');
              RAISE;
        END;
    ELSE
        dbms_output.put_line ('Column exists');
    END IF;
EXCEPTION
    WHEN OTHERS THEN
        RAISE;    
END add_column;
/