Go SQLX sqlx.DB Get("sql_function") 没有 return 任何值
Go SQLX sqlx.DB Get("sql_function") does not return any value
这是我的功能:
func (a *AirlinesRepository) Get(id int) *models.Airline {
airline := models.Airline{}
a.DB.Get(&airline, "SELECT * FROM fn_airlines_getby_id(?)", id)
return &airline
}
执行 DB.Get 后,航空公司将所有属性设置为零值,而不是用 sql 函数结果填充。 我也试过“SELECT fn_airlines_getby_id(?)”和“fn_airlines_getby_id(?)”
航空公司具有属性:
type Airline struct {
Id int64 `db:"id"`
Name string `db:"name"`
}
而函数如下:
CREATE OR REPLACE FUNCTION fn_airlines_getby_id(p_id INT)
RETURNS TABLE (id INT, name VARCHAR) AS
$$
BEGIN
RETURN QUERY
SELECT a.id AS id, a.name AS name FROM airlines as a WHERE a.id = p_id;
END
$$ LANGUAGE plpgsql;
更新:
查看 Postgres 的日志,我发现了下一个:
ERROR: syntax error at or near ")" at character 30
STATEMENT: SELECT fn_airlines_getby_id(?)
看来 sqlx
没有解析应该代替 ?
的值(它适用于正常查询)
这是一个 Postgres 数据库并且该函数存在。
使用 Postgres 的参数占位符代替 sqlx 占位符。
变化自
SELECT fn_airlines_getby_id(?)
收件人:
SELECT * FROM fn_airlines_getby_id()
这是我的功能:
func (a *AirlinesRepository) Get(id int) *models.Airline {
airline := models.Airline{}
a.DB.Get(&airline, "SELECT * FROM fn_airlines_getby_id(?)", id)
return &airline
}
执行 DB.Get 后,航空公司将所有属性设置为零值,而不是用 sql 函数结果填充。 我也试过“SELECT fn_airlines_getby_id(?)”和“fn_airlines_getby_id(?)”
航空公司具有属性:
type Airline struct {
Id int64 `db:"id"`
Name string `db:"name"`
}
而函数如下:
CREATE OR REPLACE FUNCTION fn_airlines_getby_id(p_id INT)
RETURNS TABLE (id INT, name VARCHAR) AS
$$
BEGIN
RETURN QUERY
SELECT a.id AS id, a.name AS name FROM airlines as a WHERE a.id = p_id;
END
$$ LANGUAGE plpgsql;
更新: 查看 Postgres 的日志,我发现了下一个:
ERROR: syntax error at or near ")" at character 30
STATEMENT: SELECT fn_airlines_getby_id(?)
看来 sqlx
没有解析应该代替 ?
的值(它适用于正常查询)
这是一个 Postgres 数据库并且该函数存在。
使用 Postgres 的参数占位符代替 sqlx 占位符。 变化自
SELECT fn_airlines_getby_id(?)
收件人:
SELECT * FROM fn_airlines_getby_id()