2016-09-06 45 views
2

在Delphi中使用FireDAC調用Postgresql函數時遇到一些小問題。 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 

但與下面的代碼調用它在德爾福:

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工作

回答

3

好了,現在我懂了工作。 看起來它需要額外的索引字段名不真正意義,因爲它只是一個返回值...

所以工作時,我改變了我的代碼如下:

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