Oracle 无程序/功能/签名

Oracle 无程序/功能/签名,oracle,spring-jdbc,jdbctemplate,Oracle,Spring Jdbc,Jdbctemplate,我在使用存储过程方面相对较新,而且我真的遇到了麻烦。我使用SpringJDBCTemplate收到以下错误消息。我的开发环境是Xubuntu,JDK1.8 堆栈跟踪是: 代码: SimpleJdbc.java StringDao.java 存储过程: 您试图调用的是过程,而不是函数。但是您通过方法调用它,并指定返回类型String 您需要改为使用,仍然传递过程参数,但没有返回类型(因为过程中没有返回类型): Map out=jdbcCall.execute(callParam); 您的过程也没

我在使用存储过程方面相对较新,而且我真的遇到了麻烦。我使用SpringJDBCTemplate收到以下错误消息。我的开发环境是Xubuntu,JDK1.8

堆栈跟踪是: 代码: SimpleJdbc.java StringDao.java 存储过程:
您试图调用的是过程,而不是函数。但是您通过方法调用它,并指定返回类型
String

您需要改为使用,仍然传递过程参数,但没有返回类型(因为过程中没有返回类型):

Map out=jdbcCall.execute(callParam);

您的过程也没有任何OUT参数,因此
OUT
将为空。

除了@Alex发布的问题,我已经纠正了,最后的问题是:

static final String PROC_NAME = "PROCONEINPARAMETER";
private static final String CAT_NAME = "LISTENER";

…..
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
            .withCatalogName(CAT_NAME)
            .withProcedureName(PROC_NAME);
而不是:

SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
            .withSchemaName(CAT_NAME)
            .withProcedureName(PROC_NAME);

显然,任何人都无法知道我是在交替使用目录名和模式名。

尽管这是一个转移视线的问题,但它让我找到了正确的答案。
package test.jdbc;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;

public class StringDao {

    private static final String PROC_NAME = "PROCONEINPARAMETER";
    private static final String CAT_NAME = "LISTENER";
    private JdbcTemplate jdbcTemplate;

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public String executeProcOneINParameter(String callParam){
        SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
                .withCatalogName(CAT_NAME)
                .withProcedureName(PROC_NAME);

        return jdbcCall.executeFunction(String.class, callParam);
    }

}
PROCONEINPARAMETER

CREATE OR REPLACE PROCEDURE procOneINParameter(param1 IN VARCHAR2)
IS
BEGIN

  DBMS_OUTPUT.PUT_LINE('Hello World IN parameter ' || param1);

END;
Map<String,Object> out = jdbcCall.execute(callParam);
static final String PROC_NAME = "PROCONEINPARAMETER";
private static final String CAT_NAME = "LISTENER";

…..
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
            .withCatalogName(CAT_NAME)
            .withProcedureName(PROC_NAME);
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
            .withSchemaName(CAT_NAME)
            .withProcedureName(PROC_NAME);