我有这样一个PL/SQL块:
BEGIN
FOR i IN 1..100
LOOP
UPDATE rptbody
SET comments = 'abcs';
WHERE (rptno> 100 and rptno < 200) and ROWNUM<2;
COMMIT;
END LOOP;
END;
此块需要使用Oracle JDBC执行。我尝试过以下方法:
>
尝试使用语句对象执行此操作。因为这是一个块,所以出现了一个异常,说这不是一个sql语句
这可以分成sql语句,但是我有100个这样的块,这对代码来说很麻烦,我想把这个留给sqlplus。
尝试使用Callable语句,但不能正常工作。
任何解决方案都会有帮助。
试图使用语句对象执行此操作。由于这是一个块,因此引发了一个异常,表示这不是sql语句
Since you were trying to execute a plsql block, you should not use Statement object.
从…起https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html:用于执行静态SQL语句并返回其生成的结果的对象。
这是执行块所需的方式:
CallableStatement anonBlock = null // Note that CallableStatement is an interface
String anonBlockString = '' //Generally multi line
// Set in and out parameters as needed by your anonBlockString
anonBlock.registerOutParameter( <number> , <type> )
...
// executeUpdate() is inherited from PreparedStatement and can be used for executing DML statements (update, insert, delete)
anonBlock.executeUpdate();
To access out parameters:
anonBlock.getString(<number which you have assigned in registerOutParameter() calls);
完整示例:(https://download.oracle.com/otn_hosted_doc/timesten/1121/quickstart/sample_code/jdbc/plsqlJDBC.java)
这可以分成sql语句,但是我有100个这样的块,这对代码来说很麻烦,我想把这个留给sqlplus。
更喜欢使用存储过程而不是匿名块。由于存储过程是以编译和优化的格式存储的,因此与匿名存储过程相比,它们的性能有所提高
尝试使用CallableStatement,但效果不佳:
代码是什么,错误/堆栈?
查看一些代码示例,在Github上使用CallableStatement和PreparedStatement
这与你如何经营无关。PL/SQL语法无效。在更新子句之后,在WHERE子句之前有一个;
:
BEGIN
FOR i IN 1..100
LOOP
UPDATE rptbody
SET comments = 'abcs' --<<< no semicolon here!!
WHERE (rptno> 100 and rptno < 200) and ROWNUM<2;
COMMIT;
END LOOP;
END;
上述代码可以如下方式运行:
String sql = "... the PL/SQL block ...";
Statement stmt = connection.createStatement();
stmt.execute(sql);
问题内容: 我使用Java中的以下代码使用HMAC-SHA1哈希一些值: 属于 在PHP中,有一个类似的函数可用来比较Java实现返回的值。 因此,首先尝试是: 返回: 我的Java函数也会返回。 好的,看来可行。然后,我尝试使用一个更复杂的键: 返回: 这次,我的Java展示返回了: 我的PHP代码返回的哈希值不等于我的Java函数返回的值,而且我找不到原因。 有小费吗? 问题答案: 在您的PH
问题内容: 我想使用Java程序将avi文件转换为3gp。 为此,我使用“ EM Total Video Converter命令行2.43”,其命令为 “ C:\ EM TVCC > TVCC -f E:\ TestVideo \ 01.avi -o E:\ OutputFiles \ target.3gp” 我在站点http://www.rgagnon.com/javadetails/java-
问题内容: 我需要在Java字符串之间执行Diffs。我希望能够使用原始的string和diff版本重建字符串。有人用Java完成吗?你使用什么图书馆? 问题答案: 这个库似乎可以解决问题:google-diff-match-patch。它可以根据差异创建补丁字符串,并允许重新应用补丁。
问题内容: 我有一个使用PHP(Joomla)实现的系统。现在,客户希望集成一个SMS网关。不幸的是,SMS网关不支持PHP。它用Java编写,所有示例都用JAVA编写。 我应该将其包含在程序中并运行以下示例脚本。 据我所知,我可以使用PHP如下运行 如何在PHP中运行上述Java脚本?可能吗?有没有办法桥接PHP和JAVA?我想要的是在PHP中运行JAVA,否则我会说这两者之间进行通信。 问题答
问题内容: 我如何在Java URLConnection中实现以下curl命令 提前致谢 问题答案: 使用URLConnection的派生类(即HttpURLConnection),您可以轻松地做到这一点。 对于
问题内容: 我想问一下如何多次执行1条命令 例如此代码 我要运行500次,该怎么办? 谢谢 问候威廉姆斯 问题答案: 使用循环, 请阅读基本的Java教程。可以在这里找到一个