2009-08-27 10 views
0

カーソルを戻すoracle SPから結果をフェッチしようとしています。 は、私は上記のコードを持っている質問のこのタイプのためとthatので、私は周りを見回したoracle SPから結果をフェッチする

declare VARIABLE csr1 REFCURSOR; 
declare VARIABLE csr2 REFCURSOR; 
declare VARIABLE csr3 REFCURSOR; 
declare VARIABLE csr4 REFCURSOR; 
declare VARIABLE csr5 REFCURSOR; 
EXEC getReportData('PUB',:csr1,:csr2,:csr3,:csr4,:csr5); 
PRINT csr1; 

...動作していないように次のコードを持っています。

同じ答えでループするもう1つのオプションがあります。クエリは、このようなものですので、

rej_rec Reasons_for_Rejection%ROWTYPE; 

Reasons_for_Rejectionは、しかし、私のSPで、彼らはいくつかの内部テーブルを使用している...たぶんテーブル名です:

そのコードの行の1が言うので、それは私のために動作しません。
select c.blah from (select blah1 from blah) c 

答えて

2

「動作していない」というより具体的なことを述べる必要があります。しかし、私が最初に間違っているのは、SQLPlusとPL/SQLが混乱しているということです。

SQLPlusでコマンドを入力するか、スクリプトとして実行しているとします。

「DECLARE」はPL/SQLブロックを開始します。このブロックは、新しい行にスラッシュを入力するまで実行されません。あなたが対話的にこれらのコマンドを入力しているのであれば、それはおそらくちょうどより多くの入力のためのプロンプトを表示します

SQL> declare VARIABLE csr1 REFCURSOR; 
    2 declare VARIABLE csr2 REFCURSOR; 
    3 declare VARIABLE csr3 REFCURSOR; 
    4 declare VARIABLE csr4 REFCURSOR; 
    5 declare VARIABLE csr5 REFCURSOR; 
    6 EXEC getReportData('PUB',:csr1,:csr2,:csr3,:csr4,:csr5); 
    7 PRINT csr1; 
    8/
SP2-0552: Bind variable "CSR5" not declared. 
SQL> 

使用しようとしている他のコマンドは、SQLPlusをコマンドです。 VARIABLEコマンドは、SQLPlusのバインド変数を宣言します。DECLAREキーワードはまったく含まれていません。だからあなたはこれを試してください:

VARIABLE csr1 REFCURSOR; 
VARIABLE csr2 REFCURSOR; 
VARIABLE csr3 REFCURSOR; 
VARIABLE csr4 REFCURSOR; 
VARIABLE csr5 REFCURSOR; 
EXEC getReportData('PUB',:csr1,:csr2,:csr3,:csr4,:csr5); 
PRINT csr1; 

私は本当にあなたの質問の残りの部分を理解していない。 %ROWTYPE宣言は、レコードが指定されたテーブルから直接取り込まれなければならないという意味ではなく、そのフィールドと型がテーブルの行のものと一致することを意味します。これらのフィールドは他の変数と同様に参照および割り当てが可能です。

0

SQL * Plusを使用している場合は、DECLAREは必要ありません。

私たちに詳細を教えてくれないので、あなたのコードがなぜ機能していないのか分かりません。

SQL> create or replace procedure getReportData 
    2  (dno in dept.deptno%type 
    3  , d_recs out sys_refcursor 
    4  , e_recs out sys_refcursor) 
    5 is 
    6 begin 
    7  open d_recs for 
    8   select * from dept where deptno = dno; 
    9  open e_recs for 
10   select * from emp where deptno = dno; 
11 end; 
12/

Procedure created. 

SQL> var rc1 refcursor 
SQL> var rc2 refcursor 
SQL> 
SQL> exec getReportData (30, :rc1, :rc2) 

PL/SQL procedure successfully completed. 

SQL> 
SQL> print rc1 

    DEPTNO DNAME   LOC 
---------- -------------- ------------- 
     30 SALES   CHICAGO 

SQL> print rc2 

    EMPNO ENAME  JOB    MGR HIREDATE   SAL  COMM 
---------- ---------- --------- ---------- --------- ---------- ---------- 
    DEPTNO 
---------- 
     7499 VAN WIJK SALESMAN  7698 20-FEB-81  1600  300 
     30 

     7521 PADFIELD SALESMAN  7698 22-FEB-81  1250  500 
     30 

     7654 BILLINGTON SALESMAN  7698 28-SEP-81  1250  1400 
     30 


     7698 SPENCER MANAGER   7839 01-MAY-81  2850 
     30 

     7900 HALL  CLERK   7698 03-DEC-81  950 
     30 

SQL>

を:しかし、これはあなたがやってされるべきものの一種であります
関連する問題