1. 程式人生 > >【MYSQL】折騰了半天的儲存過程異常錯誤

【MYSQL】折騰了半天的儲存過程異常錯誤

昨天碰到了一個儲存過程出錯,但是mysqlapi的QUERY並不返回錯誤的問題。
後來才知道,呼叫儲存過程,會返回一個呼叫情況的結果集,也就是最後一個結果集。如果前面有別的結果集,query會返回成功,當next_result返回>0的值時,就表示呼叫情況結果集出現錯誤,這時用errno和error就可以獲取到這個錯誤了。
折騰了半天,連mysql命令列工具的程式碼我都拉下來看了,結合API文件,才搞明白這事情。


mysql.cc裡的程式碼是這幾句

    mysql_free_result(result);
  } 
while (!(err= mysql_next_result(&mysql)));
  
if (err >=1)
    error
= put_error(
&mysql);
檢查最後一次next_result的值是否>0,是的話就輸出錯誤。

我猜想,mysql是想盡可能多的返回結果,就算下面的儲存過程出錯,也要返回出錯前已經select到的結果集。