首页 > 解决方案 > FireDAC 无法处理超过 30 个字符的参数名称

问题描述

我使用 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” FireDAC.Phys.Oracle

标签: sqloracledelphifiredac

解决方案


解决方案:将 pbByName 更改为 pbByNumber

procedure TForm5.Button1Click(Sender: TObject); begin
FDStoredProc1.ParamBindMode := pbByNumber;
FDStoredProc1.FetchOptions.Items := [fiBlobs, fiDetails]; //This disables automatic fetching of parameters from server
FDStoredProc1.Params.CreateParam(ftString,'Averylongparamternamethathopefullyislongerthanthirtycharacters',ptInput);
FDStoredProc1.params.CreateParam(ftString,'outparam',ptOutput);
FDStoredProc1.Params[0].AsString := 'Hello World';  

FDStoredProc1.ExecProc; 

ShowMessage(FDStoredProc1.Params[1].AsString);
end;

推荐阅读