आपको dynamic SQL
की आवश्यकता है इसके लिए और Oracle के साथ हम execute immediate
. का उपयोग कर सकते हैं ऐसा करने के लिए।
declare
type array_t is table of varchar2(10);
array array_t := array_t();
lo_stmt varchar2(2000);
begin
select distinct kind
bulk collect into array
from all_data;
for i in 1..array.count loop
--dbms_output.put_line(array(i));
lo_stmt :=
'create table '||array(i)||'_data '||
'as '||
'select kind,time_period,amount '||
' from all_data '||
' where kind = '''||array(i)||'''';
--dbms_output.put_line(lo_stmt);
execute immediate lo_stmt;
end loop;
end;
/
डेमो यहां देखा जा सकता है
या एक ही कथन के साथ
declare
type array_t is table of varchar2(4000);
array array_t := array_t();
lo_stmt varchar2(2000);
begin
select distinct 'create table '||kind||'_data '||
'as '||
'select kind,time_period,amount '||
'from all_data '||
'where kind = '''||kind||''''
bulk collect into array
from all_data;
for i in 1..array.count loop
--dbms_output.put_line(array(i));
execute immediate array(i);
end loop;
end;
/
यहां भी काम करता है