E文好的请查看原文,菜鸟级翻译,欢迎批评指正!
mysql5.0支持存储过程后,现在mysql6.0Alpha 版本也是可用的。6.0不仅支持大型数据库(如 oracle和如此的大多数功能(如存储过程、视图、触发器、作业等,并修复了这些功能存在的bug,6.0.1 版还支持windows 64 位 和表空间。
C/c + + 要访问 mysql,只是一些简单的常用操作,c嵌入式简单查询、插入、更新和其他操作的使用可以。这些语句作为业务复杂、完整的业务功能需要的sql 操作,很大一部分是嵌入c 代码c 代码会导致更多和更复杂的不清楚这一次自然的存储过程来封装所有数据库逻辑思想,简单地通过调用mysql 存储的过程 c 接口可以实现他们的目标大大减少工作量的c 程序员,但也容易处理前端业务逻辑和数据库处理逻辑分离。在这里只调用存储的过程c 语言的简单方法。
|              1             2             3             4             5             6             7              |                          Create table student(                   id int auto_increment,                   name varchar(20),                   age tinyint,                   remark varchar(50),                    primary key(id)             );              |         
|              1             2              |                          Insert into student values(1,"zhouys",90, "");             commit;              |         
|              1             2             3             4             5             6             7             8             9              |                          mysql> select * from student;             +------+-----------+------+----------+             | id   | name   | age | remark |             +------+-----------+------+----------+             |    1 | zhouys |   90 |        |             +------+-----------+------+-----------+             1 row in set (0.00 sec)             mysql>              |         
|              1             2             3             4             5             6             7             8             9             10             11             12             13             14             15             16             17             18             19             20             21             22             23             24             25             26             27             28              |                          delimiter //             create procedure querystudent(                    in in_id int ,   #0- Character ID 1-digital id                       #                    out out_ret int,                # Returns the result                    out out_name varchar(20),        # First name                    out out_age   int                # Age                 )             label_a:begin                    declare v_name varchar(20) ;                    declare v_age tinyint ;                    # Parameters determine                    if (in_id<=0) then                           set out_ret=-1; #id error                           leave label_a;                    end if;                    SELECT name,age into v_name,v_age from student where't found                           leave label_a;                    end if;                       set out_ret=0;                    set out_name=v_name;                    set out_age=v_age;             end;             //             delimiter ;              |         
|              1             2             3             4             5              |                          if(!mysql_init(&mysql))                    {                           printf("mysql_init failed!/n");                           return 0;                    }               |         
|              1             2             3             4             5             6             7              |                          //login or connect                    if(!mysql_real_connect(&mysql,"localhost","root","","billingdb",0,NULL,CLIENT_MULTI_STATEMENTS))                    {                           printf("mysql_real_connect() failed!/n");                           mysql_close(&mysql);                           return 0;                    }              |         
|              1             2             3             4              |                          //call                    strcpy(query,"call querystudent (1,@ret,@ out_name,@ out_age)");                    printf("query sql=[%s]/n",query);                 ret= mysql_real_query(&mysql,query,(unsigned int)strlen(query));              |         
|              1             2             3             4             5             6             7             8             9             10             11             12             13              |                          mysql_query(&mysql, "SELECT @ret,@ out_name,@ out_age ");                    //get result                    if (ret)                 {                           printf("Error exec query: %s/n",mysql_error(&mysql));                 }                 else                    {                           printf("[%s] exec.../n", query);                 }                    results = mysql_store_result(&mysql);              |         
|              1             2             3              |                          while((record = mysql_fetch_row(results))) {                           printf("[%s]-[%s]-[%s]/n", record[0], record[1],record[2]);                    }              |         
常规的存储过程将只返回结果,^_^。
|              1             2              |                          mysql_free_result(results);             mysql_close(&mysql);              |         
Mysql 的存储过程可以实现相当强大的功能,这里只是一些基本的用法,希望能给你一些帮助。也欢迎分享......
像C#调用都可以绑定输出参数,直接通过输出参数得到值,但是c++中使用prepare绑定输出参数,却返回以下错误信息:
Error Code: 1414. OUT or INOUT argument 2 for routine knockout_dbo.ko_SignUpYoungBoxer is not a variable or NEW pseudo-variable in BEFORE trigger