Comment exécuter la procédure Oracle plsql à partir de Lisp?
-
09-06-2019 - |
Question
Comment puis-je commencer?
La solution
J'ai trouvé le moyen le plus simple d'y parvenir en utilisant Clojure. Voici l'exemple de code:
(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)))))
Autres conseils
Vous aurez besoin d’une interface avec la base de données Oracle SQL. Comme Bob l'a souligné, Allegro CL dispose d'une telle interface.
GNU CLISP est apparemment livré avec une interface vers la base de données.
Le moyen le plus simple de réaliser des tâches Oracle à partir de votre programme Common Lisp consiste à utiliser CLSQL . Il y a beaucoup d'autres paquets pour faire des choses avec les bases de données de Common Lisp. Consultez la page de base de données de Cliki
.