/****************************************************************
                   下面是给表添加字段的SQL脚本
****************************************************************/-- 给表"TBLNAME"添加字段
BEGIN
  DECLARE
    vCount  INTEGER:=0;
  -- 判断记录是否已经存在
  BEGIN
    SELECT COUNT( T.TABLE_NAME) INTO vCount
      FROM SYS.ALL_TABLES  T,SYS.ALL_TAB_COLUMNS  C
      WHERE T.TABLE_NAME=C.TABLE_NAME  AND T.TABLE_NAME='TBLNAME'
        AND C.COLUMN_NAME='FLDNAME';
    IF vCount=0 THEN
      BEGIN
        -- 执行添加字段的脚本
        EXECUTE IMMEDIATE 'ALTER TABLE "SYSTEM"."TBLNAME"
          ADD ("FLDNAME" VARCHAR2(10)    NOT NULL)';
        -- 删除表名为"TBLNAME"和字段名为"FLDNAME"的记录
        DELETE FROM "SYSTEM"."TBL_STRUC" 
          WHERE TBL_ENGLISH='TBLNAME' AND COL_ENGLISH='FLDNAME';
        -- 添加表名为"TBLNAME"和字段名为"FLDNAME"的记录
        INSERT INTO "SYSTEM"."TBL_STRUC"
          VALUES('TBLNAME','TBLNAME','FLDNAME','字段名','字符','10','0','否','否',NULL,NULL,NULL,NULL);
      END;
    END IF;
  END;
END;
/-- 向""SYSTEM"."TBLCOL""插入数据
BEGIN
  DECLARE
    vCount  INTEGER:=0;
  -- 判断记录是否已经存在
  BEGIN
    SELECT COUNT(COLENGLISH) INTO vCount FROM "SYSTEM"."TBL_COL"
      WHERE COLENGLISH='FLDNAME';
    IF vCount=0 THEN
      BEGIN
        -- 执行插入数据的脚本
        INSERT INTO "SYSTEM"."TBLCOL"
          VALUES('FLDNAME','字段名','字符','10','0','否','否',NULL);
      END;
    END IF;
  END;
END;
/
我用OraScript来执行ORACLE的SQL脚本,比如上面的SQL脚本,分块执行,用"/"来获取SQL脚本,执行第一块SQL脚本出错时,我用try..except来退出执行,但是他根本就不执行except后面的代码,而是继续执行是我的问题还是OraScript的问题?

解决方案 »

  1.   

    SELECT COUNT( T.TABLE_NAME) INTO vCount
          FROM SYS.ALL_TABLES  T,SYS.ALL_TAB_COLUMNS  C
          WHERE T.TABLE_NAME=C.TABLE_NAME  AND T.TABLE_NAME='TBLNAME'
            AND C.COLUMN_NAME='FLDNAME';
        IF vCount=0 THEN
          BEGIN
            -- 执行添加字段的脚本
            EXECUTE IMMEDIATE 'ALTER TABLE "SYSTEM"."TBLNAME"
              ADD ("FLDNAME" VARCHAR2(10)    NOT NULL)';
      

  2.   

    -- 向""SYSTEM"."TBLCOL""插入数据
    BEGIN
      DECLARE
        vCount  INTEGER:=0;
      -- 判断记录是否已经存在
      BEGIN
        SELECT COUNT(COLENGLISH) INTO vCount FROM "SYSTEM"."TBLCOL"
          WHERE COLENGLISH='FLDNAME';
        IF vCount=0 THEN
          BEGIN
            -- 执行插入数据的脚本
            INSERT INTO "SYSTEM"."TBLCOL"
              VALUES('FLDNAME','字段名','字符','10','0','否','否',NULL);
          END;
        END IF;
      END;
    END;
    /
    你说这里吧,SELECT COUNT(COLENGLISH) INTO vCount FROM "SYSTEM"."TBL_COL"
    不好意思,刚输错了,不是这里的原因
      

  3.   

    语法上没任何错,你在sqlplus或者tado中执行一下,看看报什么错
      

  4.   

    还有,OraScript角本出错不一定会引起系统异常,所以用try...except不一定能截获,最好在角本中用oracle自身的EXCEPTION来处理错误
      

  5.   

    先谢谢各位了哈如果表存在,这些SQL脚本是能执行的
    在ODAC的帮助里找到解决方法了哈,在OraScript的OnError事件里写代码就行了
      

  6.   

    各位,不好意思我都给了分,为何只有iflang (20)得了20分,剩下的分去哪里了?
      

  7.   

    iflang ,keiy(),wudi_1982 请到非技术区接分