尝试从 Java 调用简单的 Oracle PROCEDURE 时索引无效

2024-04-30

根据该过程是否针对生产数据库运行,以下 SQL 块在调用时成功显示“Y”或“N”。

DECLARE
  v_is_prod VARCHAR2(1);
BEGIN

  FDS_APPS.FDS_USR_SEC_PKG2.IS_RUNNING_IN_PRODUCTION2(v_is_prod);
  dbms_output.put_line('v_is_prod=' || v_is_prod);
END;

我试图从 Java 调用这个过程(这是我第一次调用)。对于这个问题,请忽略这可能应该是一个返回 char 的函数,而不是单输出 varchar2(1) 参数。我正在迈出婴儿的步伐。

这是我的Java代码:

public String isRunningInProduction() throws DaoException {
        
        LoggerUtil.info("Start calling [" + IS_RUNNING_IN_PRODUCTION + "]::", LOGGER);
        String inProduction = "";
        
        try {

            SqlOutParameter isProd = new SqlOutParameter("v_is_prod", OracleTypes.VARCHAR);

            List<SqlParameter> paramList = new ArrayList<SqlParameter>();
            paramList.add(isProd); 
            
            Map<String, Object> resultMap = jdbcTemplate.call(new CallableStatementCreator() {

                public OracleCallableStatement createCallableStatement(Connection connection) throws SQLException {

                    OracleCallableStatement callableStatement = (OracleCallableStatement) connection
                            .prepareCall(IS_RUNNING_IN_PRODUCTION);
                                        
                    callableStatement.registerOutParameter(1, Types.VARCHAR);
                    return callableStatement;
                }
            }, paramList);

            inProduction = (String)resultMap.get("v_is_prod");
                                    
        } catch (Exception e) {
            LOGGER.error("Error while determining if running in prod or not, PROC_NAME::[" + IS_RUNNING_IN_PRODUCTION + "]," + e);
            throw new DaoException("Error while retreiving " + IS_RUNNING_IN_PRODUCTION + e);
        }
        LoggerUtil.info("Finished calling [" + IS_RUNNING_IN_PRODUCTION + "]::", LOGGER);
        
        return inProduction;    
        
    }

我收到此错误:

org.springframework.jdbc.InvalidResultSetAccessException: CallableStatementCallback; invalid ResultSet access for SQL []; nested exception is java.sql.SQLException: Invalid column index

显然,registerOutParameter 是从 1 开始的,因此 callableStatement 似乎不是问题,第一个参数的索引为 1。

以下常量在别处定义:

public static final String IS_RUNNING_IN_PRODUCTION = "FDS_APPS.FDS_USR_SEC_PKG2.is_running_in_production2";

对我的问题有什么建议吗?


问题是您需要在声明中指出需要一个参数,如下所示:

public static final String IS_RUNNING_IN_PRODUCTION = "FDS_APPS.FDS_USR_SEC_PKG2.is_running_in_production2(?);";

通常该语句被包裹在call调用:

public static final String IS_RUNNING_IN_PRODUCTION = "{call FDS_APPS.FDS_USR_SEC_PKG2.is_running_in_production2(?)}";

请注意括号和?特点。

在 Java 和 JDBC 中,您需要提供一个占位符,使用?字符,对于 SQL 语句中所需的每个参数,无论它是 IN 还是 OUT。

由于您在示例中没有提供此类占位符,Spring 会抱怨,因为您正在尝试使用索引注册 out 参数1- 你是对的,第一列索引是1-,但 SQL 语句中没有该参数的占位符。

如需更多示例,请考虑进行实例审查本文 https://lalitjc.wordpress.com/2013/07/02/different-ways-of-calling-stored-procedure-using-spring/,这可能会有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试从 Java 调用简单的 Oracle PROCEDURE 时索引无效 的相关文章

