【问题标题】:NPOCO PL/SQL HANDELING OUT PARAMETERSNPOCO PL/SQL 处理参数
【发布时间】:2016-03-21 23:45:03
【问题描述】:

我在 Oracle 中有存储过程

CREATE OR REPLACE PROCEDURE procTest (p_param1 varchar2, p_param2 out varchar2)
AS
BEGIN
... 
END;

如何处理参数?

_db.Execute("EXEC procTest ('dsds')");

【问题讨论】:

    标签: oracle plsql npoco


    【解决方案1】:

    http://pocoproject.org/docs-1.5.0/00200-DataUserManual.html 上了解存储过程和函数支持

    存储过程和函数支持

    大多数现代数据库系统都支持存储过程和/或函数。 Poco::Data 是否提供任何支持?你打赌。虽然关于什么是可能的细节(例如传入和传出的数据类型、自动或手动数据绑定、绑定方向等)最终取决于数据库,但 POCO Data 最好通过 in 提供对此类功能的合理访问, out 和 io 绑定函数。正如它们的名字所暗示的那样,这些函数正在执行参数绑定,从存储过程传入​​或接收,或两者兼而有之。代码价值千言万语,所以这里有一个 Oracle ODBC 示例:

    session << "CREATE OR REPLACE "
        "FUNCTION storedFunction(param1 IN OUT NUMBER, param2 IN OUT NUMBER) RETURN NUMBER IS "
        " temp NUMBER := param1; "
        " BEGIN param1 := param2; param2 := temp; RETURN(param1+param2); "
        " END storedFunction;" , now;
    
    int i = 1, j = 2, result = 0;
    session << "{? = call storedFunction(?, ?)}", out(result), io(i), io(j), now; // i = 2, j = 1, result = 3
    

    允许存储过程返回数据集(又名游标):

    typedef Tuple<std::string, std::string, std::string, int> Person;
    std::vector<Person> people;
    int age = 13;
    session << "CREATE OR REPLACE "
        "FUNCTION storedCursorFunction(ageLimit IN NUMBER) RETURN SYS_REFCURSOR IS "
        " ret SYS_REFCURSOR; "
        "BEGIN "
        " OPEN ret FOR "
        " SELECT *  FROM Person  WHERE Age < ageLimit; " 
        " RETURN ret; "
        "END storedCursorFunction;" , now;
    
    session << "{call storedCursorFunction(?)}", in(age), into(people), now;
    

    上面显示的代码适用于 Oracle 数据库。

    【讨论】:

      猜你喜欢
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 2016-01-26
      • 1970-01-01
      相关资源
      最近更新 更多