ошибка числового значения или значения: ошибка преобразования символа в число pl / sql - PullRequest
0 голосов
/ 11 октября 2018

так что я на самом деле просто пытаюсь вывести строки на 12 дней Рождества, просто чтобы разобраться с циклами в PL / SQL, и мне даже кажется, что простой массив не может быть объявлен правильно.Вот код:

CREATE OR REPLACE
    TYPE all_gifts is object (first_words varchar2(20), second_words varchar2(50));
/
DECLARE
type gifts is table of all_gifts;
type daysarray IS VARRAY(12) OF VARCHAR2(20); 


lv_gifts GIFTS := gifts(  all_gifts('and a','Partridge in a pear tree')
                        , all_gifts('Two','Turtle Doves')
                        , all_gifts('Three','French Hens')
                        , all_gifts('Four','Calling Birds')
                        , all_gifts('Five','Golden Rings')
                        , all_gifts('Six','Geese a laying')
                        , all_gifts('Seven','Swans a Swimming')
                        , all_gifts('Eight','Maids a milking')
                        , all_gifts('Nine','Ladies Dancing')
                        , all_gifts('Ten','Lords a leaping')
                        , all_gifts('Eleven','Pipers piping')
                        , all_gifts('Twelve','Drummers drumming')
                        );
second_array_elem varchar2(50);
lv_counter NUMBER := 1;
lv_days daysarray;
lv_first_word VARCHAR2(50);
BEGIN
lv_days := daysarray('First','Second','Third','Fourth','Fifth','Sixth','Seventh','Eigth','Ninth','Tenth','Eleventh','Twelefth');

FOR day in 1 .. lv_days.count loop

    IF day != 'first' THEN
        lv_first_word := second_array_elem;
    ELSE 
        lv_first_word := 'A';
        second_array_elem := lv_gifts.first;
    END IF;

    dbms_output.put_line('On the ['||lv_days(day)||'] day of Christmas');

    second_array_elem := lv_gifts.next(second_array_elem);

END LOOP;

END;
/

И консоль выдает ошибку в строке сразу после моего оператора BEGIN (где я пытаюсь объявить массив lv_days), говоря:

numeric or value error: character to number conversion error

Но выше, в моем заявлении об объявлении я представляю собой переменный массив из 12 индексов с типом varchar2(20).
Какой простой шаг я здесь пропустил?

1 Ответ

0 голосов
/ 12 октября 2018

Проблема связана с приведенной ниже строкой кода.

IF day != 'first' THEN

Согласно коду, система пытается сравнить переменную цикла со строкой 'first'

Вы можете использовать следующий код

IF lv_days(day) != 'first' THEN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...