Я пытаюсь выполнить процедуру с 3 различными курсорами, получая данные из одной таблицы.
Первый курсор получает только коллекции, второй курсор получает счета-фактуры, третий курсор получает кредит-ноты.
create or replace procedure COMISIONCALCULO
IS
CURSOR COB IS
SELECT ASIENTOCONTABLE,
fedocoriginal2,
importedebe
FROM INFGENERAL
WHERE TIPODEASIENTO2 = 'Cobro';
cursor FACT (P1 IN VARCHAR2) is
select IDCOMPESACION,
ASIENTOCONTABLE,
FEDOCORIGINAL2,
FEVENCIMIENTO,
IDDOCORIGINAL
FROM INFGENERAL
WHERE TIPODEASIENTO2 in ('Migración de datos','Factura de cliente')
AND ASIENTOCONTABLE =P1;
CURSOR NOTAS (P1 IN VARCHAR2) IS
SELECT fecontabilizacion,
fedocoriginal,
iddocoriginal,
tipodeasiento2,
importedebe
FROM INFGENERAL
WHERE TIPODEASIENTO2 = 'Nota de crédito de cliente'
AND IDDOCORIGINAL= P1;
Я присоединяюсь к курсорам, потому что плата влияет на один или несколько счетов, и эти счета имеют одну или несколько кредитных нот.
Когда я определяю курсоры, я добавляю переменные P1.
Я хочу сохранить все данные, полученные в другой таблице, но в виде одной записи. За исключением того, что в итоговой таблице есть столбцы, отличные от исходной таблицы.
Таблица происхождения:
CREATE TABLE "INFGENERAL"
( "CLIENTE" VARCHAR2(60),
"FECONTABILIZACION" VARCHAR2(60),
"FEDOCORIGINAL" VARCHAR2(60),
"FEVENCIMIENTO" VARCHAR2(60),
"TIPODEASIENTO" VARCHAR2(60),
"ASIENTOCONTABLE" VARCHAR2(60),
"ASIENTOCONTCOM" VARCHAR2(60),
"IDCOMPESACION" VARCHAR2(60),
"IDDOCORIGINAL" VARCHAR2(60),
"REFEXTERNA" VARCHAR2(60),
"ESTADO" VARCHAR2(60),
"IDFACTURA" VARCHAR2(60),
"FECHACOMPENSACION" VARCHAR2(60),
"IDDOCREF" VARCHAR2(60),
"IMPORTEPENDIENTE" VARCHAR2(60),
"IMPORTEDEBE" VARCHAR2(60),
"IMPORTEHABER" VARCHAR2(60),
"TIPODEASIENTO2" VARCHAR2(60),
"FEDOCORIGINAL2" VARCHAR2(60),
"FEVENCIMIENTO2" VARCHAR2(60)
) ;
Финальный стол:
CREATE TABLE "INFOFINAL"
( "ASIENTOCONTABLE" VARCHAR2(60),
"FECHACOBRO" DATE,
"IMPORTECOBRO" VARCHAR2(60),
"IDCOMPESACION" VARCHAR2(60),
"IDDOCORIGINAL" VARCHAR2(60),
"FECHAORIGFACT" DATE,
"FECHAVENFACT" DATE,
"IMPORTEHABERNOTA" VARCHAR2(60)
) ;
Проблема в том, что когда я пытаюсь запустить процедуру, она помечает меня
"не достаточно значений. Компиляция не удалась"
Эта ошибка отмечена в строках вставки.
BEGIN
FOR I IN COB LOOP
INSERT INTO INFOFINAL
VALUES (I.ASIENTOCONTABLE, I.FECHACOBRO, I.IMPORTECOBRO);
FOR J IN FACT(I.ASIENTOCONTABLE) LOOP
INSERT INTO INFOFINAL
VALUES(J.IDCOMPESACION,J.IDDOCORIGINAL, J.FECHAORIGFACT, J.FECHAVENFACT);
FOR H IN NOTAS(J.IDDOCORIGINAL) LOOP
INSERT INTO INFOFINAL
VALUES(H.IMPORTEHABERNOTA);
CNOTA:= CNOTA + 1;
END LOOP;
CFACT := CFACT + 1;
END LOOP;
CCOB:= CCOB + 1;
END LOOP;
END;
Вопрос здесь в том, как вставить выбранные данные из исходной таблицы в итоговую таблицу, если они имеют разные столбцы? Должны ли столбцы иметь одинаковое имя? Могу ли я вставить вкладыш только один раз?
Пожалуйста, помогите.