当前位置: 首页 > 知识库问答 >
问题:

用Spring调用oracle StoredProcedure时出错

赵嘉纳
2023-03-14

我有一个oracle存储过程,我不能更改或编码。该过程接收以下I/O

CREATE OR REPLACE PROCEDURE "SCHEMA"."NAMEPROCEDURE"
            (
                ZCLIENTE_IN     IN  CHAR,
                CKBALCAO_IN     IN  CHAR,
                NRPROCES_IN     IN  NUMBER,
                DTINICIO_IN     IN  CHAR,
                DTFIM_IN        IN  CHAR,
                TPDOCUME_IN     IN  CHAR,
                EMAIL_IN        IN  CHAR,
                OK_KO_OUT       OUT CHAR,
                MSGERR_OUT      OUT VARCHAR2
            )
IS
PROXNUM     CHAR(14);

BEGIN ...
 String procedureName = "NAMEPROCEDURE";
String catalogName = "SCHEMA";


String okKo ="";
String msgErro ="";

simpleJdbcCall.withCatalogName(catalogName).withProcedureName(procedureName)
.declareParameters(new SqlOutParameter("OK_KO_OUT", OracleTypes.CHAR), new SqlOutParameter("MSGERR", OracleTypes.VARCHAR),
      new SqlInOutParameter("ZCLIENTE_IN", OracleTypes.CHAR), 
      new SqlInOutParameter("CKBALCAO_IN", OracleTypes.CHAR),
      new SqlInOutParameter("NRPROCES_IN", OracleTypes.NUMBER),
      new SqlInOutParameter("DTINICIO_IN", OracleTypes.CHAR),
      new SqlInOutParameter("DTFIM_IN", OracleTypes.CHAR),
      new SqlInOutParameter("TPDOCUME_IN", OracleTypes.CHAR),
      new SqlInOutParameter("EMAIL_IN", OracleTypes.CHAR)
    );
MapSqlParameterSource inParams = new MapSqlParameterSource();
inParams.addValue("ZCLIENTE_IN", "1111111111", OracleTypes.CHAR);
inParams.addValue("CKBALCAO_IN", "0000", OracleTypes.CHAR);
inParams.addValue("NRPROCES_IN", 20160000001L, OracleTypes.BIGINT);
inParams.addValue("DTINICIO_IN", "2016-01-01", OracleTypes.CHAR);
inParams.addValue("DTFIM_IN", "2019-01-01", OracleTypes.CHAR);
inParams.addValue("TPDOCUME_IN", "0011", OracleTypes.CHAR);
inParams.addValue("EMAIL_IN", "someEmail@gmail.com", OracleTypes.CHAR);

Map<String, Object> simpleJdbcCallResult =  simpleJdbcCall.execute(inParams);

由:java.sql.sqlexception:ORA-06550:linha 1,coluna 7:PLS-00306:Nümero errado ou tipos de argumentos na chamada para'procedureName'ORA-06550:linha 1,coluna 7:PL/SQL:语句被忽略

在Oracle.jdbc.driver.t4CTtioer.processerror(T4CTtioer.java:450)~[OJDBC7-12.1.0.2.jar:12.1.0.2.0]在Oracle.jdbc.driver.t4CTtioer.processerror(T4CTtioer.java:399)~[OJDBC7-12.1.0.2.jar:12.1.0.2.0]在Oracle.jdbc.driver.t4C8Oall.processerror(T4C8Oall.java:1059)~[OJDBC7-12.1.0.2.jar:12.1.0.2.0]在t4cttifun.receiv(t4cttifun.java:522)~[OJDBC7-12.1.0.2.jar:12.1.0.2.0]在Oracle.jdbc.driver.t4cttifun.dorpc(T4cttifun.java:257)~[OJDBC7-12.1.0.2.jar:12.1.0.2.0]在Oracle.jdbc.driver.t4c8oall.dooall(T4c8oall.java:587)~[OJDBC7-12.1.0.2.jar:12.1.0.2.0]

我不知道我做错了什么,因为如果我有一个相同的调用,只有两个参数,并返回一个光标,它可以完美地工作。

提前Tks

共有1个答案

强承望
2023-03-14

为任何有同样问题的人找到了答案。在我的pom.xml中,我有ojdbc7驱动程序,还需要有OJBDC6。依附关系如下:

<dependency>
   <groupId>com.oracle</groupId>
   <artifactId>ojdbc6</artifactId>
   <version>11.2.0.4</version>
</dependency>

不知道为什么,但对我有效。SQL-CALL函数和Oracle之间一定存在一些不兼容的地方。

 类似资料:
  • 我编写了一些请求映射,并使用JPA将Spring Boot应用程序连接到Postgresql DB。但是,当我尝试调用API时,我会得到以下消息:。我试着在调用API时打印一条消息,它可以工作,所以我想这可能与JPA连接有关?(我还使用SQL Shell测试了数据库和凭据是否良好,它们都是可以的) 我的模型: 我的控制器: 最后,我的应用程序属性:

  • 我是PySpark的新手。我一直在用测试样本编写代码。一旦我在更大的文件上运行代码(3gb压缩)。我的代码只做了一些过滤和连接。关于py4J,我一直在出错。 任何帮助都是有益的,我们将不胜感激。 回来 更新:我使用的是py4j 10.7,刚刚更新到10.8 更新(1):添加spark。驾驶员内存: 汇总返回错误: 更新(2):我通过更改spark默认值尝试了这一点。conf文件。仍在获取错误PyS

  • 我在使用Spring工具套件运行项目时遇到以下错误, 但如果我的问题是,我已经向pom添加了适当的依赖项。XML文件。那么问题出在哪里呢? 我的文件依赖关系如下, 我的控制器应用程序ontroller.java如下, 我的vives在中,您可以查看下面的树视图, 我已经更改了应用程序。属性文件。但是,我仍然不明白出了什么问题。 我的应用程序。属性文件如下, 我只是在My中打印hello,

  • 我在运行Python 3.6.5的Jupyter笔记本和运行3.7.2的Python shell中出现了这个错误。我的操作系统是Windows10。我在这两种环境中都安装了pip pyspark。两者都使用Spark Version2.4.0,而我的Java JDK是Oracle JDK Version8,JDK1.8.0_201。这是我在这两种情况下运行的代码: 这里:Spyder中的PySpa

  • 这是我的客户端代码 这是我的Rest控制器代码: 如果我在调用后使用 String.class 作为返回类型,则相同的代码也有效。但不是响应实体类。我做错了什么,如果我需要客户端也相同的响应实体

  • 我想按照spark网站上的说明为spark安装graphframes,但命令: <代码>pyspark--打包graphframes:graphframes:0.8.1-spark3.0-s\u 2.12 不适合我。 我尝试了多种安装方法,但决定继续下载graphframes。jar,将其添加到Spark的常规列表中。jar文件并将其手动添加到代码spark中。sparkContext。addPy