JDBC: PL/SQL对象(过程)无效。
String sql = "create procedure foo(name varchar2) as " +
"begin " +
...
"end";
Statement stmt = connection.createStatement();
stmt.execute(sql);
stmt.close();
String sql1 = "begin foo('world'); end;";
CallableStatement s = connection.prepareCall(sql1);
s.execute();
s.close();执行第二个SQL时出错:
java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00905: object MY_DB.FOO is invalid
ORA-06550: line 1, column 7:MY_DB是当前连接用户。在第一条语句之后,desc Foo无法从sqlplus中找到该过程。
如果在sqlplus中运行这两个语句,则不会出错。
发布于 2020-02-01 00:44:07
终止每个PL/SQL语句、声明和块需要分号。最外层的PL/SQL块
/字符结尾。;字符终止。< code >f29
在SQL/Plus (和SQL )中,终止字符用于表示可执行代码段的结尾(取决于用户界面的设置,空行也可以这样做)和下一个代码的开始。
在JDBC中,当调用一段代码时,不需要终止字符,因为每个调用只包含一个语句(用于SQL)或(外部)块(用于PL/SQL),而终止符将是多余的。因此,对于通过JDBC调用的PL/SQL语句,您不需要/来终止代码,但是需要;来终止代码所包含的语句、声明项和块(包括最外层的BEGIN/END块)。
所以你的代码应该是:
String sql = "create procedure foo(name varchar2) as " +
"begin " +
...
"end;";https://stackoverflow.com/questions/60012618
复制相似问题