从oracle中的存储过程中获取数据

时间:2013-07-31 19:51:45

标签: sql oracle stored-procedures oracle-sqldeveloper

我有这张桌子

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

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

  SELECT codigo,
         fecha
  FROM   tb_job_log

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

后来声明了包含三列的tb_job_log的行类型

   l  tb_job_log%ROWTYPE;

可能因为这个你得到了这个错误

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