Мне нужно использовать переменную PLSQL для хранения более трех значений. Мне не нужна коллекция или курсор. Ниже приведено требование, v_cnt нуждается в 9 вместо «0». PLease поможет в этом.Необходимо использовать переменную PLSQL, если select возвращает более одной записи. Нет необходимости в сборке/курсорах.
declare
v_column VARCHAR2(200);
v_cnt number :=0;
begin
select (SELECT listagg(TABLE_NAME,',')within group(order by table_name) FROM ALL_TABLES where owner in 'SYS' AND rownum<10)
into v_column
from dual;
select count(*) into v_cnt from all_tables where table_name in(v_column);
DBMS_OUTPUT.PUT_LINE('v_column=' || v_column||' VC-nt : = '||v_cnt);
end;
v_column будет иметь значения, разделенные запятой. Мне нужно передать его в оператор, но v_column целые значения рассматриваются как одно значение. Есть ли способ передать его в виде отдельных 9 значений внутри оператора IN.
Является ли этот пример процедурой, представляющей вашу фактическую проблему? Поскольку, как бы то ни было, я бы предложил вам просто объединить два запроса следующим образом: 'select count (*) from all_tables, где table_name in (select table_name from all_tables where ...);'. В противном случае существует множество примеров проблем «различного типа списка» как здесь, так и в «Переполнение стека» и через Google, которые вы можете искать самостоятельно. Тем не менее, я бы отказался от использования строки inlist, если бы были доступны другие, менее доступные sql-решения с разрезами. – Boneist
На самом деле, в моем исходном случае мне нужно использовать эту переменную во многих операторах, чтобы избежать повторяющихся дочерних запросов. –
Ii'm не следует за вами ... переменная, которая хранит несколько значений, называется коллекцией, поэтому как вы хотите, чтобы переменная хранила несколько значений, но вам не нужна коллекция? –