Как запустить процедуру Oracle plsql из Lisp? - PullRequest
3 голосов

Ответы [ 3 ]

4 голосов
/ 06 ноября 2009

Я нашел самый простой способ добиться этого с помощью Clojure. Вот пример кода:

<code>
(ns example
  (:require [clojure.contrib.sql :as sql])
  (:import  [java.sql Types]))</p>

<p>(def devdb {:classname "oracle.jdbc.driver.OracleDriver"
            :subprotocol "oracle"
            :subname "thin:username/password@localhost:1509:devdb"
            :create true})</p>

<p>(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)))))</p>

<p>(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)))))
1 голос
/ 16 сентября 2008

Самый простой способ работы с Oracle из вашей программы Common Lisp - это использование CLSQL . Существует множество других пакетов для работы с базами данных из Common Lisp. Загляните на страницу базы данных Cliki

1 голос
/ 16 сентября 2008

Вам потребуется интерфейс к базе данных Oracle SQL. Как отметил Боб, у Allegro CL такой интерфейс.

GNU CLISP, по-видимому, также имеет интерфейс к базе данных.

...