Я пытаюсь создать массивную вставку из «временного файла», поэтому я использую курсор для изменения некоторых значений. Я добавил поле на основе столбца row_number (), чтобы получить следующий номер, созданный для каждой записи. Эта запись и мой «номер лота» будут представлять собой новое значение лота (например, для лота «Альфа» у меня будет «Альфа01», «Альфа02», «Альфа03» и т. Д.).
Но я не понимаюне знаю, как удалить этот дополнительный столбец после внесения изменений, поэтому у меня не возникает проблем с процессом вставки (в моем курсоре теперь больше столбцов, чем в исходном файле).
текущий код гласит:
SET SERVEROUTPUT ON;
DECLARE
-- Array of lot numbers & how I want to name them --
TYPE VARR_LOTN IS TABLE OF VARCHAR(8);
VAR_LOTN VARR_LOTN;
TOTAL INTEGER;
-- Application-relevant variables --
MAX_VAL NUMBER := &&Maximum_Values.;
VAR_MMCU VARCHAR(12) := '&&Branch.';
VAR_ITM NUMBER := '&&Item.';
VAR_DATE NUMBER := TO_CHAR(SYSDATE, 'YYYYDDD') - 1900000;
VAR_TIME NUMBER := TO_CHAR(SYSDATE, 'HH24MISS');
-- This section is the cursor I'm creating --
-- Note the Row_Number() aggregate function, which I want to use as counter --
CURSOR VAR_LOTN_C IS
SELECT LPAD(ROW_NUMBER() OVER(ORDER BY IOITM), 2, 0) IOID, T1.* FROM TESTDTA.F4108 T1
WHERE IOITM = VAR_ITM AND IOLOTS = ' ' AND TRIM(IOMCU) = VAR_MMCU AND IOMMEJ >= TO_CHAR(SYSDATE + 365, 'YYYYDDD') - 1900000 AND ROWNUM <= MAX_VAL;
-- I'm having somre trouble understanding how the %RowType attribute works, & which others are available --
VARC_LOTN VAR_LOTN_C%ROWTYPE;
BEGIN
VAR_LOTN := VARR_LOTN('Alpha', 'Beta', 'Gamma', 'Delta');
TOTAL := VAR_LOTN.COUNT;
FOR T1 IN 1 .. TOTAL
LOOP
-- I'm fetching the cursor into the "variable" --
OPEN VAR_LOTN_C;
FETCH VAR_LOTN_C INTO VARC_LOTN;
CLOSE VAR_LOTN_C;
-- This is why I added column IOID, to have records as 'Alpha01', 'Alpha02', &c --
VARC_LOTN.IOLOTN := T1 || VARC_LOTN.IOID;
-- Other relevant variable changes... --
VARC_LOTN.IODOCO := 0;
VARC_LOTN.IODCTO := NULL;
-- UA0
VARC_LOTN.IOUA01 := VAR_DATE;
VARC_LOTN.IOUA02 := 0;
VARC_LOTN.IOUA03 := 0;
VARC_LOTN.IOUA04 := VAR_DATE;
VARC_LOTN.IOUA05 := 0;
VARC_LOTN.IOUA06 := VAR_DATE;
-- UB0
VARC_LOTN.IOUB01 := 0;
VARC_LOTN.IOUB02 := 0;
VARC_LOTN.IOUB03 := 0;
VARC_LOTN.IOUB04 := 0;
VARC_LOTN.IOUB05 := 0;
VARC_LOTN.IOUB06 := 0;
-- AUDIT
VARC_LOTN.IOUSER := 'Me';
VARC_LOTN.IOPID := 'SQL';
VARC_LOTN.IOUPMJ := VAR_DATE;
VARC_LOTN.IOTDAY := VAR_TIME;
-- ***In here is where I need to get rid of column IOID, so I can insert the batch I just created into the table. I cannot insert it now because this column does not exist in table F4108, I created it only for my own numbering.-*** --
{{{ALTER TABLE VARC_LOTN DROP COLUMN IOID; or something like that...}}}
-- Here I insert the final fetch --
INSERT INTO TESTDTA.F4108
VALUES VARC_LOTN;
END LOOP;
END;
Я не вижу возможности сделать эти изменения, и другие варианты, которые приходят мне в голову, не очень удобны для пользователя (ввод всех столбцов один за другим...).
Вы знаете, возможно ли это?
Спасибо !!!