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? Я видел тот же синтаксис, возвращающий значения в том же коде, за исключением того, что он не внутри курсора. Может ли это быть проблемой?

0 ответов

Другие вопросы по тегам