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中运行这两个语句,则没有错误。
/
字符终止。;
字符结尾。在SQL / Plus(和SQL Developer)中,终止字符用于表示可执行代码的结尾(根据用户界面的设置,空白行也可以这样做)和下一个开始。
在JDBC中,当您调用一段代码时,您不需要终止符,因为每个调用仅包含一个语句(对于SQL)或(外部)块(对于PL / SQL),并且终止符是多余的。因此,对于通过JDBC调用的PL / SQL语句,您不需要/
终止代码,但确实需要;
终止代码所组成的语句,声明和块(包括最外面的BEGIN
/ END
块)。
因此,您的代码应为:
String sql = "create procedure foo(name varchar2) as " +
"begin " +
...
"end;";