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

标签 postgresql delphi firedac

我在使用 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/

相关文章:

Delphi:如何以请求的宽度和行数绘制一些文本,并以省略号结尾?

delphi - 如何显示禁用的 TDBEdit 的提示?

mysql - Delphi XE5 FireDAC 错误 : Cannot load vendor library [libmysql. dll 或 libmysqld.dll]

postgresql - 仅将更新的行发送给客户端

postgresql - 从 Postgres 链接到 Access 2010 的表上的字段不会成为备忘录?

sql - Django - SQL 批量 get_or_create 可能吗?

delphi - 在 Delphi 中,有一种使用 FireDAC 备份和恢复数据库的方法

sql - Postgresql函数,结果集到变量中

delphi - 无法在字符串中使用撇号

postgresql - 在 Delphi 上使用 FireDAC 从 sql 表中获取文本 [] 值