PLSQL - 动态条件不起作用

时间:2013-11-19 22:53:17

标签: oracle dynamic plsql where-clause

在Oracle 11g开发中,我正在尝试使用我的存储过程来访问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')运行相同的过程代码时,它可以正常工作。之前,在显示所有循环迭代的DBMS输出值之后。但是上面的代码不会将任何值返回到dType,dLength。此外,DBMS输出仅在第一次在dType之前停止。这意味着,Select语句存在问题,不允许循环完成。

我们在动态访问where子句时有任何限制吗?我已经看到相同的语法在相同的代码中返回值,除了它不在游标内。这可能是个问题吗?

0 个答案:

没有答案