2011-05-29 41 views
1

我希望能够打印出查询的所有结果(应由TableA中的PK过滤),并对TABLEA中的每个PK执行此操作。 这是我到目前为止有:PL/SQL - dbms输出立即执行的结果

DECLARE 
    CURSOR Curs IS SELECT DISTINCT PKID FROM TABLEA; 
    BEGIN 
    FOR rec IN Curs 
      LOOP 
       EXECUTE IMMEDIATE 
       'SELECT * FROM (
       SELECT cola, 
       FKTABLEA, 
       colc, 
       lag (cold,1) OVER (ORDER BY cold) AS cold 
       FROM tableB 
       WHERE FKTABLEA = :1) 
       WHERE colc != cold 
       order by cola' using Curs.PKID; 

       DBMS_OUTPUT.PUT_LINE('OUTPUT ALL RESULTS FROM THE QUERY HERE'); 
      END LOOP;  
    END; 

回答

4

没有必要使用EXECUTE IMMEDIATE。并且只有全部手动打印所有结果的方式:

DECLARE 
    CURSOR Curs IS SELECT DISTINCT PKID FROM TABLEA; 
BEGIN 
    FOR rec IN Curs LOOP 
     FOR r IN (
      SELECT * FROM (
       SELECT cola, 
        FKTABLEA, 
        colc, 
        lag (cold,1) OVER (ORDER BY cold) AS cold 
       FROM tableB 
       WHERE FKTABLEA = rec.PKID) 
      WHERE colc != cold 
      order by cola) 
     LOOP 
      DBMS_OUTPUT.PUT_LINE(r.cola || ',' || r.colb || ',' || r.colc || ',' || r.cold); 
     END LOOP; 
    END LOOP;  
END;