我的plsql代碼出現問題,嘗試幾乎所有操作。現在我放鬆我的思想和力量來解決我的問題:)在Oracle中生成動態SQL
這種情況是,我想搜索所有表架構的特定字符串分配給變量v_ss並打印到DBMS_OUTPUT。我知道這種情況下有現成的解決方案,但我想自己編寫代碼。下面的代碼在我的v_stmt中給了我一個「表不存在」的錯誤。我假設這個select不能識別rec.column_name,但是爲什麼?
這裏是我的代碼:
DECLARE
v_stmt VARCHAR2(1000);
v_ss VARCHAR2(30) := 'Argentina';
v_own ALL_TAB_COLUMNS.OWNER%TYPE;
v_tab_nam ALL_TAB_COLUMNS.TABLE_NAME%TYPE;
v_col_nam ALL_TAB_COLUMNS.COLUMN_NAME%TYPE;
CURSOR cur_asc IS
SELECT t.owner, t.table_name, t.column_name
FROM SYS.ALL_TAB_COLUMNS t
WHERE t.OWNER LIKE 'HR'
AND t.DATA_TYPE LIKE 'VARCHAR2';
BEGIN
FOR rec IN cur_asc LOOP
v_stmt := 'SELECT rec.owner, rec.table_name, rec.column_name FROM rec.table_name WHERE rec.column_name LIKE :1';
EXECUTE IMMEDIATE v_stmt INTO v_own, v_tab_nam, v_col_nam USING v_ss;
DBMS_OUTPUT.put_line(v_own || ':' || v_tab_nam || ':' || v_col_nam);
END LOOP;
END;
/
Error report -
ORA-00942: table or view does not exist
ORA-06512: at line 19
00942. 00000 - "table or view does not exist"
*Cause:
*Action:
你能不能給我一個解釋爲我的錯誤,以及如何解決它?在此先感謝
你有一個錯字,因爲'USER_'視圖沒有所有者列。 –
@Lalit,謝謝 - 糾正你的錯誤。 –