Ниже приведена функция, которую я создаю, чтобы принимать массив из varchar2
элементов и возвращать внутренний pk этой записи, который является NUMBER
для каждой записи. Я изо всех сил пытаюсь понять синтаксис, чтобы передать массив типа VARCHAR_ARRAY
в простой запрос sql в курсоре и вернуть переменную типа NUMBER_ARRAY
. Ошибка в строке 8,42 т.е. FROM table_name WHERE column_name IN VARCHAR_ARRAY
которая была передана в функцию. Пожалуйста, помогите мне с этой ошибкой, поскольку я изучаю plsql.
create or replace TYPE VARCHAR_ARRAY AS VARRAY(1000000) OF VARCHAR2(1000);
/
create or replace TYPE NUMBER_ARRAY AS VARRAY(1000000) OF NUMBER;
/
create or replace Function GET_PRODUCT_ID_ARR(V_PRODUCT_NUM_ARR IN VARCHAR_ARRAY)
RETURN NUMBER_ARRAY
IS
product_id_list number_array := number_array();
CURSOR c1
IS
SELECT cat_map_id
FROM mn_cat_map WHERE product_num IN (V_PRODUCT_NUM_ARR) and catalog_type = 'INT';
v_output NUMBER;
BEGIN
OPEN c1;
LOOP
fetch c1 into product_id_list;
EXIT WHEN c1%notfound;
product_id_list.extend;
product_id_list(product_id_list.count) := v_output;
dbms_output.put_line('Product ('||v_output ||'):'||product_id_list(v_output));
END LOOP;
Close c1;
RETURN product_id_list;
END;
/
VARRAY(1000000) OF ...
. Какова возможная бизнес-логика ограничения в 1000000? - person William Robertson   schedule 08.12.2016