【问题标题】:How do I call an ORACLE function from OCI?如何从 OCI 调用 ORACLE 函数?
【发布时间】:2009-02-26 17:05:24
【问题描述】:

我可以在C程序中通过OCI调用ORACLE存储过程,通过为命令构造SQL命令,这是我代码中的一个简短的sn-p:

      /* build sql statement calling stored procedure */
      strcpy ( sql_stmt, "call get_tab_info(:x)" );
      rc = OCIStmtPrepare(p_sql, p_err, sql_stmt,
          (ub4) strlen (sql_stmt), (ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT);

但是我如何(在我的 C 程序中)构造一个对具有以下签名的 ORACLE 函数的调用:

      CREATE OR REPLACE FUNCTION get_seq_number (p_table_name IN VARCHAR2, p_seq_type IN VARCHAR2) 
      RETURN NUMBER IS

要在 PL/SQL 中调用函数,我会使用例如:

      v_seq := get_seq_number(v_tabname, v_seqtype);

如何构造 SQL 字符数组 (sql_stmt) 以在我的 C 程序中调用 ORACLE 函数?

【问题讨论】:

    标签: c oracle oracle-call-interface


    【解决方案1】:

    如下构造你的 SQL 语句

    strcpy ( sql_stmt, "BEGIN :v_seq := get_seq_number(:v_tabname, :v_seqtype); END;" );
    

    像以前一样准备你的陈述。按名称绑定变量(包括代码中前面的v_seq 并执行语句。过程完成后,将正确设置:v_seq 的值。

    【讨论】:

    • 谢谢你的回答,Thomas,我按照你说的做了,它工作正常。
    【解决方案2】:

    你要么发出:

    SELECT my_udf()
    FROM dual
    

    并像SELECT query一样解析结果,或者调用匿名块:

    BEGIN
       :test := my_udf();
    END;
    

    ,并将:test绑定为输出参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 2011-08-06
      相关资源
      最近更新 更多