SOCI, pgsql函数返回表记录- type_conversion不工作
SOCI, pgsql function returning table record - type_conversion not working
我有一个pgsql函数声明为:
CREATE FUNCTION auth.read_session(session_id varchar) RETURNS auth.sessions
返回auth.sessions表中的一条记录。我有一个SOCI type_conversion,当运行select * from auth.sessions where id = :id
。当找到匹配的记录并且结果为NULL时,它会工作。但是,当我将语句更改为:
select * from auth.read_session('invalid');
I get exception:
在执行"select * from"时,不允许为空值auth.read_session(‘无效’)"。
我尝试列出列,传递soci::指示器等。我无法使它运转。异常来自基类type_conversion<>。
在type-conversion-traits.h中有一条注释说明:
//默认trait类type_conversion,作为传递Row::get()//当不需要实际转换时。
为什么不需要转换?是的,我的函数返回表类型"auth.sessions"的记录。它是否应该返回RECORD以启动转换?
显然,唯一可以做到这一点的方法是让函数返回SETOF记录。我认为转换是不需要的,因为在我的情况下,整个结果是NULL,它不能以某种方式转换为我自己的类型。只要有结果,返回一个表类型的记录就可以。
如果一个函数被设计为总是返回一个记录,即使是空的,但仍然是一个"记录",那么它将工作。
我想你是对的。要调用这个函数,你需要返回一个QUERY、TABLE或SETOF记录。
http://www.postgresql.org/docs/9.2/static/xfunc-sql.html相关文章:
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 在 QVector<std::unique_ptr 上使用 std::find<Type>>
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- 如何解决"expected constructor, destructor, or type conversion before ‘(’ token"错误?
- "conversion from void to non scalar type string"是什么意思?
- 我收到一个" conversion from ‘std::string (*)[50]’ to non-scalar type ‘std::string’ requested"错误,似乎无法修复它
- 内存集调用位置的"error: expected constructor, destructor, or type conversion before '(' token"
- std::variant、包装类和'conversion from ... to non-scalar type ... requested'
- 专用转换函数导致"ambiguous default type conversion"错误 (c++)
- 使用 cvQueryFrame 时出现"conversion from ‘IplImage* {aka _IplImage*}’ to non-scalar type ‘cv::Mat’ reque
- 模板类编译"expected constructor, destructor, or type conversion before ‘<’ token"错误
- 错误 : "expected constructor, destructor, or type conversion before 'typedef' "
- shared_ptr : "call of an object of a class type without appropriate operator() or conversion functio
- C++编译错误"expected constructor, destructor, or type conversion before ‘class’"
- C++ 代码中的错误 "expected constructor, destructor, or type conversion before ‘(’ token" 和"no matching fun
- type conversion-从无符号short转换为字符串c++
- type conversion-c++将int转换为char+将前导零添加到char
- 函数声明错误,"expected constructor, destructor, or type conversion before ';' token"
- "error: conversion from 'int' to non-scalar type 'COORD' requested"