Мне нужно вернуть курсор внутри функции:
CREATE OR REPLACE FUNCTION test_cursor (
bigstring IN VARCHAR2
)
RETURN cursor
IS
row_test table_colors := table_colors(bigstring);
c1 CURSOR;
BEGIN
OPEN c1 FOR
select * from cars where color IN (select column_value
from table(row_test));
RETURN c1;
END test_cursor;
table_colors
is:
create or replace type table_colors as table of varchar2(20);
Но когда я проверяю, как он проходит, как blue, red, pink, white
или 'blue', 'red', 'pink', 'white'
, всегда выдает одну и ту же ошибку.
ORA-06502: PL/SQL; numeric or value error: character string buffer too small
в этой строке row table_colors := table_colors(bigstring);
Что я здесь делаю неправильно?
table colors
? Вы не можете сделатьWHERE var in <string>
, вам нужноWHERE var in ( value1, value2 ... valueN)
... вы, вероятно, ищете НАЙТИ_IN_SET() - person Juan Carlos Oropeza   schedule 08.03.2016create or replace type table_colors as table of varchar2(20);
- person Marllon Nasser   schedule 08.03.2016clause in
, который параметризован...select * from cars where colors in ('a', 'b', 'c');
Я хочу, чтобы это значение'a', 'b', 'c'
было параметризовано... - person Marllon Nasser   schedule 08.03.2016where column in (VALUES)
- person Marllon Nasser   schedule 08.03.2016