[英]Go MySQL stored procedure cannot return result set
如果我運行下面的代碼,但用"SELECT * FROM User LIMIT 1"
替換“CALL”,我會得到一個用戶。 如果我切換到調用存儲過程,我會不斷收到此錯誤:
panic: Error 1312: PROCEDURE MobiFit_Dev.User_ByEmail can't return a result set in the given context [recovered]
panic: Error 1312: PROCEDURE MobiFit_Dev.User_ByEmail can't return a result set in the given context
我如何呼叫我的 SP?
這是我的 SP:
DELIMITER $$
USE `MobiFit_Dev`$$
DROP PROCEDURE IF EXISTS `User_ByEmail`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `User_ByEmail`(pEmail VARCHAR(250))
BEGIN
SELECT
*
FROM
`User`
WHERE `Email` = pEmail ;
END$$
DELIMITER ;
包實體
import (
"database/sql"
"fmt"
"github.com/go-sql-driver/mysql"
"mobifit/db"
// "time"
)
const (
Male = "Male"
Female = "Female"
)
type User struct {
Id sql.NullInt64
Email sql.NullString
HashedPassword sql.NullString
RoleId sql.NullInt64
FirstName sql.NullString
LastName sql.NullString
Gender sql.NullString
DateOfBirth mysql.NullTime
Height sql.NullFloat64
CurrentWeight sql.NullFloat64
CreatedAt mysql.NullTime
ConfirmedAt mysql.NullTime
LastActivityAt mysql.NullTime
DeletedAt mysql.NullTime
}
func UserByEmail(email string) *User {
db := db.DB()
u := new(User)
rows, err := db.Query("CALL User_ByEmail(?)", email) << A SELECT *... works but this doesn't
if err != nil {
panic(err)
}
fmt.Println(rows.Columns())
for rows.Next() {
if err := rows.Scan(
&u.Id,
&u.Email,
&u.HashedPassword,
&u.RoleId,
&u.FirstName,
&u.LastName,
&u.Gender,
&u.DateOfBirth,
&u.Height,
&u.CurrentWeight,
&u.CreatedAt,
&u.ConfirmedAt,
&u.LastActivityAt,
&u.DeletedAt); err != nil {
panic(err)
}
}
if err := rows.Err(); err != nil {
panic(err)
}
fmt.Println(u)
return u
}
使用 MySQL,您當前不能調用存儲過程,也不能一次執行多個語句。
嘗試使用單引號。
像這樣
CALL User_ByEmail('?');
當輸入參數的類型為VARCHAR
,您應該始終在值周圍使用單引號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.