通过Java SQL API将存储过程设置为关闭
我们有一个存储过程,它创建动态SQL查询并使用EXEC命令执行。这里使用的数据库是Sybase。我们正在使用Java编写的程序执行查询
存储过程片段如下所示
SELECT @select_stmt = '
select name, address, age, "M" from tbl_boys'
EXEC(@select_stmt)
问题:通过stmt执行时。Java SQL API中的execute(),抛出“无效列名”M“。\n
我的尝试:
场景1:在生成动态查询之前添加SET QUOTED_IDENTIFIER OFF
。结果与上述错误相同
SET QUOTED IDENTIFIER OFF
SELECT @select_stmt = '
select name, address, age, "M" from tbl_boys'
EXEC(@select_stmt)
- 在单引号中添加了
SET QUOTED_IDENTIFIER OFF
。现在API不会返回任何错误,而是返回正确的结果集李>
SELECT @select_stmt = '
SET QUOTED IDENTIFIER OFF
select name, address, age, "M" from tbl_boys'
EXEC(@select_stmt)
在Java代码中连接到数据库时,我在连接字符串中添加了QuotedIdentifier=0
,但其行为类似于场景1并抛出错误。如何在不修改存储过程的情况下获得正确的结果。我需要一个通过API的解决方案。出于某种原因,EXEC
命令不处理在动态查询之前写入的SET QUOTED_IDENTIFIER OFF
注意:这只是一个示例代码片段。我在工作场所面临代码问题,无法共享实际代码。另外,我不能通过修改存储过程来解决这个问题,因为我们有100多个地方面临这样的问题。只有在使用JavaAPI执行时才会出现问题。它不发生在编辑器或库中用C++编写。p>
共 (0) 个答案