如何解决如何从Clojure中调用Oracle中的过程
我希望能够使用Clojure在Oracle数据库中调用过程。
我已经连接到Oracle数据库,并且可以使用带有参数的选择查询来查询数据库的表。 例如:如果我运行“ SELECT * FROM user_tables”,我将得到表列表作为结果。因此,该连接正在正常工作,并且我确实具有建立此连接的正确凭据。
我正在使用以下依赖项:
[org.clojure/clojure "1.10.1"]
[org.clojure/java.jdbc "0.7.11"]
并且作为oracle驱动程序,我尝试了这些
[oracle.jdbc/oracledriver "11.2.0.2"] (ojdbc6 driver I installed locally under this name)
[oracle.jdbc/ojdbc7 "12.1.0.2"]
[com.oracle/ojdbc8 "19.3.0.0"] or [oracle.jdbc/ojdbc8 "12.2.0.1"]
我的Java版本是:
java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09,mixed mode)
使用ojdbc6驱动程序会导致:
Execution error (SQLException) at oracle.jdbc.driver.T4CTTIoer/processError (T4CTTIoer.java:440).
ORA-29481: Implicit results cannot be returned to client.
ORA-06512: at "SYS.DBMS_SQL",line 2785
ORA-06512: at "SYS.DBMS_SQL",line 2779
ORA-06512: at "<My procedure name>",line 157
ORA-06512: at line 1
使用版本7或8将导致:
#:next.jdbc{:update-count -1}
有人可以帮助我解决该问题,使我看到与SQL-Developer中相同的结果集吗?
用于建立连接的Clojure代码:
(defstate ^:dynamic *oracle*
"This variable has the database connection to the Oracle Database"
:start
(if-let [jdbc-url (:oracle (env :database-url))]
(conman/connect! {:jdbc-url jdbc-url})
(do
(log/warn "database connection URL was not found,please set :database-url for oracle in your config,e.g: dev-config.edn")
*oracle*))
:stop
(conman/disconnect! *oracle*))
(conman/bind-connection *oracle* "sql/queries-oracle.sql")
在resources / sql中,有一个文件querys-oracle.sql,其中包含要调用的过程。我尝试了几种方法来调用它:
EXEC schema_name.procedure_name :param1,:param2,:param3;
EXEC schema_name.procedure_name(:param1,:param3);
BEGIN EXEC schema_name.procedure_name :param1,:param3; END;
BEGIN schema_name.procedure_name :param1,:param3; END;
所有这些都有一个:name来调用它们。我现在正在REPL上尝试。 这些尝试的结果是:
- 无效的SQL语句
- 无效的SQL语句
- 在预期以下一种情况时遇到符号“ schema_name”:...
- #:next.jdbc {:update-count -1}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。