我需要使用PLSQL变量来保存三个以上的值。我不想收集或光标。以下是要求,v_cnt需要为9而不是' 0'。请帮助解决这个问题。
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整个值被视为单值。有没有办法将它作为IN运算符内的单独9值传递。
答案 0 :(得分:0)
鉴于你将在多个sql语句中使用第一个查询返回的值(假设它们不能以某种方式组合),我会创建一个global temporary table (GTT),例如:
CREATE GLOBAL TEMPORARY TABLE gtt_reuse_table_names (table_name varchar2(30))
ON COMMIT DELETE ROWS;
然后在您的过程中的查询中引用它,例如:
declare
v_cnt integer;
begin
insert into gtt_reuse_table_names (table_name)
SELECT table_name
FROM ALL_TABLES where owner in 'SYS'
AND rownum<10;
select count(*)
into v_cnt
from all_tables
where table_name in (gtt_reuse_table_names);
...
end;
/
答案 1 :(得分:0)
我从各种搜索中得到了答案,
我使用以下声明,
select count(*) into v_cnt from all_tables where ','||v_column||',' like '%,'||table_name||',%' ;
然后返回'9'。
谢谢。