当前位置:Gxlcms > 数据库问题 > C语言调用mysql的存储过程

C语言调用mysql的存储过程

时间:2021-07-01 10:21:17 帮助过:16人阅读

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语言调用

#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);
    //下面连接的最后一个参数必须为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
    {
        //获得返回参数@t,@t是传出参数
        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");
           else if (!strcmp (sqlrow[0], "-2"))
               printf ("卷面分不在范围之内\n");
           else
               printf ("总分为:%s\n", sqlrow[0]);
        }
        mysql_free_result (res_ptr);
    }
    mysql_close (my_connection);

    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

C语言调用mysql的存储过程

标签:c语言   存储过程   mysql   数据库   

人气教程排行