Я хочу создать функцию, которая возвращает несколько столбцов varchar2. его то, что у меня есть до сих пор, но это ошибки на звонок execute immediate
.Как функция может возвращать несколько столбцов?
FUNCTION FNC_LST_OUR(p_com_code varchar2,
p_from varchar2,
p_to varchar2
) return VARCHAR2 is
v_sql VARCHAR2(30000) := '';
v_sql2 VARCHAR2(30000) := '';
error_msg_tmp varchar2(255);
begin
v_sql := 'select s.com_code, s.p_code, count(*) as Num_SIMRP
from p_stest s
where s.com_code = ''' || p_com_code || '''
and s.s_status = ''ACTIVE''
and s.s_type like ''H%'' ';
if p_from is not null then
v_sql := v_sql || ' and s.p_code between ''' || p_from || ''' and ''' || p_to || '''';
end if;
v_sql := v_sql || ' group by s.com_code,s.p_code
having count(s.p_code)> 0 ';
EXECUTE IMMEDIATE v_sql INTO v_sql2 USING p_com_code; --> Error This Line
return v_sql2;
end;
мне нужно возвращать несколько столбцов, как:
com_code | p_code | num_simrp
A | ADSWQ | 14
A | AQWSA | 8
A | DEWSQ | 10
A | SDERS | 45
A | DFDEW | 80
Я должен создать функцию в пакете и внутреннее соединение результат как часть запроса.
Что вызывает вызов этой функции с возвращенными данными? Кажется, вы хотите вернуть либо коллекцию, либо курсор, но который зависит от того, как она будет использоваться. (Для этого вам не нужен динамический SQL, но это отдельная проблема. Также полезно показать *, какую * ошибку вы получите, хотя это очевидно здесь.) –
Почему вы «должны» сделать это так? Внутреннее присоединение к результату функции - одна из худших вещей, которую вы можете сделать. –