我正在尝试创建一个从用户表返回行的存储过程。我用 pg_ 函数从 php 调用它: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 方面。