У меня есть таблица emp (eid, ename, bossid, eloc), мое требование - написать процедуру для отображения всех сотрудников и их имени босса всех сотрудников, которые находятся в в том же месте, что и для заданных аргументов (заданного emp id). Выше запрос может быть просто решена (для Ид = 10) с использованием «с» пункта, как показано нижеИспользование предложения with в курсорах в DB2
with t (id, name, loc, bsid, bsname) as
(select a.eid, a.ename, a.eloc, b.eid, b.ename
from emp a, emp b
where a.bossid = b.eid)
select y.id, y.bsname
from t x, t y
where x.loc = y.loc and <b> x.id = 10;
но когда я пишу процедуру DB2, как показано ниже процедура не может скомпилировать с ошибкой, как «SQL0104N Неожиданный маркера» как "было найдено следующее" bsid, bsname) "."
create or replace procedure test with (
in argid varchar(100),
)
LANGUAGE SQL
COMMIT ON RETURN NO
BEGIN
for rec as (
with t (id, name, loc, bsid, bsname) as
(select a.eid, a.ename, a.eloc, b.eid, b.ename
from emp a, emp b
where a.bossid = b.eid)
select y.id, y.bsname
from t x, t y
where x.loc = y.loc and x.id = **argid**)
do
call dbms_output.put_line('ID = ' || rec.id || ', Name = ' || rec.bsname);
end for;
END