ユーザー テーブルから行を返すストアド プロシージャを作成しようとしています。私は pg_ functions:pg_prepare($conn, $id, 'SELECT user_read_all()')
とpg_execute($conn, $id, array())
. 悲しいことに、私は mysql のためだけに PDO を持っていません。
このコードで試しましたが、複数の問題があります。
CREATE OR REPLACE FUNCTION user_read_all()
RETURNS table(user_id INT, user_name VARCHAR, user_email VARCHAR)
AS
$BODY$
BEGIN
return query SELECT
user_id, user_name, user_email
FROM
user;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
pg_fetch により、結果はarray('test' => string(...))
代わりにarray(user_id => 1, user_name => '', user_email => '')
. user_
プレフィックスも切り取りたいのですが、これで構文エラーが発生しました:
CREATE OR REPLACE FUNCTION user_read_all()
RETURNS table(id INT, name VARCHAR, email VARCHAR)
AS
$BODY$
BEGIN
return query SELECT
user_id as id, user_name as name, user_email as email
FROM
user;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
;-(
plpgsqlでこれを行うことは可能ですか?
私の目標は、ストアド プロシージャのみのインターフェイスを作成することですが、深刻な疑問があります... mysql を使用すると、これは非常に簡単ですが、mysql は pgsql と比較して機能が制限されています...
CREATE PROCEDURE `user_read_all`()
BEGIN
SELECT `user_id` AS `id`, `user_name` AS `name`, `user_email` AS `email` FROM `user`
ORDER BY `user_id` DESC;
END;
問題は、ストアド プロシージャと php の結果セットを修正する方法です。
解決
CREATE FUNCTION test ()
RETURNS TABLE (id INT, name VARCHAR, email VARCHAR)
AS
$BODY$
BEGIN
return QUERY SELECT
"user".user_id, "user".user_name, "user".user_email
FROM
"user";
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
と
SELECT * FROM test();
php側。