1

pl/sqlにパッケージを作成しています。これで私はrefカーソルを宣言しました。inプロシージャでは、複数の列名を持つselectステートメントを使用しています。しかし、結果を得ることができません。ここにコードを添付しました。エラーを修正するのを手伝ってください。pl/sqlは初めてです

code

CREATE OR REPLACE PACKAGE types AS 
  TYPE cursor_type IS REF CURSOR;
END Types; 
/

CREATE OR REPLACE
PROCEDURE get_CDR_rs (p_no    IN  zkv.FLD_callingPartyNumber%TYPE,
                  CDR_recordset OUT SYS_REFCURSOR) AS 
BEGIN 
 OPEN CDR_recordset FOR
SELECT  FLD_callingPartyNumber,
       FLD_dateTimeConnect

FROM   CISCOCUIC_TBL
WHERE  FLD_callingPartyNumber= p_no
ORDER BY FLD_callingPartyNumber,;
END get_CDR_rs;
/



SET SERVEROUTPUT ON SIZE 1000000
DECLARE
  l_cursor  SYS_REFCURSOR;
  l_callingPartyNumber   zkv.FLD_callingPartyNumber%TYPE;
  l_dateTimeConnect  zkv.FLD_dateTimeConnect%TYPE;
BEGIN

LOOP 
FETCH l_cursor
INTO  l_callingPartyNumber, l_dateTimeConnect;
EXIT WHEN l_cursor%NOTFOUND;

END LOOP;
CLOSE l_cursor;
END;
/


Error

9/41    PL/SQL: ORA-00936: missing expression
5/5     PL/SQL: SQL Statement ignored
4

1 に答える 1

1

まず、手順に構文エラーがあります。そのはず

CREATE OR REPLACE
PROCEDURE get_CDR_rs (p_no    IN  zkv.FLD_callingPartyNumber%TYPE,
                  CDR_recordset OUT SYS_REFCURSOR) AS 
BEGIN 
 OPEN CDR_recordset FOR
SELECT  FLD_callingPartyNumber,
       FLD_dateTimeConnect

FROM   CISCOCUIC_TBL
WHERE  FLD_callingPartyNumber= p_no
ORDER BY FLD_callingPartyNumber; -- there was a comma which is not required or you    
--   missed a column
END get_CDR_rs;
/

get_CDR_rs第二に、結果を取得するために呼び出されている場所は?

第三に、なぜ次のものが必要なのですか?sys_refcursor を使用しているため

CREATE OR REPLACE PACKAGE types AS 
  TYPE cursor_type IS REF CURSOR;
END Types; 
/

sys_refcursor を返すプロシージャの結果を見たい場合は、次のようにします。

variable rset refcursor;

DECLARE
  p_no  zkv.FLD_callingPartyNumber%TYPE;
BEGIN
  p_no := '123';
  get_CDR_rs (p_no, :rset);  
END;
/

print rset
于 2012-11-19T05:39:31.953 に答える