如何从 OCI 调用 ORACLE 函数?

发布于 2024-07-14 09:43:00 字数 698 浏览 14 评论 0原文

我可以通过在 C 程序中构造 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 函数?

I can call an ORACLE stored procedure through OCI in a C program by constructing the SQL command for the command, here's a brief snippet from my code:

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

But how do I construct a call (in my C program) to an ORACLE function with the following signature:

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

To call the function in PL/SQL I would use for example:

      v_seq := get_seq_number(v_tabname, v_seqtype);

How do I construct the SQL character array (sql_stmt) to call the ORACLE function in my C program ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

放手` 2024-07-21 09:43:00

按如下方式构建 SQL 语句

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

按照之前的方式准备语句。 按名称绑定变量(包括代码中前面的 v_seq )并执行语句。过程完成后,:v_seq 的值将被正确设置。

Construct your SQL statment as follows

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

Prepare your statement as previously. Bind the variables by name (including the v_seq as previous in your code and execute the statement. When the procedure completes, the value of :v_seq will be set correctly.

空城旧梦 2024-07-21 09:43:00

您可以发出:

SELECT my_udf()
FROM dual

并像 SELECT 查询 中那样解析结果,或者调用匿名 block:

BEGIN
   :test := my_udf();
END;

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

You either issue:

SELECT my_udf()
FROM dual

and parse the result as in SELECT query, or call anonymous block:

BEGIN
   :test := my_udf();
END;

, and bind :test as an output parameter.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文