Я использую этот код, чтобы посмотреть, подойдет ли он для процедуры. Я хочу иметь возможность создать процедуру, в которой я могу решить, какие данные извлекать, введя время ('jan-2020'), в которое они записаны, а также решить, в какую таблицу я хочу поместить данные (january_2020 ). я получаю сообщение об ошибке, что таблица не может использоваться в этом контексте. Что мне нужно изменить в коде, чтобы он находился в правильном контексте?
Это потому, что я использую динамический c sql в al oop, который требует выполнения l oop положить данные в таблицу? или это потому, что я использую% rowtype в качестве атрибута для таблицы ALL_DATA для создания собственных столбцов? Если это что-то из перечисленного, что мне делать, чтобы его изменить?
DECLARE
time_v varchar2(9);
table_v varchar2(200);
sql_code varchar2(300);
TYPE Copied_Table IS TABLE OF Gastos%ROWTYPE;
All_Data Copied_Table;
BEGIN
time_v := 'jan-2020';
SELECT *
BULK COLLECT INTO All_Data FROM Gastos
Where TO_CHAR(DATE_, 'MON-YYYY') = UPPER(time_v);
FOR I in All_Data.First .. All_Data.Last LOOP
sql_code := 'INSERT INTO :table_v ( DATE_, DESCRIPTION, ORIGINAL_DESCRIPTION, AMOUNT,
TRANSACTION_TYPE, CATEGORY, ACCOUNT_NAME)
Values ( ALL_Data(i).date_, ALL_Data(i).description, ALL_Data(i).original_description,
ALL_Data(i).amount, ALL_Data(i).transaction_type, ALL_Data(i).category, ALL_Data(i).account_name)';
table_v := january_2020;
execute immediate sql_code
using table_v;
END LOOP;
END upload_monthly_expenses;