我可以通过构造命令的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函数?
答案 0 :(得分:6)
按如下所示构建您的SQL语句
strcpy ( sql_stmt, "BEGIN :v_seq := get_seq_number(:v_tabname, :v_seqtype); END;" );
像以前一样准备你的陈述。按名称绑定变量(包括代码中的前一个v_seq
并执行语句。当过程完成时,将正确设置值:v_seq。
答案 1 :(得分:1)
您要么发出:
SELECT my_udf()
FROM dual
并在SELECT query
中解析结果,或者调用匿名块:
BEGIN
:test := my_udf();
END;
,并绑定:test
作为输出参数。