У меня есть следующая процедура, которая не компилируется правильно, потому что она относится к несуществующим объектам (таблица не существует) Вот только часть кода (я использовал общие имена для таблиц и столбцов):Dynamic SQL - ORACLE
DECLARE
C INTEGER := 0;
BEGIN
SELECT COUNT(1) INTO C FROM USER_TABLES WHERE TABLE_NAME = 'MY_TABLE';
IF C > 0 THEN
DECLARE
CURSOR c_maps IS SELECT COLUM_NAME1, COLUM_NAME2 FROM MY_TABLE WHERE ACTIVE = 1;
BEGIN
FOR prec IN c_maps LOOP
some code...;
END LOOP;
EXECUTE IMMEDIATE 'some code..';
END;
END IF;
END;
/
Я не знаю, как писать это заявление динамически, так как таблица «mY_TABLE» не существует:
CURSOR c_maps IS SELECT COLUM_NAME1, COLUM_NAME2 FROM MY_TABLE WHERE ACTIVE =1;
Я также попытался написать это нравится:
CURSOR c_maps IS SELECT COLUM_NAME1, COLUM_NAME2 FROM (Select 'MY_TABLE' from dual) WHERE ACTIVE = 1;
Однако, чем он относится к столбцу «АКТИВ», который также не существует во время компиляции ... Можно написать всю процедуру внутри «выполнить немедленный» - блок? Я пробовал разные варианты, однако без успеха
курсор, который строит список столбцов, должен быть частью динамического выполнения. два слоя динамического исполнения вложены ... кошмар, чтобы понять и отладить. действительно ли нет способа кодировать существующую схему? – dlatikay