【发布时间】:2014-01-31 16:40:47
【问题描述】:
当我在 SQL Developer 中创建 Oracle 的函数时,一切正常,但是当我通过 jdbc 创建相同的函数时,它处于无效状态
这里是函数示例:
create or replace function TEST_FUNC return number is
begin
return 100;
end;
Java 代码:
Connection con = ...;
Statement stmt = con.createStatement();
stmt.execute(sql);
当我执行函数时:
select TEST_FUNC() from dual;
我收到错误:ORA-06575:包或函数 TEST_FUNC 处于无效状态
你能解释一下我做错了什么吗?
【问题讨论】:
-
嗯,你看看函数上的错误是什么?
-
select * from user_errors where name = 'TEST_FUNC' -
@EgorSkriptunoff 它给出:“PLS-00103:遇到符号“”当期望以下之一时:开始函数包杂注过程子类型类型使用
形成当前光标外部语言“。当我在 SQL Developer 中创建相同的函数时,此查询不会显示任何错误。 -
@ako 您在构建填充您的 sql 变量的字符串的 Java 代码中存在错误 - 发布构建传递给 stmt.execute(sql) 的 sql 变量的实际 Java 代码.这就是你的“遇到符号”的来源。只需执行 System.out.println(sql) - 当您尝试在 SQLDeveloper 中编译该输出时,它可能会跳出您的错误。
-
@Brian 我使用 freemarker 从文件中读取 sql。我在我的问题中发布了文件文本。当我将其复制粘贴到 SQL Developer 中时,函数已创建并执行,没有任何错误。