PL / SQL动态表名称

时间:2012-08-01 03:47:22

标签: sql oracle plsql

我对甲骨文很陌生,所以不完全确定这是可行的,或者我是否会以错误的方式解决这个问题,但这里有...

我正在修复的旧馈线脚本的一部分循环遍历~20个表(可以随时更改)以填充相关的临时表。这部分目前非常基本:

...

INSERT INTO staging_tbl_1(
     SELECT *
     FROM source_tbl_1    
);

INSERT INTO staging_tbl_2(
         SELECT *
         FROM source_tbl_2    
);

...

源数据库中的某些字段具有不同的约束等,这意味着它会不时地抛出异常并且馈送器将停止。我希望做的是在现有的feed包中创建一个过程,在插入之前遍历每个记录中的每一行,然后将其包装在异常块中。通过这种方式,可以记录它而不会导致进纸器停止。

基本上我正在追逐这样的事情:

BEGIN procedure_x(source_record, staging_record)

  -- Perform validation to ensure records exit

  -- Loop through all record rows
  FOR row IN (SELECT * FROM source_record) LOOP

     -- Wrap in exception block

     -- Insert into staging record

     -- Log exception if it occurs
  END LOOP;         
END

我尝试过ref游标但是为了让它们工作,我还需要事先知道行类型(从我有限的理解)。我也试过立即执行但是我找不到以适当的方式循环它的方法。还有其他方法可以解决这个问题吗?

其他

我意识到我们真的应该解决问题的根源,而不是像这样解决它,不幸的是它远远超出了我的影响范围。

可以在不进行单独的过程的情况下执行此操作,只需将所有表引用包装在循环中,但是我想将此作为最后的手段。

1 个答案:

答案 0 :(得分:1)

Oracle具有记录DML错误的功能。将它与单个SQL语句一起使用。不要逐行进行并使您的进程爬行。

http://docs.oracle.com/cd/B19306_01/server.102/b14231/tables.htm#ADMIN10261