, bunun yerine bir ref imleç kullanmak zorunda. Bu tabloların bazı ortak sütun adları vardır, iç döngüde yalnızca bu sütunlara erişebilirsiniz, bu benim yukarıda yazdığımda yazdığım şeydir. Sonuç türü iç döngüde aynı olmalıdır. İşte
create table froc_a(id number, name varchar2(10), row_added date);
insert into froc_a values (1, '1', sysdate);
insert into froc_a values (2, '2', sysdate - 2);
insert into froc_a values (4, '4', sysdate - 4);
create table froc_b(id number, name2 varchar2(10), row_added date);
insert into froc_b values (1, 'b1', sysdate);
insert into froc_b values (2, 'b2', sysdate - 2);
insert into froc_b values (4, 'b4', sysdate - 4);
create table froc_c(id number, txt varchar2(10), row_added date);
insert into froc_c values (1, 'c1', sysdate);
insert into froc_c values (2, 'c2', sysdate - 2);
insert into froc_c values (4, 'c4', sysdate - 4);
yazmak nasıl bir ilk yaklaşımdır:
declare
TYPE curtype IS REF CURSOR;
l_cursor curtype;
l_param_id number;
l_id number;
l_val varchar2(100);
begin
l_param_id := 1;
-- Loop over your table names
for l_rec in (with tabnames(name) as
(select 'froc_a'
from dual
union all
select 'froc_b'
from dual
union all
select 'froc_c'
from dual)
select * from tabnames) loop
dbms_output.put_line(l_rec.name);
-- Open cursor for current table
open l_cursor for 'select id, row_added from ' || l_rec.name || ' where id = :1'
using l_param_id;
-- Loop over rows of current table
loop
fetch l_cursor
into l_id, l_val;
exit when l_cursor%notfound;
dbms_output.put_line(l_id || ', ' || l_val);
end loop;
end loop;
end;
Çıktı:
froc_a
1, 06-APR-16
froc_b
1, 06-APR-16
froc_c
1, 06-APR-16
ve 'için loop' yapılması gerekenler istiyorsun? Seçilen satırlarla (sütunlar) ortak bir şey olmalı mı? –
@Frank Bu tabloların her birine ait verilere ihtiyacım var –
Verilerinde bir imleci kullanmanın neredeyse hiç gerekmediğini biliyor muydunuz, çünkü bu satır-satır-mantığı düz SQL kullanarak yeniden yazabilirsin? – dnoeth