Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 在Devart实体模型中添加postgresql函数_Function_Postgresql_Devart - Fatal编程技术网

Function 在Devart实体模型中添加postgresql函数

Function 在Devart实体模型中添加postgresql函数,function,postgresql,devart,Function,Postgresql,Devart,我试图在devart实体模型中导入postgresql函数,我想返回一个“自定义”表,但我就是无法让它工作 我这样定义我的函数: CREATE OR REPLACE FUNCTION "GetJournalEntriesByVoucherId"(bigint) RETURNS SETOF record AS $BODY$ SELECT JE."JournalEntryID" JE."Amount", JE."EntryText", FROM "Journal

我试图在devart实体模型中导入postgresql函数,我想返回一个“自定义”表,但我就是无法让它工作

我这样定义我的函数:

CREATE OR REPLACE FUNCTION "GetJournalEntriesByVoucherId"(bigint)
  RETURNS SETOF record AS
$BODY$
SELECT 
    JE."JournalEntryID"
    JE."Amount",
    JE."EntryText",
FROM
    "JournalEntries" AS JE
WHERE
    JE."FK_Voucher"=$1
$BODY$
  LANGUAGE sql VOLATILE STRICT
  COST 100
  ROWS 1000;
ALTER FUNCTION getjournalentriesbyvoucherid(bigint) OWNER TO sqluser;
并使用了中第2篇文章中的步骤,但我收到了错误消息

数据读取器与指定的Model.Entity1不兼容。类型为JournalEntryID的成员在数据读取器中没有同名的对应列“


我经常很幸运地使用OUT变量来返回集合存储过程。我不知道这对您的情况是否有帮助,但您可以尝试一下。我真的不知道这是否会改变函数的工作方式或定义方式

CREATE OR REPLACE FUNCTION "GetJournalEntriesByVoucherId"(BIGINT,
    JournalEntryID OUT DATATYPE,
    Amount OUT INT,
    EntryText OUT VARCHAR,
)
RETURNS SETOF record AS
$BODY$
....
@Flimzy是正确的。
当函数返回setof记录时,从函数返回的读取器包含格式为“(field1.Value,…,fieldk.Value)”的记录,并被视为varchar。
当指定out参数时,这些参数的名称和类型会让服务器知道读卡器中的字段,并正确返回值。我们在最新的5.30.180版本中修复了此场景中的一些错误,现在可以正常工作。

具有强类型setof(CompositeType)的解决方案也是一个合适的查询。

如果直接执行SELECT查询,而不使用存储过程,该查询是否有效?是的,它返回所需的结果在定义存储过程或调用存储过程时是否出现此错误?如果在调用存储过程时,是否可以粘贴正在执行的调用存储过程的确切查询?调用存储过程时,以及我使用实体框架来调用它,所以我没有“调用查询”框架必须用查询来调用它。它改变了导入识别返回类型的方式(现在是“正确的”)但我仍然得到了数据读取器错误。有趣的是,如果我保留一个返回实体,其字段Returnvalue的类型为字符串,那么它实际上会返回对象中Returnvalue所在的行”(JournalEntryID.value、Amount.value、EntryText.value)作为一个字符串…我通过创建一个自定义类型来解决我的问题,该类型具有与查询结果相同的字段,并让函数的结果为“setof theType”,从而使数据读取器工作。如果允许的话,我会在4小时内发布答案so@plazm:如果你解决了自己的问题,你应该为你的问题创建一个答案,然后接受它。