PLSQL - динамическое условие где не работает
В Oracle 11g Development я пытаюсь, чтобы моя хранимая процедура получила доступ к типу данных Table.Column. Итак, структура выглядит так:
dType ALL_TAB_COLUMNS.data_type%Type;
dLength ALL_TAB_COLUMNS.data_length%Type;
field2 Varchar2(100); --defined as byte
field1 Varchar2(100); --defined as byte
OPEN field_cursor(AuditArray(i).Name);
LOOP
FETCH field_cursor into field1, field2, field3;
exit when field_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('Before SQL, dType = ' || dType);
SELECT data_type, data_length into dtype, dLength from all_tab_columns
where TABLE_NAME = field1 AND Column_Name = Field2;
--further logic based on dType, dLength
DBMS_OUTPUT.PUT_LINE('After SQL, dType = ' || dType);
end LOOP;
close field_cursor;
Когда я запускаю тот же код процедуры, используя жестко закодированные значения, такие как Column_Name = 'someValue', он работает нормально. До, После СУБД Выходное значение отображается для всех итераций цикла. Но приведенный выше код не возвращает никакого значения в dType, dLength. Кроме того, выход СУБД останавливается только перед типом dType только в первый раз. Это означает, что операторы Select имеют проблему и не позволяют завершить цикл.
Есть ли у нас какие-либо ограничения в динамическом доступе к предложению where? Я видел тот же синтаксис, возвращающий значения в том же коде, за исключением того, что он не внутри курсора. Может ли это быть проблемой?