1

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

      /* 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 函数?

4

2 回答 2

6

如下构造您的 SQL 语句

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

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

于 2009-02-26T18:33:31.330 回答
1

你要么发出:

SELECT my_udf()
FROM dual

并解析结果SELECT query,或调用匿名块:

BEGIN
   :test := my_udf();
END;

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

于 2009-02-26T17:15:35.493 回答