2009-02-26 78 views
1

我可以通過OCI在C程序通過該命令構建SQL命令調用Oracle存儲過程,這裏是從我的代碼的簡短片段:如何從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); 

但我怎麼構建一個電話(在我的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)以在我的C程序中調用ORACLE函數?

回答

6

構建您的SQL statment如下

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

準備好您的語句前面。通過名稱綁定變量(包括前面在代碼中的v_seq並執行語句,當過程完成時,將正確設置v_seq的值:

+0

謝謝你的答案托馬斯,我照你所說的做了它工作正常。 – David 2009-02-27 09:05:30

1

要麼你的問題:

SELECT my_udf() 
FROM dual 

,並解析結果作爲SELECT query,或撥打匿名塊:

BEGIN 
    :test := my_udf(); 
END; 

,並綁定:test作爲輸出參數。