Как вызвать функцию ORACLE из OCI?

Я могу вызвать хранимую процедуру ORACLE через OCI в программе на C, создав команду 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) для вызова функции ORACLE в моей программе на C?

Ответов (2)

Решение

Постройте свой 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 как выходной параметр.