【问题标题】:Get data from stored procedure in oracle [duplicate]从oracle中的存储过程中获取数据[重复]
【发布时间】:2013-08-01 12:36:22
【问题描述】:

我有这张桌子

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

我错过了什么吗?

【问题讨论】:

  • 检查此SO Solution 以了解类似问题,您仅从 SP 返回 2 列,并且您将 l 变量设置为 table%rowtype,它可以有超过 2 列

标签: sql oracle stored-procedures oracle-sqldeveloper


【解决方案1】:
  SELECT codigo,
         fecha
  FROM   tb_job_log

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

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

   l  tb_job_log%ROWTYPE;

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

请创建一个类型为 codigo、fecha 和检查的记录类型

【讨论】:

  • 你说得对,我为 codigo 和 fecha 创建了两种类型并且工作正常。谢谢
猜你喜欢
  • 2016-10-21
  • 1970-01-01
  • 2014-11-01
  • 2022-08-24
  • 2011-12-19
  • 2010-11-13
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
相关资源
最近更新 更多