数据未插入目标表

时间:2018-07-02 10:49:49

标签: oracle plsql cursor

我在Oracle中具有以下PL-SQL代码块:

DECLARE  TAB VARCHAR(100);
         COL VARCHAR(100);

CURSOR C_COLS IS
          select DISTINCT table_name, column_name
          from all_tab_columns 
          where OWNER = 'MyDB' AND DATA_TYPE LIKE '%VARCHAR%';
BEGIN
    OPEN C_COLS;
    LOOP
      FETCH C_COLS INTO TAB, COL;
      EXIT WHEN C_COLS%notfound; 
        INSERT INTO TargetTable (TABLE_NAME, COLUMN_NAME, COLUMN_VALUE)
        SELECT  DISTINCT   TAB, 
                           COL,
                           (SELECT COL FROM TAB)
FROM TAB
WHERE REGEXP_LIKE(COL, '([ABCDEFGHIJKLMNOPQRSTUVWXYZ])\d\d\d\d\d\d([ABCDEFGHIJKLMNOPQRSTUVWXYZ])', 'ix');
     END LOOP;
     CLOSE C_COLS;
END;

这个想法是要确定我相当大的数据库中的哪些表包含某种数据模式并找到它们。

所以我想返回三列:TableName,ColumnName,ColumnName的值。

以上运行,但不返回任何数据,我不明白为什么。游标中的查询返回结果,如果我将表值硬编码到包含正则表达式的简单选择语句中,则会得到结果。我只想要一个包含我期望的数千个结果的结果集。

是我用来动态查找column_value的(SELECT COL FROM TAB)吗?我不确定是否可以这样表达。

1 个答案:

答案 0 :(得分:3)

如果要动态选择列,则不妨尝试dynamic SQL

Array.map()