无法调用应该 return 文本值的 Postgresql 函数
Can't call Postgresql function which should return text value
我在使用 FireDAC 调用 Delphi 中的 Postgresql 函数时遇到了一个小问题。
Postgresql 函数定义如下:
CREATE OR REPLACE FUNCTION public."pgpDecryptMe" (
todecode text
)
RETURNS text AS
$body$
DECLARE
PGPPrivate TEXT;
BEGIN
...
所以它需要一个 "text" 值和 returns 一个 "text" 值。
我可以使用长文本参数(超过 900 个字符)调用它,它 returns 在任何 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();
我在使用 FireDAC 调用 Delphi 中的 Postgresql 函数时遇到了一个小问题。 Postgresql 函数定义如下:
CREATE OR REPLACE FUNCTION public."pgpDecryptMe" (
todecode text
)
RETURNS text AS
$body$
DECLARE
PGPPrivate TEXT;
BEGIN
...
所以它需要一个 "text" 值和 returns 一个 "text" 值。 我可以使用长文本参数(超过 900 个字符)调用它,它 returns 在任何 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();