如何从OCI调用ORACLE函数?

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

/* 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); 

但是如何使用以下签名构建对ORACLE函数的调用(在我的C程序中):

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

按如下方式构造SQL语句

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

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

您要么发出:

 SELECT my_udf() FROM dual 

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

 BEGIN :test := my_udf(); END; 

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