我在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)
吗?我不确定是否可以这样表达。