无法调用应返回文本值的Postgresql函数

时间:2016-09-06 06:29:11

标签: postgresql delphi firedac

使用FireDAC在Delphi中调用Postgresql函数时遇到一些问题。 Postgresql函数具有以下定义:

/credentials/store/system/domain/_/api/json

所以它期待一个"文本"值并返回"文本"值。 我可以用一个长文本参数(超过900个字符)来调用它,它会在任何sql管理工具中返回正确的值而没有任何问题。

CREATE OR REPLACE FUNCTION public."pgpDecryptMe" (
  todecode text
)
RETURNS text AS
$body$
DECLARE
  PGPPrivate TEXT;  
BEGIN
...

但是使用以下代码在Delphi中调用它:

select "pgpDecryptMe"('c1c04c030...a378624e6a659a20765') as Decrypt

给我以下错误消息:

PGQuery.SQL.Text := 'select "pgpDecryptMe"(:test) as testvalue';
PGQuery.ParamByName('test').AsString := 'c1c04c030...a378624e6a659a20765';
PGQuery.Open();

我在这里搜索并搜索但无法找到解决问题的方法。 这可能是我无法看到的非常小的东西: - (

我正在使用Delphi XE7和PostgreSQL 9.3

1 个答案:

答案 0 :(得分:3)

好的,现在我开始工作了。 看起来它需要一个额外的索引字段名称,它并不真正有意义,因为它只返回了一个值......

当我将代码更改为以下代码时,它就起作用了:

PGQuery.SQL.Text := 'select "pgpDecryptMe"(:test) as testvalue';
PGQuery.ParamByName('test').AsString := 'c1c04c030...a378624e6a659a20765';
PGQuery.IndexFieldNames := 'testvalue';
PGQuery.Open();