JAVA执行ORACLE存储过程的问题,为啥一直会报错?请各位高手帮帮忙,比较急

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA执行ORACLE存储过程的问题,为啥一直会报错?请各位高手帮帮忙,比较急相关的知识,希望对你有一定的参考价值。

后台代码如上图
存储过程是这样的
create or replace package pkg_pv isprocedure set_pv(pv varchar2);
function get_pv return varchar2;
procedure set_pv1(pv1 varchar2);
function get_pv1 return varchar2;
end;
create or replace package body pkg_pv isv varchar2(20);
v1 varchar2(20);
procedure set_pv(pv varchar2) is begin v:=pv;
end;
function get_pv return varchar2 is begin return v; end;
procedure set_pv1(pv1 varchar2) is begin v1:=pv1;
end;
function get_pv1 return varchar2 is begin return v1; end;
end;
begin pkg_pv.set_pv('大盈江一级');
pkg_pv.set_pv1('2012-07');
end;
select * from v_emp;
我在PLSQL中是能执行的 但到了JAVA中已执行就报如下错误:
org.springframework.jdbc.BadSqlGrammarException: Hibernate-related JDBC operation; bad SQL grammar []; nested exception is java.sql.SQLException: ORA-06550: 第 1 行, 第 7 列:
PLS-00201: 必须声明标识符 'ORCL.PKG_PV'
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored

参考技术A 存储过程里有两个参数,而你调用的时候只有一个参数‘sql’ 参考技术B 存储过程的关键字是package? 错了吧 package不是包吗 怎木成存储过程了 参考技术C PLS-00201: 必须声明标识符 'ORCL.PKG_PV'
这不是告诉你了吗 读不到 这个东西 你java 连接数据库的数据源用什么用户连接,是不是权限不够,看不到这个包。还有 你那调用存储过程是怎么调用的? 你那sql里面的内容是什么?

多线程调用oracle存储过程是不是并发执行?

我用delphi写了一个多线程的程序。主要用来实时收集数据,并经过处理后放入数据库中(多线程的),并把结果发回去。我的主要处理过程(主要是查询,判断)和写数据库都放到了存储过程中,但是发现程式执行起来对DB的负担很重,经常这个程式要占70%的cup资源。
所以我想是否多线程调用存储过程时,如果同时有多条线程要调,是否都会放到缓冲中等待前一个线程调用完了,再执行?而不是并发的执行!
请告诉我如果两个程式同时调用oracle存储过程会怎样?
大家有知道的吗?谢谢

这个问题非常简单
所谓的oracle存储过程,无非就是把大量的SQL集中在一起加入了变量循环等。

简单地看它就也就是对几个数据库对象的访问。

我们知道oracle数据库对象的访问是有锁机制的,同一时间内

只有一个用户能访问这样的对象,(最底的行级锁)

可以想象如个2个人同时对一个对象的同一个内容进行处理那

是不可能的。

锁只能被一个用户保持,这是规矩

当然这都是oracle 内部机制,如果多线程调用并非完全相同的内容,锁的竞争不是那么明显当然能够提升处理速度的。
参考技术A 并发性
是指两个或多个在同一
时间间隔
内发生。在多道程序环境下,并发性是指宏观上在一段时间内有多道程序在同时执行。但在单处理机系统中,每一个时刻CPU仅能执行一道
程序
,故微观上,这些程序是在CPU上交互执行

以上是关于JAVA执行ORACLE存储过程的问题,为啥一直会报错?请各位高手帮帮忙,比较急的主要内容,如果未能解决你的问题,请参考以下文章

oracle job一直运行

oracle存储过程中update语句一直在执行中,无法更新完成

执行存储过程为啥其中的中文变成了乱码.该怎么解决

oracle 执行存储过程 无法中断 但是是循环执行 怎么办

存储过程EXECUTE IMMEDIATE V_SQL执行很慢或出不来,如果把V_SQL语句拿出来单独执行很快,这是为啥?

Java:在 oracle 数据库中调用存储过程