У меня есть 5 курсоров, и я пытаюсь создать условную структуру, которая открывает и обрабатывает соответствующий курсор, основываясь на пользовательском вводе. Функция должна собирать результаты в одну строку. Код, очевидно, содержит ошибки, и я не могу на всю жизнь выяснить, где я ошибся. Спасибо, господа за помощь!
create or replace function listnation1(region_name in varchar2)
return varchar2
IS
DECLARE
CURSOR africaCursor IS
SELECT n_name
FROM nation
where n_regionkey = 0;
CURSOR americaCursor IS
SELECT n_name
FROM nation
where n_regionkey = 1;
CURSOR asiaCursor IS
SELECT n_name
FROM nation
where n_regionkey = 2;
CURSOR europeCursor IS
SELECT n_name
FROM nation
where n_regionkey = 3;
CURSOR midEastCursor IS
SELECT n_name
FROM nation
where n_regionkey = 4;
aString varchar2 := "";
BEGIN
IF region_name = "Africa" THEN
aString := "0 ";
FOR i in africaCursor LOOP
CONCAT(aString, str(i.n_name));
CONCAT(aString, ", ");
END LOOP;
ELSIF region_name = "America" THEN LOOP
aString := "1 ";
FOR i in americaCursor LOOP
CONCAT(aString, str(i.n_name));
CONCAT(aString, ", ");
END LOOP;
ELSIF region_name = "Asia" THEN LOOP
aString := "2 ";
FOR i in asiaCursor LOOP
CONCAT(aString, str(i.n_name));
CONCAT(aString, ", ");
END LOOP;
ELSIF region_name = "Europe" THEN LOOP
aString := "3 ";
FOR i in europeCursor LOOP
CONCAT(aString, str(i.n_name));
CONCAT(aString, ", ");
END LOOP;
ELSIF region_name = "Middle East" THEN LOOP
aString := "4 ";
FOR i in midEastCursor LOOP
CONCAT(aString, str(i.n_name));
CONCAT(aString, ", ");
END LOOP;
END IF;
return aString;
END listnation1;
/