如何输出一个过程结果的记录?

萨菲拉

因此,假设我有一个像这样的表:

CREATE TABLE MEETINGS(
    MEETING_DAY DATE,
    MEETING_ROOM NVARCHAR2(10),
    MEETING_DURATION NUMBER(2)
);

像这样的过程,它接收日期和会议室,并返回记录,该记录包含在给定日期将在会议室发生的会议持续时间:

CREATE OR REPLACE PROCEDURE meetings_for_today(
    v_room IN NVARCHAR2, v_day IN DATE, result_meetings OUT SYS_REFCURSOR)
    IS BEGIN
        OPEN result_meetings FOR
            SELECT  MEETING_DAY, MEETING_DURATION
            FROM MEETINGS
            WHERE MEETING_DAY = v_day AND MEETING_ROOM = v_room;
END;
/

但是我想检查一下该程序是否确实有效,我在这个主题上进行了很多搜索,但是发现很难找到解决方案。

所以我试着做:

DECLARE
  meeting_res MEETINGS%ROWTYPE; 
  v_refcur sys_refcursor;

BEGIN
    meetings_for_today('1A', to_date('12/12/2016', 'dd/mm/yyyy'), v_refcur);
    LOOP
    fetch v_refcur into meeting_res;
    exit when v_refcur%notfound;
    dbms_output.put_line(meeting_res.MEETING_DAY || ' ' || meeting_res.MEETING_DAY);
end loop;
End;
/

这给了我以下错误:

第1行出现错误:ORA-06504:PL / SQL:结果集变量或查询的返回类型与ORA-06512不匹配:在第8行

我究竟做错了什么?

PS:请不要给我一个有效的代码;向我解释我的推理出了什么问题以及如何更好地利用Oracle的资源:)

鳄鱼

PS:请不要给我一个有效的代码,请向我解释我的推理出了什么问题以及如何更好地使用oracle的资源:)

此变量:

meeting_res MEETINGS%ROWTYPE; 

类型:MEETINGS%ROWTYPE;
表示这是由MEETINGS表的所有3列组成的行(记录)

CREATE TABLE MEETINGS(
    MEETING_DAY DATE,
    MEETING_ROOM NVARCHAR2(10),
    MEETING_DURATION NUMBER(2)
);

但是游标返回2列,请看这里的SELECT子句,那里只有2列:MEETING_DAY + MEETING_DURATION

 OPEN result_meetings FOR
            SELECT  MEETING_DAY, MEETING_DURATION
            FROM MEETINGS .....

因此,您试图从包含2列的游标中获取一条记录,并将其放入包含3列的变量中
它们肯定不匹配(3个列对2个列),并且您会收到ORA-06504错误。


您可以声明由2列组成的自己的记录类型

  type my_type is record(
     MEETING_DAY date , MEETING_DURATION number(2)
  );

并以这种方式在您的代码中使用它:

DECLARE
  type my_type is record(
     MEETING_DAY date , MEETING_DURATION number(2)
  );
  meeting_res my_type; 
  v_refcur sys_refcursor;

BEGIN
    meetings_for_today('1A', to_date('12/12/2016', 'dd/mm/yyyy'), v_refcur);
    LOOP
    fetch v_refcur into meeting_res;
    exit when v_refcur%notfound;
    dbms_output.put_line(meeting_res.MEETING_DAY || ' ' || meeting_res.MEETING_DAY);
end loop;
End;
/

注意-列数和对应列的类型必须匹配,或者至少其dattype必须是“ compatibile”-如果Oracle能够将一个值转换为另一个值(例如,可以将NUMBER强制转换为VARCHAR2),则它们是兼容的),否则,如果Oracle无法将某些值转换为另一种数据类型,则会得到ORA-06504(例如NUMBER到DATE)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何防止while循环仅输出一个结果?

来自分类Dev

如何将一个过程的输出作为参数传递给 tcl 中的另一个过程

来自分类Dev

