Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从oracle过程到SimpleJDBCall获取价值_Java_Oracle_Stored Procedures_Spring Jdbc - Fatal编程技术网

Java 如何从oracle过程到SimpleJDBCall获取价值

Java 如何从oracle过程到SimpleJDBCall获取价值,java,oracle,stored-procedures,spring-jdbc,Java,Oracle,Stored Procedures,Spring Jdbc,我已经使用spring和procedure成功地使用Simplejdbccall保存了详细信息,但是我需要从procedure返回一个值,并在java代码中获取它 public void saveNamedDrivers(QuotationDO quotationDO) { // TODO Auto-generated method stub try { System.out.println(" 11111"); SimpleJdbcCal

我已经使用spring和procedure成功地使用Simplejdbccall保存了详细信息,但是我需要从procedure返回一个值,并在java代码中获取它

public void saveNamedDrivers(QuotationDO quotationDO) {
    // TODO Auto-generated method stub
    try {

         System.out.println(" 11111");


        SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(dataSource);
        simpleJdbcCall.withCatalogName("NAMED_DRIVER_SAVE").withProcedureName("PR_NAMED_DRIVER_SAVE")
                .withoutProcedureColumnMetaDataAccess()
                .declareParameters(new SqlParameter("P_VCH_NAME", OracleTypes.VARCHAR),
                        new SqlParameter("P_NUM_NEW_IC_NO", OracleTypes.VARCHAR),
                        new SqlParameter("P_NUM_OLD_IC_NO", OracleTypes.VARCHAR),
                        new SqlParameter("P_VCH_GENDER", OracleTypes.VARCHAR),
                        new SqlParameter("P_VCH_RELATIONSHIP", OracleTypes.VARCHAR),
                        new SqlParameter("P_NUM_AGE", OracleTypes.NUMBER),
                        new SqlParameter("P_VCH_DRIVER_EXPERIENCE", OracleTypes.VARCHAR));

        SqlParameterSource inputParams = new MapSqlParameterSource()
                .addValue("P_VCH_NAME", quotationDO.getNameddrivername())
                .addValue("P_NUM_NEW_IC_NO", quotationDO.getNamednewicno())
                .addValue("P_NUM_OLD_IC_NO", quotationDO.getNamedoldicno())
                .addValue("P_VCH_GENDER", quotationDO.getNamedgender())
                .addValue("P_VCH_RELATIONSHIP", quotationDO.getNameddriverrelationship())
                .addValue("P_NUM_AGE", quotationDO.getNamedage())
                .addValue("P_VCH_DRIVER_EXPERIENCE", quotationDO.getNameddriverexperience());

        Map<String, Object> transactionStatus = simpleJdbcCall.execute(inputParams);
        System.out.println( transactionStatus);

    } catch (Exception e) {
        System.out.println(e);
    }
}
  • 我在过程中使用了return语句,但它不起作用
  • 这是java代码

    public void saveNamedDrivers(QuotationDO quotationDO) {
        // TODO Auto-generated method stub
        try {
    
             System.out.println(" 11111");
    
    
            SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(dataSource);
            simpleJdbcCall.withCatalogName("NAMED_DRIVER_SAVE").withProcedureName("PR_NAMED_DRIVER_SAVE")
                    .withoutProcedureColumnMetaDataAccess()
                    .declareParameters(new SqlParameter("P_VCH_NAME", OracleTypes.VARCHAR),
                            new SqlParameter("P_NUM_NEW_IC_NO", OracleTypes.VARCHAR),
                            new SqlParameter("P_NUM_OLD_IC_NO", OracleTypes.VARCHAR),
                            new SqlParameter("P_VCH_GENDER", OracleTypes.VARCHAR),
                            new SqlParameter("P_VCH_RELATIONSHIP", OracleTypes.VARCHAR),
                            new SqlParameter("P_NUM_AGE", OracleTypes.NUMBER),
                            new SqlParameter("P_VCH_DRIVER_EXPERIENCE", OracleTypes.VARCHAR));
    
            SqlParameterSource inputParams = new MapSqlParameterSource()
                    .addValue("P_VCH_NAME", quotationDO.getNameddrivername())
                    .addValue("P_NUM_NEW_IC_NO", quotationDO.getNamednewicno())
                    .addValue("P_NUM_OLD_IC_NO", quotationDO.getNamedoldicno())
                    .addValue("P_VCH_GENDER", quotationDO.getNamedgender())
                    .addValue("P_VCH_RELATIONSHIP", quotationDO.getNameddriverrelationship())
                    .addValue("P_NUM_AGE", quotationDO.getNamedage())
                    .addValue("P_VCH_DRIVER_EXPERIENCE", quotationDO.getNameddriverexperience());
    
            Map<String, Object> transactionStatus = simpleJdbcCall.execute(inputParams);
            System.out.println( transactionStatus);
    
        } catch (Exception e) {
            System.out.println(e);
        }
    }
    
    [我使用
    DBMS_output.put_line(p_NAMED_ID);
    在debbuging sql过程中获得了输出,但是如何在上面的java代码中获得它呢

    public void saveNamedDrivers(QuotationDO quotationDO) {
        // TODO Auto-generated method stub
        try {
    
             System.out.println(" 11111");
    
    
            SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(dataSource);
            simpleJdbcCall.withCatalogName("NAMED_DRIVER_SAVE").withProcedureName("PR_NAMED_DRIVER_SAVE")
                    .withoutProcedureColumnMetaDataAccess()
                    .declareParameters(new SqlParameter("P_VCH_NAME", OracleTypes.VARCHAR),
                            new SqlParameter("P_NUM_NEW_IC_NO", OracleTypes.VARCHAR),
                            new SqlParameter("P_NUM_OLD_IC_NO", OracleTypes.VARCHAR),
                            new SqlParameter("P_VCH_GENDER", OracleTypes.VARCHAR),
                            new SqlParameter("P_VCH_RELATIONSHIP", OracleTypes.VARCHAR),
                            new SqlParameter("P_NUM_AGE", OracleTypes.NUMBER),
                            new SqlParameter("P_VCH_DRIVER_EXPERIENCE", OracleTypes.VARCHAR));
    
            SqlParameterSource inputParams = new MapSqlParameterSource()
                    .addValue("P_VCH_NAME", quotationDO.getNameddrivername())
                    .addValue("P_NUM_NEW_IC_NO", quotationDO.getNamednewicno())
                    .addValue("P_NUM_OLD_IC_NO", quotationDO.getNamedoldicno())
                    .addValue("P_VCH_GENDER", quotationDO.getNamedgender())
                    .addValue("P_VCH_RELATIONSHIP", quotationDO.getNameddriverrelationship())
                    .addValue("P_NUM_AGE", quotationDO.getNamedage())
                    .addValue("P_VCH_DRIVER_EXPERIENCE", quotationDO.getNameddriverexperience());
    
            Map<String, Object> transactionStatus = simpleJdbcCall.execute(inputParams);
            System.out.println( transactionStatus);
    
        } catch (Exception e) {
            System.out.println(e);
        }
    }
    
  • 映射字符串包含
  • 过程不会返回它显示的任何警告

  • ]

    RETURN在过程中不起任何作用。您需要为要返回的内容指定一个OUT参数我收到了这个错误[错误]PLS-00372(59:4):PLS-00372:在一个过程中,返回语句不能包含表达式否,不是返回语句,而是。是的,我已将其更改为
    P_NUM_AGE In OUT NUMBER,
    但是案例1:我需要返回
    输入输出参数
    案例2:我需要返回序列值1)PL/SQ中有两种“子程序”:“过程”和“函数”。根据定义,“过程”不会“返回*任何东西!”。这就是“函数”的作用。2)听起来这里的解决方案是使用OUT或IN-OUT参数。问:你尝试过吗?问:发生了什么事?请查看此处了解更多信息: