ORA-01722: неверный номер в dbms_output.put_line - PullRequest
0 голосов
/ 07 мая 2018

это часть пакета для бронирования номеров в отеле (для упрощения ошибки я удалил параметры даты):

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.

Я пытаюсь решить эту проблему, и я не знаю, где у меня есть проблема со строкой, потому что я прочитал:

Ошибка ORA-01722 возникает при попытке преобразования символьная строка в число, и строка не может быть преобразована в число.

enter image description here

1 Ответ

0 голосов
/ 07 мая 2018

Проблема в том, что room_category - это INTEGER в таблице rooms и VARCHAR2 в параметре процедуры, который вызывает неявный конфликт. Когда вы выполняете запрос, в контексте SQL имя столбца имеет более высокий приоритет, чем параметр привязки.

Пожалуйста, измените имя входной переменной с room_category на p_room_category, чтобы избежать конфликтов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...