我正在使用Oracle DB Server,并且我有一个存储过程,它将由不同的流并行执行。这个存储过程使用数据库中的一个表来插入和删除记录。在存储过程中的某个时刻,我希望它暂停一段时间,然后执行。
我可以编写什么语句来暂停存储过程一段时间,而不锁定它正在使用的表?
在Oracle存储过程中有哪些替代方案可以实现这种功能?
我可以使用DBMS_LOCK.SLEEP(seconds)吗?正如我所说的,不同的流并行使用同一个表,这个DBMS_LOCK.SLEEP(n)过程会在存储过程暂停时锁定表吗?当存储过程处于睡眠状态时,它是否会消耗CPU周期?
除了使用Oracle DB Server中的DBM
我在Oracle数据库中有一个表,当插入一行时,触发器会自动填充三列。为了在insert发生时检索这些值,我使用了一些过程代码,但它不是作为命名存储过程存在的。代码看起来像这样,但是有更多的输出。
DECLARE widgetId NUMBER;
BEGIN INSERT INTO widget(foo) VALUES('bar')
RETURNING widget_id INTO widgetId;
END;
Spring JdbcTemplate是否提供了任何干净、方便的方式来调用该代码?我看到了JdbcTemplate支持调用存储过程的地方,但这似乎要求代码驻留在数据库中
有谁能告诉我,在Oracle中是否有任何方法可以找出存储过程的成本?如果没有直接的方法,我想知道任何替代品。
我发现成本的方法是自动跟踪存储过程中使用的所有查询,然后根据查询执行的频率估算proc成本。
除此之外,我还想提出一些优化存储过程的建议,特别是下面的查询。
程序的逻辑:
下面是用作存储过程中游标的动态sql查询。这个游标是在循环中打开和获取的。我获取信息并将其放入varray中,计数数据,然后将其插入到表中。
我的目标是找出程序的成本以及优化sp。
SELECT DISTINCT acct_no
FROM raw
WHERE 1=1
AND code = ''
我想从oracle合并查询返回主键。如果不存在,我将使用单个语句插入,并且我不希望使用过程或函数来这样做。
这是示例查询
merge into myTable e
using (select :empname name from dual) s
on (UPPER(TRIM(e.empname)) = UPPER(TRIM(s.name)))
when not matched then insert (empname)
values (s.name)
我需要获得myTable的另一个主键字段。使用序列和触发器插入主键。
我试着添加RETURNING empID into
Oracle EE 12.1.0.2
作为迁移之前对遗留应用程序进行常规清理的一部分,我试图确定实际使用的对象是什么。
我的数据库中有大约230个JAVA类对象。我可以查看DBA_DEPENDENCIES,查看java类之间的依赖关系在哪里存在。我可以查看DBA_SOURCE,找出哪些包包括短语'AS LANGUAGE JAVA‘,以找到包装JAVA类的包。我正在审核应用程序模式拥有的所有包的执行情况。但据我所知,您无法审计包中调用了哪些过程。
有办法审计java类本身的执行吗?在不封装PL/SQL过程的情况下,可以调用JAVA类吗?
我不是JAVA程序员(如果这不是显而易见的话)。
我在一个项目中工作,其中Oracle AQ已经实现。在这里,我们有两个队列表,我试图找出数据是如何插入到这些表中的。我确实检查了所有可用的触发器,但没有看到任何触发器将数据插入到该队列表中。
我试着用下面的查询用all_dependencies查找特定的队列表,但不是幸运。
select * from DBA_DEPENDENCIES DD
where DD.referenced_owner = 'XYZ' and
DD.name like 'XYZ' and
DD.type like 'TABLE'
谁能帮助我知道,如何
我有一个java程序,比较和移动数据从本地甲骨文数据库到外部的MS SQL数据库托管的在线供应商。
目前,该程序连接到MS数据库,执行SELECT * FROM myTABLE并将结果放入一个二维数组中。然后在Oracle中创建临时表,并使用for循环将数据插入到临时表中:
for (int ii = 0; ii < arr.length(); ii++){
query = "insert into myTable_temp values "+values_from_array;
stmt.executeQuery();
}
使用MINUS语句找出差异: