我已經編寫了一個PL/SQL過程,它比較兩個表之間的數據並打印差異(如果有),但扭曲是過程的表名是動態的。下面是該過程pl/sql中的ROWTYPE定義
create or replace PROCEDURE compareTables(
tabA IN VARCHAR2, tabB IN VARCHAR2) AS
cur_tab_name USER_TABLES%ROWTYPE;
lv_sql varchar2(4000);
lv_sql2 varchar2(4000);
BEGIN
--SELECT TABLE_NAME INTO cur_tab_name FROM USER_TABLES WHERE TABLE_NAME = tabA;
lv_sql2 := 'SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME = :b_tabA';
EXECUTE IMMEDIATE lv_sql2 INTO cur_tab_name USING tabA;
<<child>>
DECLARE
TYPE cursor_ref IS REF CURSOR;
cur_comp_result cursor_ref;
rec_comp_result cur_tab_name.TABLE_NAME%rowtype;
BEGIN
lv_sql := 'SELECT * FROM '||tabA||' MINUS SELECT * FROM '||tabB;
OPEN cur_comp_result FOR lv_sql;
LOOP
FETCH cur_comp_result INTO rec_comp_result;
EXIT WHEN cur_comp_result%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(rec_comp_result.empid || '' || rec_comp_result.name);
END LOOP;
CLOSE cur_comp_result;
Exception
When others then
dbms_output.put_line('The Problem is '||sqlerrm);
END;
END compareTables;
現在的問題是,當我編寫這個程序,我收到以下錯誤
Error at line 14: PLS-00310: with %ROWTYPE attribute, 'CUR_TAB_NAME.TABLE_NAME' must name a table, cursor or cursor-variable
線14:rec_comp_result cur_tab_name.TABLE_NAME%ROWTYPE;
我該如何解決它?
*注:我的系統中沒有安裝oracle。我使用Oracle Apex Online tool它採用 Oracle數據庫11g企業版發佈11.2.0.3.0和 PL/SQL版本11.2.0.3.0
在你的代碼中,哪一行是31? – Plouf 2013-02-16 13:38:27
程序的最後一行 – 2013-02-16 13:41:23
嘗試刪除'' <>',但肯定是在開始時刪除'declare'。 –
Plouf
2013-02-16 13:48:23