随机推荐

  • Python sched.scheduler 超过最大递归深度

    我最近开始学习 Python 我正在制作的简单应用程序的一部分包括一个在其自己的线程中运行的带有 hh mm ss 显示的计时器 环顾网络 我发现了两种实现此目的的方法 使用 sched scheduler 使用threading Time
  • 创建自定义 BigDecimal 类型

    在我的应用程序中 所有 BigDecimal 数字都被缩放为具有两位小数 换句话说 每次我在代码中创建一个新的 BigDecimal 时 我也需要使用方法scale BigDecimal x BigDecimal ZERO x setSca
  • 如何在 Rails Admin 中隐藏添加新选项

    我正在自定义 Rails Admin https github com sferik rails admin https github com sferik rails admin 我需要禁用 隐藏某些型号的 添加新 选项 任何帮助都会为我
  • Python:使用html解析器提取特定数据

    我开始使用 Python 中的 HTMLParser 从网站中提取数据 我得到了我想要的一切 除了两个 HTML 标签内的文本 以下是 HTML 标签的示例 a href http wold livingsources org vocabu
  • 当我在 Excel 中运行宏时标题被切断

    我在主电子表格中设置了一个标题 在其中运行不同的宏以对信息进行不同的排序 当我运行宏时 标题的底部部分被切断 我的标题确实包含图像 不确定这是否与之有关 我还在所有宏中运行以下代码部分来格式化第一行信息 Rows 1 1 WrapText
  • 将日期时间转换为时间跨度

    我想转换一个DateTime实例化为TimeSpan举例来说 可能吗 我环顾四周 但找不到我想要的东西 我只找到了时差 更具体地说 我想转换DateTime实例以毫秒为单位 然后将其保存到IsolatedStorage 中 您可以只使用日期
  • Smalltalk 和 IoC

    我看到很多 Net 和 Java 的 IoC 框架 有谁知道为什么 Smalltalk 没有等效的框架 这更像是一个哲学问题 我想知道 Smalltalk 的做事方式中是否有某些东西排除了 IoC 框架的必要性 MVC http en wi
  • 更改 Word 文档的页边距

    我创建了一个带有按钮的 Web 部件 单击该按钮后会生成一个包含特定列表的列表项值的 Word 文档 我希望能够更改文档的边距 顶部 底部边距 但我不确定如何继续 谁能阐明如何实现这一目标 到目前为止 我的代码如下 void Generat
  • 从 ggplot 转换时,plotly 会删除分组图例(按颜色、按符号)

    我不太明白为什么当我转换由ggplot to plotly using ggplotly The 情节帮助页面 https plotly com ggplot2 legend 没有任何信息 我认为他们的示例在该页面上甚至无法正常工作 任何帮
  • GLSL - 计算表面法线

    我有一个用 GLSL 编写的简单顶点着色器 我想知道是否有人可以帮助我计算表面的法线 我正在 升级 一个平面 所以当前的灯光模型看起来 很奇怪 这是我当前的代码 varying vec4 oColor varying vec3 oEyeNo
  • 在 R 中生成具有不同样本大小的多项式随机变量

    我需要生成具有不同样本大小的多项随机变量 假设我已经生成了样本大小 如下所示 samplesize c 50 45 40 48 然后我需要根据这个不同的样本大小生成多项随机变量 我尝试使用 for 循环并使用 apply 函数 sapply
  • 将表达式转换为带有扭曲的合取范式

    我有一个必须与之交互的库 它基本上充当数据源 检索数据时 我可以将特殊的 过滤表达式 传递给该库 稍后将其转换为 SQL WHERE 部分 这些表达方式非常有限 它们必须是合取范式 喜欢 A or B or C and D or E or
  • readRDS 无法读入 R 中的文件。是否有替代方案?

    我正在尝试读取从此处下载的 RDS 文件 https github com jheng5 googleCharts tree master inst examples bubble https github com jcheng5 goog
  • “班级未注册”是哪个班级?

    考虑这段代码 try ISomeObject pObj uuidof SomeClass ISomeObject pObj2 uuidof SomeOtherClass catch com error e Log what failed I
  • 如何使用 dotenv 从 .env 和 .env.local 加载环境变量?

    这可能看起来像一个新手问题 但我无法找到使用 dotenv 从节点中的 env 和 env local 文件加载环境变量的方法 有可能吗 如果不使用 dotenv 现在人们如何从这两个文件加载环境变量 引用自 dotenv 的 npm 页面
  • Node.js 支持的操作系统

    是否有关于 Node js 支持的确切操作系统的官方声明 我唯一能找到的是this one https docs appdynamics com display PRO42 Node js Supported Environments No
  • 为路径创建别名

    是否可以在 PowerShell 中为路径创建别名 例如 我必须一直写下去 PS PS C Users Jacek gt cd C windows microsoft net framework v4 0 30319 如果我能写我会很高兴
  • 在python中向量化6个for循环累积和

    数学问题是 总和中的表达式实际上比上面的表达式复杂得多 但这是一个最小的工作示例 以免事情过于复杂 我使用 6 个嵌套 for 循环在 Python 中编写了此代码 正如预期的那样 即使在 Numba Cython 和朋友的帮助下 它的性能
  • 我想使用 java 8 Date Time API 从亚洲/加尔各答的时间计算亚洲/迪拜时区的时间

    ZoneId dubai ZoneId of Asia Dubai LocalDate localDate LocalDate now LocalTime localTime LocalTime now ZonedDateTime zone
  • 尝试从 Java 调用简单的 Oracle PROCEDURE 时索引无效

    根据该过程是否针对生产数据库运行 以下 SQL 块在调用时成功显示 Y 或 N DECLARE v is prod VARCHAR2 1 BEGIN FDS APPS FDS USR SEC PKG2 IS RUNNING IN PRODU