MySQL 连接器/C++ 1.1 开发人员指南  / 第 7 章连接器/C++ 教程  /  7.2 使用语句对象调用存储过程

Statement7.2 用对象调用存储过程

可以使用 StatementPreparedStatement对象调用存储过程。本节介绍如何使用Statement 对象调用存储过程。要了解如何使用PreparedStatement 对象,请参阅 第 7.3 节 “使用对象调用存储过程PreparedStatement

以下列表描述了您可以构造和调用的不同类型的存储过程,以及说明每种类型的示例存储过程:

  1. 不返回结果的存储过程。例如,这样的存储过程可以记录非关键信息,或者以直接的方式更改数据库数据。

    以下过程将一个国家/地区添加到 world数据库,但不返回结果:

    CREATE PROCEDURE add_country (IN country_code CHAR(3),
                                  IN country_name CHAR(52),
                                  IN continent_name CHAR(30))
    BEGIN
      INSERT INTO Country(Code, Name, Continent)
        VALUES (country_code, country_name, continent_name);
    END;
  2. 一种使用输出参数返回一个或多个值的存储过程。例如,这样的过程可以指示成功或失败,或者检索和返回数据项。

    以下过程使用输出参数返回指定国家/地区或大陆或整个世界的人口:

    CREATE PROCEDURE get_pop (IN country_name CHAR(52),
                              OUT country_pop BIGINT)
    BEGIN
      SELECT Population INTO country_pop FROM Country
        WHERE Name = country_name;
    END;
    CREATE PROCEDURE get_pop_continent (IN continent_name CHAR(30),
                                        OUT continent_pop BIGINT)
    BEGIN
      SELECT SUM(Population) INTO continent_pop FROM Country
        WHERE Continent = continent_name;
    END;
    CREATE PROCEDURE get_pop_world (OUT world_pop BIGINT)
    BEGIN
      SELECT SUM(Population) INTO world_pop FROM Country;
    END;
  3. 返回一个或多个结果集的存储过程。该过程可以执行一个或多个查询,每个查询返回任意数量的行。您的应用程序遍历每个结果集以显示、转换或以其他方式处理其中的每一行。

    此过程返回几个结果集:

    CREATE PROCEDURE get_data ()
    BEGIN
      SELECT Code, Name, Population, Continent FROM Country
        WHERE Continent = 'Oceania' AND Population < 10000;
      SELECT Code, Name, Population, Continent FROM Country
        WHERE Continent = 'Europe' AND Population < 10000;
      SELECT Code, Name, Population, Continent FROM Country
        WHERE Continent = 'North America' AND Population < 10000;
    END;

手动输入和测试存储过程以确保它们对您的 C++ 应用程序可用。( world在创建它们之前选择默认数据库。)您现在可以开始使用调用存储过程的 Connector/C++ 编写应用程序。