Проблема с курсором + insert

Serge_Wolf
Дата: 10.12.2007 15:47:51
Здравствуйте!
Есть необходимость после выборки данных с помощью курсора, помещать (insert-ом) данные в Oracle-ую таблицу. Но выдает ошибку. Помогите, please. Ругается на INSERT

CREATE OR REPLACE PROCEDURE PREPARE_UNLOAD
IS
CURSOR cFirstGroup IS
select d.char_val1 bl_series, a.num bl_number,
a.act_dt bl_date, h.full_name bl_supplier
from DEVMGR.bnp_blank_num a
left outer join insr_refs b on a.state_id=b.id
left outer join bnp_blanks c on a.order_num=c.order_num
left outer join insr_refs d on c.ser_id=d.id
left outer join insr_refs e on c.vid_id=e.id
left outer join bnp_mat f on f.order_num=c.order_num
left outer join bnp_order_material g on g.id=f.omat_id
left outer join company h on g.comp_no=h.no
order by b.char_val1;

rFirstGroup cFirstGroup%ROWTYPE;


BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE DEVMGR.UNLOAD_BLANKS';


FOR rFirstGroup IN cFirstGroup LOOP

-- TRUNCATE отрабатывает правильно, а INSERT нет (выдает: Употребление столбца здесь недопустимо)

EXECUTE IMMEDIATE 'INSERT INTO DEVMGR.UNLOAD_BLANKS
(id, mid, bl_series, bl_number, bl_type, bl_state, bl_contractnr, bl_insurer, bl_supplier)
VALUES (SEQ1_UNLOAD_BLANKS.NEXTVAL, ''1'', rFirstGroup.bl_series, rFirstGroup.bl_number, rFirstGroup.bl_type,
rFirstGroup.bl_state, ''00900000'', rFirstGroup.bl_date, rFirstGroup.bl_supplier)';


END LOOP;
END PREPARE_UNLOAD;
Тифа
Дата: 10.12.2007 15:50:07
хм а зачем динамика?
Тифа
Дата: 10.12.2007 15:50:51
ну и как ругается тоже было бы интересно
privet
Дата: 10.12.2007 15:52:01
зачем EXECUTE IMMEDIATE
просто инсерт лучше и понятней где ошибка будет
Elic
Дата: 10.12.2007 15:52:12
В уцелом - ужас, а в частности Use bind variables
Serge_Wolf
Дата: 10.12.2007 16:02:57
TRUNCATE отрабатывает правильно, а INSERT нет (выдает: Употребление столбца здесь недопустимо)
SimonInBlues
Дата: 10.12.2007 21:21:11
лажа какая-то....
зачем тебе курсор открывать и в нем делать построчный инсерт? делаешь сразу инсерт в нужную таблицу по тому селекту, который указан в курсоре, и все. и никакого динамического скл (разьве только для truncate)