我試圖尋找數據庫中的每個視圖的像「%THIS%」檢查在視圖中的列的存在尋找一個值
一個特定值之前,我想出了這個PLSQL代碼
DECLARE
match_count INTEGER;
BEGIN
FOR t IN (SELECT name FROM user_dependencies where type = 'VIEW') LOOP
EXECUTE IMMEDIATE
'SELECT COUNT(*) FROM '|| t.name || ' Where Column_Name LIKE ''%THIS%'' '
INTO match_count;
IF match_count > 0 THEN
dbms_output.put_line(t.name ||' '||match_count);
END IF;
END LOOP;
END;
但是當我嘗試運行它,我得到一個無效的標識符錯誤在執行immeadiate查詢列名。
對我來說問題很明顯,並不是每個視圖都有Column_Name,但我無法弄清楚如何在運行查詢之前查看該列是否存在,因爲我循環遍歷所有視圖。
我還能夠使用稍微修改過的版本來遍歷所有表格,儘管它們並不都具有該列,但我沒有遇到這個問題。
編輯:我包括我可以用來遍歷表的plsql代碼。
DECLARE
match_count INTEGER;
BEGIN
FOR t IN (SELECT table_name, column_name FROM all_tab_columns
where table_name LIKE 'THIS%' and data_type = 'VARCHAR2' AND column_name = 'Column_name') LOOP
EXECUTE IMMEDIATE
'SELECT COUNT(*) FROM '||t.table_name || ' Where Column_name LIKE ''%THIS%'' '
INTO match_count;
IF match_count > 0 THEN
dbms_output.put_line(t.table_name ||' '||t.column_name||' '||match_count);
END IF;
END LOOP;
END;
對不起,我應該提到,我不知道如何來查詢他們有哪些列個人的意見/表。我的問題是,我不知道如何檢查一個特定列是否存在,而循環遍歷所有列。有太多的視圖單獨執行此操作,並且據我所知,沒有if(column_name.exists){}功能。我包含了我用來在編輯中遍歷表的代碼。 – user1399217
@ user1399217我無法看到問題出在哪裏。 'all_tab_columns'返回表和視圖 – climbage