Предположим, что две таблицы структурированы следующим образом и имеют отношение строк 1: 1 друг к другу:
create table table1 (
id number(9) primary key
,name varchar2(100)
);
create table table2 (
id number(9) primary key
,name varchar2(100)
);
Я хотел бы создать курсор следующим образом:
declare
cursor c1 is
select t1.*
,t2.*
from table1 t1
join table2 t2 on (t2.id = t1.id);
begin
for r in c1 loop
dbms_output.put_line(r.name); -- here I want to display the table1 name value
end loop;
end;
но, конечно, я получаю
ORA-06550: строка 8, столбец 3: PLS-00402: в списке SELECT требуется псевдоним
курсора, чтобы избежать повторяющихся имен столбцов ORA-06550: строка 8, столбец 3:
PL / SQL: оператор игнорируется
Я четко понимаю, что получаю эту ошибку, потому что имя используется в обеих таблицах, и поэтому курсор не знает, что мне дать.
Я пытаюсь выяснить, существует ли какой-либо способ наложить псевдоним на целую запись в курсоре, чтобы получить эквивалент этого - также не работающего - кода:
declare
cursor c1 is
select t1.* rec1
,t2.* rec2
from table1 t1
join table2 t2 on (t2.id = t1.id);
begin
for r in c1 loop
dbms_output.put_line(r.rec1.name); -- have inserted incorrect "rec1" here
end loop;
end;
Это теоретически может быть расширено для работы с таблицами и записями t1, t2, t3 ... tn.
Для контекста моя цель здесь - уменьшить количество определений составных статических записей, необходимых для отдельных курсоров, объединяющих различные таблицы.
Любая обратная связь будет приветствоваться.