【问题标题】:ORA-01722: invalid number in dbms_output.put_lineORA-01722: dbms_output.put_line 中的数字无效
【发布时间】:2018-05-07 16:22:19
【问题描述】:

这是酒店房间预订包的一部分(为了简化我删除日期参数的错误):

create or replace package room_reservation
is
PROCEDURE are_free_rooms (
        room_capacity   IN NUMBER,
        room_category   IN VARCHAR2);
end;


CREATE OR REPLACE PACKAGE BODY room_reservation IS

    PROCEDURE are_free_rooms (
        room_capacity   IN NUMBER,
        room_category   IN VARCHAR2
    ) IS

        v_room_id   NUMBER;
        CURSOR rooms IS SELECT
            r.room_id
                        FROM
            rooms r
            LEFT JOIN reservations res ON r.room_id = res.room_id
            JOIN room_category rc ON rc.category_id = r.room_category
                        WHERE
            r.capacity = room_capacity
            AND rc.name = room_category
               ;

    BEGIN
        FOR v_room_id IN rooms LOOP
            dbms_output.put_line(v_room_id.room_id);
        END LOOP;
    END;

END;

一切都在编译,但是当我想调用程序时出现错误:

Error starting at line : 1 in command -
begin
ROOM_RESERVATION.ARE_FREE_ROOMS(4,'vip');
end;
Error report -
ORA-01722: invalid number
ORA-06512: at "SYSTEM.ROOM_RESERVATION", line 65
ORA-06512: at line 2
01722. 00000 -  "invalid number"
*Cause:    The specified number was invalid.
*Action:   Specify a valid number.

我试图解决这个问题,但我不知道我在哪里遇到了 String 的问题,因为我读到了:

尝试转换一个 ORA-01722 错误 字符串转换成数字,字符串不能转换 变成一个数字。

【问题讨论】:

    标签: oracle plsql


    【解决方案1】:

    问题在于room_categoryrooms 表中的INTEGER 和过程参数中的VARCHAR2,这会导致隐式冲突。 运行查询时,在 SQL 上下文中,列名的优先级高于绑定参数。

    请将您的输入变量名称从room_category 更改为p_room_category 以避免冲突

    【讨论】:

    • 谢谢,我没想到。现在它起作用了。我对未来有一个教训:)
    猜你喜欢
    • 2021-10-30
    • 1970-01-01
    • 2018-06-25
    • 2019-09-07
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多