Консультация № 55246
13.09.2006, 06:04
0.00 руб.
0 2 1
Здравствуйте уважаемые эксперты.
Моя програмка должна выбирать в БД Oracle определенные условиями значения и затем уже по выбранным значениям выбирать данные. Приложение внизу.
Я первый раз пишу на pl/sql. Никак не могу понять причину выдаваемой ошибки.
Ошибка выдается с указанием строки с цыклом (for.....)
Если же в моей программе совсем все безнадежно - возможно у кого есть примеры подобных решений.
Буду благодарен за любую помощь.

Приложение:
SET SERVEROUTPUT ONDECLAREcursor get_sw_04410 is select* from st_adef where d_reg>=to_date(‘01.09.2006‘,‘dd/mm/yyyy‘) and cv=‘04410‘;TYPE m_table IS TABLE OF get_sw_04410%ROWTYPEINDEX BY BINARY_INTEGER;my_table m_table; i BINARY_INTEGER:=1; cursor sw__r(t st_adef.ta%type,n st_adef.na%type) is select* from st_adef,kdef where st_adef.ta=t and st_adef.na=n and st_adef.kd=kdef.kd and st_adef.df=kdef.df and st_adef.md=kdef.md ;BEGINDBMS_OUTPUT.enable; OPEN get_sw_04410;FETCH get_sw_04410 INTO my_table(i);LOOPi:=(i+1);FETCH get_sw_04410 INTO my_table(i);EXIT WHEN get_sw_04410%NOTFOUND;END LOOP;CLOSE get_sw_04410; loopFOR v_gt IN sw__r(my_table(i).ta,my_table(i).na) LOOP --здесь выдает ошибку (требуются псевдонимы для колонок......)DBMS_OUTPUT.put_line(v_gt.ta||‘ ‘||v_gt.na||‘ ‘||v_gt.du||‘ ‘||v_gt.lp||‘ ‘||v_gt.kd||‘ ‘||v_gt.ndf) ;END LOOP;DBMS_OUTPUT.put_line(‘****************************************‘);i:=(i-1);exit when i;end loop;END;

Обсуждение

Неизвестный
13.09.2006, 14:16
общий
это ответ
Здравствуйте, Slava_!
Все значительно проще, код в приложении.

Приложение:
SET SERVEROUTPUT ON;DECLARE FOR REC IN ( SELECT T.TA, T.NA FROM ST_ADEF T WHERE T.D_REG >= TO_DATE(‘01.09.2006‘, ‘dd.mm.yyyy‘) AND T.CV = ‘04410‘) LOOP FOR REC2 IN (SELECT * FROM ST_ADEF SA, KDEF K WHERE SA.TA = REC.TA AND SA.NA = REC.NA AND SA.KD = K.KD AND SA.DF = K.DF AND SA.MD = K.MD) LOOP DBMS_OUTPUT.PUT_LINE(REC2.TA || ‘ ‘ || REC2.NA || ‘ ‘ || REC2.DU || ‘ ‘ || REC2.LP || ‘ ‘ || REC2.KD || ‘ ‘ || REC2.NDF);END LOOP;DBMS_OUTPUT.PUT_LINE(‘****************************************‘);END LOOP; END;
Неизвестный
13.09.2006, 14:39
общий
Sorry, BEGIN пропустил.--==========SET SERVEROUTPUT ON;DECLAREBEGIN FOR REC IN (SELECT T.TA, T.NA FROM ST_ADEF T WHERE T.D_REG >= TO_DATE(‘01.09.2006‘, ‘dd.mm.yyyy‘) AND T.CV = ‘04410‘) LOOP FOR REC2 IN (SELECT * FROM ST_ADEF SA, KDEF K WHERE SA.TA = REC.TA AND SA.NA = REC.NA AND SA.KD = K.KD AND SA.DF = K.DF AND SA.MD = K.MD) LOOP DBMS_OUTPUT.PUT_LINE(REC2.TA || ‘ ‘ || REC2.NA || ‘ ‘ || REC2.DU || ‘ ‘ || REC2.LP || ‘ ‘ || REC2.KD || ‘ ‘ || REC2.NDF); END LOOP; DBMS_OUTPUT.PUT_LINE(‘****************************************‘); END LOOP;END;
Форма ответа