【发布时间】:2021-05-05 14:55:26
【问题描述】:
我使用 Oracle 数据库版本 19.3.0,它可以处理超过 30 个字符的参数名称。如果我在 Delphi FireDAC 过程“ExecProc”中执行以调用 SQL 中的存储过程,Delphi 会抛出“ORA-01036:非法变量名称/编号”异常并且该过程的调用过早终止,因为一个参数名称长于 30 个字符。 是否有一些 FireDAC 属性可以在不更改参数名称长度的情况下更改此行为?
“C:\Program Files (x86)\Embarcadero\Studio\19.0\source\data\firedac\FireDAC.Phys.Oracle.pas”
【问题讨论】:
-
ORA-01036 : illegal Variable name/number来自 Oracle 而不是 Delphi。通常是因为尝试在不使用EXECUTE IMMEDIATE的情况下进行 DDL。 -
你知道Oracle的“兼容”参数设置成什么吗?
-
运行 select * from database_compatible_level; 如果结果级别为 12.2 或更高,那么您的数据库支持 128 字节的变量名称。不幸的是,许多 DBA 都不愿意设置它(尽管是默认设置)。注意:这并不像看起来那么遥远。 Oracle 改变了分配版本号的方式,从 12x 直接变为 18x。
-
兼容级别没有问题,compatible=19.0.0。我在 FireDAC.Phys.Oracle 单元中发现了一个 if 语句,如果长度大于 30 个字符,则参数名称长度会缩短(见上文)。我不明白为什么 FireDAC 不使用 128 个字符。
-
该代码仍在 10.4.2 中。看起来 Firedac 尚未更新以完全支持更长的名称,正如已经提到的 Oracle 12.2 附带的(大约 2017/2018 时间框架)。