小编Eos*_*rus的帖子

获取触发Oracle触发器的值

对Oracle触发器来说是一个新手.假设我在表emp中的插入上有一个触发器.有没有办法找出触发触发器的插入记录是什么.如果插入的记录是特定值,我希望触发器具有执行某些操作的代码.

oracle triggers plsql

7
推荐指数
2
解决办法
4488
查看次数

用户取消程序ORA-01013时出现异常

我们有一个处理数据库中大量记录的过程.现在有时如果程序花费的时间过长,则用户手动取消该程序,从而抛出ORA-01013 EXCEPTION.但是,我们仍然想知道在取消程序之前处理了多少记录.我们尝试生成在EXCEPTION WHEN OTHERS块中调用的日志,但该块中的任何代码似乎都不起作用.我们甚至试图通过PRAGMA INIT EXCEPTIONORA-01013 提出一个例外而无济于事.代码似乎达到了异常但不执行任何代码.我猜测,由于该过程被取消,EXCEPTION块中的代码没有时间做任何事情而只是关闭.

知道如何获取在取消程序之前处理的记录的计数?我可以尝试在每次commit发生时增加记录但是想知道是否有更好的方法来实现这一点

oracle plsql exception-handling oracle11g

5
推荐指数
1
解决办法
1752
查看次数

如何在java中打开文件之前等待Windows进程完成

我实现了一个监听器,它会通知我们是否在特定目录中收到新文件。这是通过轮询和使用 TimerTask 来实现的。现在程序的设置是,一旦收到新文件,它就会调用另一个 java 程序来打开该文件并验证它是否是正确的文件。我的问题是,由于轮询发生在指定的秒数后,可能会出现文件被复制到该目录中并因此被 Windows 锁定的情况。

这会引发 IOException,因为尝试打开它进行验证的其他 java 程序不能(“文件正在被另一个进程使用”)。

有没有办法我可以知道Windows何时完成复制,然后调用第二个程序从java进行验证?

如果有人需要代码片段来提供帮助,我将非常乐意发布代码片段。

谢谢

java io wait timertask

4
推荐指数
1
解决办法
6722
查看次数

比较表中的3个连续行

嗨,我有一个有趣的问题.我有一个员工表AS跟随

CREATE TABLE EMPLOYEE(
EMPLOYEE_ID INTEGER,
SALARY DECIMAL(18,2),
PAY_PERIOD DATE)
Run Code Online (Sandbox Code Playgroud)

现在,这些表中的员工中有些人每月获得报酬,有些是每周一次,有些是每两周一次,有些是每天一次.我们想要的是如果连续三个支付期的工资相等,找到一个指示'Y'的指标.让我们举个例子.

Employee   Pay_Period     Salary

  1         01/01/2012    $500
  1         08/01/2012    $200
  1         15/01/2012    $200
  1         22/01/2012    $200
  1         29/01/2012    $700
Run Code Online (Sandbox Code Playgroud)

在这种情况下,指标应为"是",因为连续3个工资期的薪水为200美元.

由于支付周期的数量不是恒定的,我不确定如何编写这段代码,因为我不知道我需要多少左连接.因为我在Teradata中写这个我尝试使用RECURSIVE函数但是难倒.关于如何继续这个的一般想法?我宁愿不创建存储过程或具有PL/SQL逻辑.

sql teradata

4
推荐指数
1
解决办法
2856
查看次数

强制Oracle在不使用提示的情况下使用主键索引

我们有一个应用程序,它生成一些临时表,然后处理数据.我真的无法控制应用程序创建它的方式以及后续的查询.我们注意到Oracle使用全表扫描而不是使用索引作为表的主键.如果它使用主键索引,则进程运行速度会快很多.

由于我无法控制应用程序生成的选择查询,因此无法使用提示并强制Oracle使用主键索引.是否有任何其他设置我可以在某处更改可能会强制Oracle使用临时表的主键索引?

oracle indexing optimization primary-key

3
推荐指数
1
解决办法
5160
查看次数

获得LEFT OUTER JOIN的第一行

我有3张桌子:

(SELECT DISTINCT ID
FROM IDS)a
LEFT OUTER JOIN
(SELECT NAME, ID
FROM NAMES)b
ON a.ID = b.ID
LEFT OUTER JOIN
(SELECT ADDRESS FROM ADDRESSES
WHERE ROWNUM <2
ORDER BY UPDATED_DATE DESC)c
ON a.ID = c.ID
Run Code Online (Sandbox Code Playgroud)

ID只能有一个名称,但可以有多个地址.我只想要最新的一个.即使存在地址,此查询也会将地址返回为null,因为它只会从表中获取第一个地址,然后尝试LEFT JOIN到它无法找到的地址ID.编写此查询的正确方法是什么?

sql oracle left-join

2
推荐指数
1
解决办法
2万
查看次数

更新游标列,然后使用该值进行选择

我有一个查询这样的表的游标

CURSOR Cur IS
       SELECT Emp_No,status
        from Employee
        FOR UPDATE OF status;
Run Code Online (Sandbox Code Playgroud)

现在我想使用Emp_no从另一个表更新Employee表中的状态.完成此操作后,我需要使用此状态来调用自定义业务逻辑,而不是光标检索的原始状态.解决这个问题的最佳方式是什么?这是我写的.顺便说一句,我声明了一个名为v_status的变量

 FOR Rec IN Cur LOOP

           BEGIN

           UPDATE Employee           
SET status = (select a.status from Employee_Status  where a.Emp_No = rec.Emp_No)
           WHERE CURRENT OF Cur ;
           COMMIT;

           END;

           SELECT status INTO v_status 
           FROM  Employee
           where Emp_No = rec.Emp_No;

            IF(v_status = 'Active') THEN
                   -- Custom Business Logic
                  ELSE  
            -- Business logic

            END IF;    
END LOOP;
Run Code Online (Sandbox Code Playgroud)

什么是更好的方法来实现这一目标?

oracle plsql cursor

0
推荐指数
1
解决办法
2万
查看次数