Oracle19创建Java源对象报ORA-29536错误,javac可正常编译如何解决?
Oracle19环境编译Java源码失败原因及解决方案
核心触发原因:SQL客户端语句分隔符冲突
Navicat默认以分号;作为SQL语句的结束标记,你提交的代码中Java部分包含大量分号,Navicat会在遇到第一个分号时就截断语句,将不完整的内容发送给Oracle,导致Oracle解析时直接遇到文件结束符(EOF),触发ORA-29536报错。
修复方法:执行该语句前,先将Navicat的语句分隔符临时修改为其他无冲突字符(比如/),执行完成后再改回默认配置即可。如果是SQL*Plus等命令行环境,可直接执行SET DELIMITER /临时修改分隔符。隐藏的编译失败问题:检查型异常未处理
即使解决了语句截断问题,你的Java代码也无法正常编译:Runtime.getRuntime().exec(cmd)会抛出检查型异常IOException,你既没有用try-catch捕获异常,也没有在方法签名上声明throws IOException,不符合Java语法规范。你提到的本地javac可正常编译大概率是测试时遗漏了异常校验,单独编译这段代码必然会抛出异常相关的编译错误。
修正后的完整执行代码如下:CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "util" AS import java.io.*; public class util extends Object { public static String exec(String cmd) throws IOException { Runtime.getRuntime().exec(cmd); return ""; } } /可选校验项
Oracle 19c内置的JDK版本为JDK8,如果你本地javac使用的版本高于JDK8,用到了高版本Java语法,也会触发编译失败,不过该问题触发的报错和你当前遇到的EOF错误不一致,属于后续可能遇到的兼容问题。
内容的提问来源于stack exchange,提问作者daisy
相关产品推荐
相关产品推荐

