我正在尝试通过 在sql中运行以下块脚本。由于块不接受参数,我试图事先准备它。dosqlxdofunc LinkSessionUser(sessionId string, userId string, result *bool) error { db := database.GetDB() statement, err := db.Preparex(` do $$ begin if (exists(select id from "session" where id = $1) and exists(select id from "user" where id = $2)) then return insert into "session_user" (session_id, user_id) values ($1, $2) on conflict do nothing; else raise exception "Either session(id=%) or user(id=%) doesn't exist" $1, $2; end if; end $$; `) if err != nil { return err } return statement.Get(result, sessionId, userId)}但是当我运行它时,我得到了以下错误:sql: expected 0 arguments, got 2如何解决此问题?我应该在sql中替换吗?Preparexprepare
1 回答
森林海
TA贡献2011条经验 获得超2个赞
“我应该使用备品来替换 sql 中的备战吗?”-- 是的,但是您遇到的问题与 或语言本身无关。Preparex
Go
命令的代码块是 ,此字符串文本不会在命令执行期间被解析,也没有理由被解析,这就是为什么生成的预准备语句将没有定义的参数。正如您正确指出的那样,不支持输入参数,但是尝试通过包装在准备好的语句中来绕过该限制将根本不会产生您希望的结果。DO
string literal
PREPARE
DO
DO
如果需要有条件地执行参数化 SQL 语句,则应使用该命令并显式执行生成的函数。CREATE FUNCTION
- 1 回答
- 0 关注
- 86 浏览
添加回答
举报
0/150
提交
取消