Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过jdbc创建的Oracle函数处于无效状态_Java_Sql_Oracle_Jdbc - Fatal编程技术网

Java 通过jdbc创建的Oracle函数处于无效状态

Java 通过jdbc创建的Oracle函数处于无效状态,java,sql,oracle,jdbc,Java,Sql,Oracle,Jdbc,当我在SQLDeveloper中创建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); 当我执行函数时: s

当我在SQLDeveloper中创建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:包或函数测试\u FUNC处于无效状态


你能解释一下我做错了什么吗?

使用它们需要遵守函数。未编译的函数会出现此异常。还要确保查询中没有任何终止CR/LF。将它复制到文本编辑器的文本板上,查看是否有。

好的,您是否查看了函数上的错误?从user_errors中选择*,其中name='TEST_FUNC'@EgorSkriptunoff它给出了:PLS-00103:在预期以下情况之一时遇到符号:开始函数包pragma过程子类型使用表单当前游标外部语言。当我在SQL Developer中创建相同的函数时,此查询不会显示任何错误。@ako您在生成填充SQL变量的字符串的Java代码中有错误-将生成SQL变量的实际Java代码传递给stmt.executesql。这就是您遇到的符号的来源。只需执行System.out.printlnsql-当您尝试在SQLDeveloper中编译该输出时,它可能会向您指出错误所在。@Brian我使用freemarker从文件中读取sql。我在我的问题中发布了文件的文本。当我复制粘贴到SQL时,开发者函数的创建和执行都没有任何错误。如何通过jdbc编译函数?我尝试了stmt.executeatter函数TEST\u FUNC compile,但没有帮助。是的,我在查询中有CR/LF,因为我是从文件中读取的。他们在甲骨文中是被禁止的吗?我会说,是的。不过我还是想试试。谢谢你的提示。在移除所有CR/LF功能后。谢谢。这救了我一天