Comment appeler une fonction ORACLE depuis OCI?

Je peux appeler une procédure stockée ORACLE via OCI dans un programme C en construisant la commande SQL pour la commande. Voici un bref extrait de mon 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); 

Mais comment puis-je construire un appel (dans mon programme C) vers une fonction ORACLE avec la signature suivante:

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

Pour appeler la fonction en PL / SQL, j’utiliserais par exemple:

  v_seq := get_seq_number(v_tabname, v_seqtype); 

Comment construire le tableau de caractères SQL (sql_stmt) pour appeler la fonction ORACLE dans mon programme C?

Construisez votre déclaration SQL comme suit

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

Préparez votre déclaration comme précédemment. Liez les variables par leur nom (y compris v_seq comme précédemment dans votre code et exécutez l’instruction. Lorsque la procédure est terminée, la valeur de: v_seq est définie correctement.

Vous émettez soit:

 SELECT my_udf() FROM dual 

et parsingr le résultat comme dans une SELECT query ou appeler un bloc anonyme:

 BEGIN :test := my_udf(); END; 

et bind :test tant que paramètre de sortie.