我在使用 FireDAC 在 Delphi 中调用 Postgresql 函数时遇到了一些问题。 Postgresql函数的定义如下:
CREATE OR REPLACE FUNCTION public."pgpDecryptMe" (
todecode text
)
RETURNS text AS
$body$
DECLARE
PGPPrivate TEXT;
BEGIN
...
因此它需要一个“文本”值并返回一个“文本”值。 我可以使用长文本参数(超过 900 个字符)调用它,并且它在任何 sql 管理工具中返回正确的值,没有任何问题。
select "pgpDecryptMe"('c1c04c030...a378624e6a659a20765') as Decrypt
但在 Delphi 中使用以下代码调用它:
PGQuery.SQL.Text := 'select "pgpDecryptMe"(:test) as testvalue';
PGQuery.ParamByName('test').AsString := 'c1c04c030...a378624e6a659a20765';
PGQuery.Open();
给我以下错误消息:
[FireDAC][DatS]-2. Object [id] is not found
我在这里进行了谷歌搜索,但找不到任何解决该问题的方法。 这可能是一些非常小的我看不到的东西:-(
我正在使用 Delphi XE7 和 PostgreSQL 9.3
最佳答案
好的,现在我可以正常工作了。 看起来它需要一个额外的索引字段名称,这实际上没有意义,因为它只返回一个值......
因此,当我将代码更改为以下内容时,它就起作用了:
PGQuery.SQL.Text := 'select "pgpDecryptMe"(:test) as testvalue';
PGQuery.ParamByName('test').AsString := 'c1c04c030...a378624e6a659a20765';
PGQuery.IndexFieldNames := 'testvalue';
PGQuery.Open();
关于postgresql - 无法调用应返回文本值的 Postgresql 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39341966/