0

次のように宣言された pgsql 関数があります。

CREATE FUNCTION auth.read_session(session_id varchar) RETURNS auth.sessions

テーブル auth.sessions から 1 つのレコードを返します。を実行すると完全に正常に動作する SOCI type_conversion がありますselect * from auth.sessions where id = :id。一致するレコードが見つかった場合、および結果が NULL の場合に機能します。ただし、ステートメントを次のように変更すると:

select * from auth.read_session('invalid');

例外が発生します:

「select * from auth.read_session('invalid')」の実行中は、この型に Null 値を使用できません。

列をリストしたり、soci::indicator を渡したりしてみましたが、うまくいきません。例外は、ベース type_conversion<> から発生します。

type-conversion-traits.h には、次のようなコメントがあります。

// デフォルトの特性クラス type_conversion は、実際の変換が不要な場合に // row::get() のパススルーとして機能します。

なぜ変換が必要ないのですか? はい、私の関数はテーブルタイプ「auth.sessions」のレコードを返します。変換が開始されるように、代わりに RECORD を返す必要がありますか?

4

2 に答える 2