Oracle PL/SQL - 由其他团队调用的用于插入数据的过程。正在从 Java 调用过程
Posted
技术标签:
【中文标题】Oracle PL/SQL - 由其他团队调用的用于插入数据的过程。正在从 Java 调用过程【英文标题】:Oracle PL/SQL - a procedure called by some other team to insert data. Procedure is being called from Java 【发布时间】:2015-07-30 04:33:03 【问题描述】:过程的内容 - 只有两个通过 IN 参数插入的直接插入语句。 当必须插入一行时,该过程将每秒执行一次。这是一种充电。如果您充值,详细信息将由其他团队通过 java (callable statement) 发送给我们。通常当 CPU 较低时,我们可以看到该过程的 10-15 个会话(在 v$session 中)并且数据将被完美插入。当 CPU 有点高时,我们可以一次看到 80-90 个会话,每个会话在 2.3 秒后失效。在其他系统的java中插入需要时间并最终超时。
我希望我已经说明了这一点。 有没有其他方法可以纠正这个问题。除了通过程序。我尝试在 pl/sql 中使用 RECORD 概念,但实际上什么也没发生。
我的程序看起来像这样。
create procedure procedure_name (co1 IN varchar , col2 IN vvarchar.... col15 IN varchar)
x varchar2,
y varchar2,
z varchar2,
.
.
.
begin
x:=col1;
y:=col2;
.
.
.
insert into table1 (column1, column2 ,...) values (x,y,z..); commit;
if (x=15) then
insert into table2(column1,column2,..) values (x,y,z); commit;
exception
when others
..
end;
【问题讨论】:
我认为这更像是数据库配置问题而不是代码问题。 为什么在插入之前将 col1 分配给不同的变量名?当然你可以写insert into table1 values (col1, col2, col3...);
【参考方案1】:
java 连接应该被池化以避免这样的不便。可能您的数据库一次无法容纳这么多的连接,因为她可以访问的内存是有限的。
根据您的 Java 架构,您应该了解如何将连接池化以避免每个用户拥有一个连接。或许你可以从这里开始:http://docs.oracle.com/cd/B10500_01/java.920/a96654/connpoca.htm
否则,您的问题似乎是针对 DBA 的。你试过在https://dba.stackexchange.com/上问吗?
祝你好运 - 现在我认为无论如何你都能找到改善用户体验的方法。
【讨论】:
以上是关于Oracle PL/SQL - 由其他团队调用的用于插入数据的过程。正在从 Java 调用过程的主要内容,如果未能解决你的问题,请参考以下文章
Oracle PL/SQL Developer集成TFS进行团队脚本文件版本管理