如何从Lisp运行Oracle plsql过程?
时间:2020-03-05 18:54:25 来源:igfitidea点击:
我该如何开始?
解决方案
回答
我们将需要一个Oracle SQL数据库接口。正如鲍勃指出的那样,Allegro CL具有这样的接口。
GNU CLISP显然也带有数据库接口。
回答
从Common Lisp程序中完成Oracle工作的最直接方法是使用CLSQL。还有许多其他软件包可用于处理Common Lisp中的数据库。看看Cliki的数据库页面
回答
我找到了使用Clojure实现此目的的最简单方法。
这是示例代码:
(ns example (:require [clojure.contrib.sql :as sql]) (:import [java.sql Types])) (def devdb {:classname "oracle.jdbc.driver.OracleDriver" :subprotocol "oracle" :subname "thin:username/password@localhost:1509:devdb" :create true}) (defn exec-ora-stored-proc [input-param db callback] (sql/with-connection db (with-open [stmt (.prepareCall (sql/connection) "{call some_schema.some_package.test_proc(?, ?, ?)}")] (doto stmt (.setInt 1 input-param) (.registerOutParameter 2 Types/INTEGER) (.registerOutParameter 3 oracle.jdbc.driver.OracleTypes/CURSOR) (.execute)) (callback (. stmt getInt 2) (. stmt getObject 3))))) (exec-ora-stored-proc 123 ;;input param value devdb (fn [err-code res-cursor] (println (str "ret_code: " err-code)) ;; prints returned refcursor rows (let [resultset (resultset-seq res-cursor)] (doseq [rec resultset] (println rec)))))