如何调用Oracle过程
发布时间:2021-01-17 00:52:37 所属栏目:站长百科 来源:网络整理
导读:怎样挪用以字符串和日期作为输入的Oracle存储进程,并行使Clojure将refcursor作为输出返回? variable rc refcursor;exec SOMEDB.PKG.GETPOSITIONS('ABC',to_date('2012-02-07','yyyy-mm-dd'),:rc)print rc 办理要领 我就是这样做的.我已经包括了一些辅佐fn用
|
怎样挪用以字符串和日期作为输入的Oracle存储进程,并行使Clojure将refcursor作为输出返回? variable rc refcursor;
exec SOMEDB.PKG.GETPOSITIONS('ABC',to_date('2012-02-07','yyyy-mm-dd'),:rc)
print rc
办理要领我就是这样做的.我已经包括了一些辅佐fn用于将字符串转换为SQL日期.(ns foo
(:require [clojure.java.jdbc :as jdbc]
[clojure.string :as cs]))
(def conn
{:classname "oracle.jdbc.OracleDriver"
:subprotocol "oracle:thin"
:subname "@//host.name.here:port.here/db.here"
:user "user"
:password "pass"})
(defonce ORACLE_CURSOR oracle.jdbc.driver.OracleTypes/CURSOR)
(defn date-to-sql-date [date]
(java.sql.Date. (.getTimeInMillis
(java.util.GregorianCalendar.
(+ (.getYear date) 1900) (.getMonth date) (.getDate date)))))
(defn string-to-sql-date [date]
;; assumes American date formats
(if-not (empty? date)
(date-to-sql-date (java.util.Date. (cs/replace date #"-" "/")))))
(jdbc/with-connection conn
(with-open [stmt (.prepareCall (jdbc/connection) "{ call SOMEDB.PKG.GETPOSITIONS(?,?,?) }")]
(doto stmt
(.setString 1 "ABC")
(.setDate 2 (string-to-sql-date "2012-02-07"))
(.registerOutParameter 3 ORACLE_CURSOR)
(.execute))
(resultset-seq (. stmt getObject 3)))) ;; lazy-sequence
resultset-seq 留意:假如您规划从fn返回它,则也许必要行使整个序列,由于一旦fn返回,毗连将当即封锁. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

