так что я на самом деле просто пытаюсь вывести строки на 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)
.
Какой простой шаг я здесь пропустил?