0

pqxxからオーバーロードされたリモートプロシージャを呼び出す方法は?

手順例:

CREATE OR REPLACE FUNCTION foo(str text) RETURNS text AS $$
BEGIN    
    RETURN 'text';
END;
$$ LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION foo(num integer) RETURNS text AS $$
BEGIN    
    RETURN 'int';
END;
$$ LANGUAGE plpgsql;

C++ コード:

pqxx::connection connection(/* credentials */);

std::string query_mark = "test_procedure_mark";
connection.prepare(query_mark, "SELECT foo($1);");

//first case
pqxx::work work(connection);
pqxx::result res = work.prepared(query_mark)("text").exec();
work.commit();
std::string ans = res[0][0].as(std::string(""));  //ans here "text"

//second case
pqxx::work work(connection);
pqxx::result res = work.prepared(query_mark)(1).exec();
work.commit();
std::string ans = res[0][0].as(std::string("")); //ans here "text"

C++コードから「foo(num integer)」を呼び出すにはどうすればよいですか? 例では、"ans" 内の "int" という望ましい結果が得られます。

psql.exe の出力:

SELECT foo(1); 「int」を返します

SELECT foo("テスト"); 「テキスト」を返します

前もって感謝します。

4

1 に答える 1