0

我有这张桌子

CREATE TABLE "TB_JOB_LOG"
  (
     "CODIGO"      NUMBER,
     "DESCRIPCION" VARCHAR2(200 BYTE),
     "FECHA"       DATE
  ) 

我有这个存储过程

CREATE OR replace PROCEDURE Dummy_test(
    v_mes  IN NUMBER DEFAULT NULL,
    v_anho IN NUMBER DEFAULT NULL,
    cv_1   IN OUT SYS_REFCURSOR)
AS
BEGIN
    OPEN cv_1 FOR
      SELECT codigo,
             fecha
      FROM   tb_job_log
      WHERE  codigo > 5
             AND codigo < 10;
END dummy_test;

我想用这个其他存储过程从 dummy_test 得到结果

CREATE OR replace PROCEDURE Job_fill_ce
IS
  cc SYS_REFCURSOR;
  l  tb_job_log%ROWTYPE;
BEGIN
    Dummy_test(NULL, NULL, cc);

    LOOP
        FETCH cc INTO l;

        exit WHEN cc%NOTFOUND;

        dbms_output.Put_line(l.codigo);
    END LOOP;

    CLOSE cc;
END job_fill_ce;

但是当我执行时出现此错误job_fill_ce

ORA-06504: PL/SQL: Return types of Result Set variables or query do not match
ORA-06512: en "JOB_FILL_CE", line 7
ORA-06512: en line 2

我错过了什么吗?

4

1 回答 1

1
  SELECT codigo,
         fecha
  FROM   tb_job_log

在此光标中,您正在选择两列

然后声明 tb_job_log 的行类型 l 将包含三列

   l  tb_job_log%ROWTYPE;

可能正因为如此,您会收到此错误

请创建类型为 codigo、fecha 的记录类型并检查

于 2013-07-31T20:15:51.023 回答