2013-03-31 22 views
0

這是什麼,我想如何在動態SQL使用OUT模式

1 declare 
    2 stmt VARCHAR2(200):='&query'; 
    3 emprec emp%ROWTYPE; 
    4 BEGIN 
    5 EXECUTE IMMEDIATE stmt USING out emprec,in &id; 
    6 DBMS_OUTPUT.PUT_LINE('Emp: '||emprec.ename); 
    7* END; 
SQL>/
Enter value for query: select * into :emprec from emp where empno=:no 
old 2: stmt VARCHAR2(200):='&query'; 
new 2: stmt VARCHAR2(200):='select * into :emprec from emp where empno=:no'; 
Enter value for id: 7369 
old 5: EXECUTE IMMEDIATE stmt USING out emprec,in &id; 
new 5: EXECUTE IMMEDIATE stmt USING out emprec,in 7369; 
    EXECUTE IMMEDIATE stmt USING out emprec,in 7369; 
            * 
ERROR at line 5: 
ORA-06550: line 5, column 36: 
PLS-00457: expressions have to be of SQL types 
ORA-06550: line 5, column 3: 
PL/SQL: Statement ignored 

但是,當我改變線

EXECUTE IMMEDIATE stmt into emprec USING in &id;

和查詢select * from emp where empno=:no

然後它工作正常,並顯示正確的輸出。任何人都請幫助我,如何解決這個問題

+0

您是否嘗試過使用'RETURNING'子句? – Rachcha

回答

0

要存儲執行查詢的結果集,必須使用INTO子句指定兼容變量。

INTO子句僅用於單行查詢,該子句指定檢索哪些列值的變量或記錄。對於查詢檢索的每個值,INTO子句中必須有對應的類型兼容變量或字段。

DECLARE 
    stmt VARCHAR2(200):='select * from emp where empno=:no'; 
    emprec emp%ROWTYPE; 
BEGIN 
    EXECUTE IMMEDIATE stmt INTO emprec USING &id; 
    DBMS_OUTPUT.PUT_LINE('Emp: '||emprec.ename); 
END;