Код:
lc_tab1_col1 VARCHAR2(4000);
lc_tab1_col2 VARCHAR2(4000);
lc_tab2_col2 VARCHAR2(4000);
lc_tab2_col2 VARCHAR2(4000);
CURSOR my_cursor IS select col1, col2 from tab1;
[...]
OPEN my_cursor;
LOOP
FETCH my_cursor INTO lc_tab1_col1, lc_tab1_col2;
EXIT WHEN my_cursor%NOTFOUND;
SELECT lc_tab1_col2.col1, lc_tab1_col2.col2 INTO lc_tab2_col2, lc_tab2_col2 FROM lc_tab1_col2 WHERE lc_tab1_col2.col3 = lc_tab1_col1;
[...]
END LOOP;
CLOSE my_cursor;
Привет, ребята,
Я пытаюсь заставить приведенный выше код работать.У меня проблема в том, что оператор SELECT INTO, очевидно, не поддерживает использование переменной (в этом случае lc_tab1_col2
) в качестве имени таблицы в предложении FROM оператора.
При компиляции пакета ORA-000942 выбрасывается (таблица или представление не существует), что говорит мне, что переменная интерпретируется напрямую, а не заменяется и интерпретируется во время выполнения.
Я не могу придумать обходной путь, любые идеио том, как это исправить?
Еще немного информации: lc_tab1_col2
содержит имя таблицы в базе данных, тогда как lc_tab1_col1
содержит идентификатор.
Этот идентификатор присутствует во всех таблицах, которые могут содержаться в lc_tab1_col2
(отсюда и предложение WHERE).
Помимо идентификатора есть еще два столбца (lc_tab1_col2.col1
и lc_tab1_col2.col2
), которые присутствуют во всех этих таблицах, но отсутствуют в tab1
.Мне нужно выбрать эти два значения для работы с ними внутри цикла.
Поскольку нужно учитывать много таблиц, мне нужно, чтобы этот оператор SELECT INTO был динамическим.Было бы невозможно проанализировать таблицы один за другим.Ждем всех, кто поделится умной идеей для преодоления этой проблемы :) Заранее спасибо!