I've got code as follows:
CREATE OR REPLACE TYPE cat_array_t is varray(2) of varchar(10);
-- cat_array cat_array_t:=cat_array_t('retired','worker');
/
CREATE OR REPLACE FUNCTION Get_Data_Faster(in_cat IN cat_array, in_kw_crt IN kw_crt_array) RETURN get_data_faster_data PIPELINED AS
TYPE r_cursor IS REF CURSOR;
query_results r_cursor;
results_out get_data_faster_row := get_data_faster_row(NULL, NULL);
query_str VARCHAR2(4000);
cat_value VARCHAR2(10);
kw_crt_value VARCHAR2(10);
BEGIN
FOR i IN 1..cat_array.COUNT
LOOP
cat_value := cat_array(i);
kw_crt_value := kw_crt_array(i);
-- query_str := 'SELECT distinct '||seq_number||' as seq, value, item
-- FROM my_table ai';
--
-- query_str := query_str || '
-- WHERE ai.value = '''||the_value||''' AND ai.item = '''||the_item||'''
-- AND ai.param = ''BOOK''
-- AND ai.prod in (' || list || ');
query_str := 'select owner_id,property_id ' ||
'from owners ' ||
'where substr(PROPERTY_ID,1,4) =' || chr(39) || kw_crt_value || chr(39) ||
' and Owner_category = ' || chr(39) || cat_value || chr(39);
OPEN query_results FOR query_str;
LOOP
FETCH query_results INTO
results_out.owner_id,
results_out.property_id;
EXIT WHEN query_results%NOTFOUND;
PIPE ROW(results_out);
END LOOP;
CLOSE query_results;
END LOOP;
END;
/
The problem is when I run this I get error. In log there is "Error: PLS-00201: identifier "CAT_ARRAY" should be declared". Don't how to improve this code. How to pass this line with elements of varray to code -- cat_array cat_array_t:=cat_array_t('retired','worker');
IN cat_arrayjust beIN cat_array_t?