如何将两个存储过程的结果传递到一个MVC视图?

来自分类Dev

如何从存储过程中的3个表中获得一个结果

来自分类Dev

对于没有与另一个表的连接记录的记录,如何获得连接结果?

来自分类Dev

如何在一个存储过程调用中将多个记录插入表中

来自分类Dev

SQL Server如何使用WHILE查询从多个结果中输出一个表结果

来自分类Dev

将一个过程的输出链接到另一个过程的输入

来自分类Dev

获取一个存储过程的值以得到另一个存储过程的结果

来自分类Dev

创建一个包含返回记录的存储过程

来自分类Dev

如何杀死一个过时的过程

来自分类Dev

如何杀死一个过时的过程

来自分类Dev

如何开始一个实时过程?

来自分类Dev

与另一个过程的标准输入/输出交互

来自分类Dev

重击 逐行输出到另一个过程

来自分类Dev

重击 逐行输出到另一个过程

来自分类Dev

如何存储函数的输出并将存储的输出作为下一个输入,并重复此过程特定的次数

来自分类Dev

如何基于另一个表的结果在MySQL中循环插入记录

来自分类Dev

Python:如何将for循环的结果合并为一个输出?

来自分类Dev

如何基于`find`输出删除目录:仅第一个结果

来自分类Dev

如何将单个结果从locate命令的输出传递到另一个命令?

来自分类Dev

SQL Server 如何将多个结果输出到一个表中

来自分类Dev

另一个过程中过程调用的输出不一致

来自分类Dev

如何记录一个SQL异常?

来自分类Dev

Twisted spawnProcess,将一个过程的输出发送到另一个过程的输入

来自分类Dev

如何在另一个过程中调用一个过程

来自分类Dev

如何从另一个存储过程调用一个存储过程

来自分类Dev

JSON输出仅显示最后一个结果

来自分类Dev

bash命令,它输出前一个管道的结果

Related 相关文章

  1. 1

    如何防止while循环仅输出一个结果?

  2. 2

    如何将一个过程的输出作为参数传递给 tcl 中的另一个过程

  3. 3

    如何将两个存储过程的结果传递到一个MVC视图?

  4. 4

    如何从存储过程中的3个表中获得一个结果

  5. 5

    对于没有与另一个表的连接记录的记录,如何获得连接结果?

  6. 6

    如何在一个存储过程调用中将多个记录插入表中

  7. 7

    SQL Server如何使用WHILE查询从多个结果中输出一个表结果

  8. 8

    将一个过程的输出链接到另一个过程的输入

  9. 9

    获取一个存储过程的值以得到另一个存储过程的结果

  10. 10

    创建一个包含返回记录的存储过程

  11. 11

    如何杀死一个过时的过程

  12. 12

    如何杀死一个过时的过程

  13. 13

    如何开始一个实时过程?

  14. 14

    与另一个过程的标准输入/输出交互

  15. 15

    重击 逐行输出到另一个过程

  16. 16

    重击 逐行输出到另一个过程

  17. 17

    如何存储函数的输出并将存储的输出作为下一个输入,并重复此过程特定的次数

  18. 18

    如何基于另一个表的结果在MySQL中循环插入记录

  19. 19

    Python:如何将for循环的结果合并为一个输出?

  20. 20

    如何基于`find`输出删除目录:仅第一个结果

  21. 21

    如何将单个结果从locate命令的输出传递到另一个命令?

  22. 22

    SQL Server 如何将多个结果输出到一个表中

  23. 23

    另一个过程中过程调用的输出不一致

  24. 24

    如何记录一个SQL异常?

  25. 25

    Twisted spawnProcess,将一个过程的输出发送到另一个过程的输入

  26. 26

    如何在另一个过程中调用一个过程

  27. 27

    如何从另一个存储过程调用一个存储过程

  28. 28

    JSON输出仅显示最后一个结果

  29. 29

    bash命令,它输出前一个管道的结果

热门标签

归档