中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

C語言調(diào)用mysql的存儲過程

2018-07-20    來源:open-open

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

下面假設(shè)有一張sc表,保存學(xué)生選課記錄,有課程號,學(xué)號,平時分,卷面分,總分。
建立數(shù)據(jù)庫表過程:
create table class(
cno varchar(8) not null,
sno varchar(8) not null,
ordinary_score int,
last_score int,
all_score int
);

存儲過程
由括號包圍的參數(shù)列必須總是存在。如果沒有參數(shù),也該使用一個空參數(shù)列()。每個參數(shù) 默認都是一個IN參數(shù)。要指定為其它參數(shù),可在參數(shù)名之前使用關(guān)鍵詞IN(默認,可缺省) OUT或INOUT。
IN參數(shù)是只傳入
OUT參數(shù)是只傳出
INOUT參數(shù)是既傳入又傳入,即雙向傳遞

指定參數(shù)為IN, OUT, 或INOUT 只對PROCEDURE是合法的。(FUNCTION參數(shù)總是被認為是IN參數(shù))

建立存儲過程,傳入平時分x,卷面分y,平時分所占的比率pert,學(xué)號,課程號;建立過程如下

delimiter //
CREATE PROCEDURE cal_grade(x INT,y INT,out t int,pert float,s VARCHAR(8),c VARCHAR(8))
LABEL_PROC:
BEGIN


  IF ( x < 0 || x > 100 ) THEN
      SET t = -1;
      LEAVE LABEL_PROC;
  END IF;


  IF ( y < 0 || y > 100 ) THEN 
      SET t = -2;
      LEAVE LABEL_PROC;
  END IF;


  SET t = ROUND( x*pert + y*(1-pert) );

  UPDATE sc SET ordinary_score=x,last_score=y WHERE sno=s AND cno=c AND tno=tn;

END LABEL_PROC //

delimiter ;

C語言調(diào)用
#include <stdio.h>
#include "mysql.h"
int main()
{
    MYSQL *my_connection;
    MYSQL_RES *res_ptr;
    MYSQL_ROW sqlrow;

    char buf[100];

    my_connection = mysql_init (NULL);
    //下面連接的最后一個參數(shù)必須為CLIENT_MULTI_STATEMENTS,不然就會報錯select error: PROCEDURE  *** can’t return a result set in the given context
    my_connection = mysql_real_connect (my_connection, "localhost", "root", "root", "test", 0, NULL, CLIENT_MULTI_STATEMENTS);

    sprintf (buf, "call cal_grade(%d,%d,@t,%f,%s,%s)", 10, 10, 0.3, 123, 456);

    if ( mysql_query (my_connection, buf) )
        sprintf (stderr, mysql_error (my_connection));
    else
    {
        //獲得返回參數(shù)@t,@t是傳出參數(shù)
        mysql_query (my_connection, "select @t");
        res_ptr = mysql_store_result (my_connection);
        if (res_ptr)
        {
           sqlrow = mysql_fetch_row (res_ptr);

           if (!strcmp (sqlrow[0], "-1"))
               printf ("平時分不在范圍之內(nèi)\n");
           else if (!strcmp (sqlrow[0], "-2"))
               printf ("卷面分不在范圍之內(nèi)\n");
           else
               printf ("總分為:%s\n", sqlrow[0]);
        }
        mysql_free_result (res_ptr);
    }
    mysql_close (my_connection);

    return 0;
}

標(biāo)簽: Mysql 數(shù)據(jù)庫

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:ftp自動上傳mysql備份文件

下一篇:JS檢查瀏覽器類型和版本