如何在oracle SQL中执行此方案

时间:2013-10-18 19:30:17

标签: sql oracle11g

我有下表,其中状态列值将在执行信息工作流时动态更新。

CREATE TABLE [dbo].[logging](
[id] [int] NULL,
[workflow] [nvarchar](20) NULL,
[status] [int] NULL
    ) ON [PRIMARY]
insert into dbo.logging values(2,'wf_d','5')
insert into dbo.logging values(3,'wf_d','6')
insert into dbo.logging values(4,'wf_d','4')

我需要显示某些表中的所有行,例如示例产品,当Status列的值变为特定行的3时(在此示例中,id = 4)。如何在oracle SQL中执行此操作。 我在SQL server

中遇到了这个问题的脏解决方案
DECLARE @compareprice int
label:
set @compareprice = (select status from logging where id=4)
if (@compareprice = 3)
select * from dbo.products;
else
goto label;

在执行此代码的某个时刻,表记录中id = 4的状态代码将变为3.

3 个答案:

答案 0 :(得分:0)

你在SQ​​L服务器上运行它在哪里?我无法想象你的DBA会对此感到非常高兴,因为你在循环中反复执行一个查询,直到发生变化......

您可以使用PL / SQL块来执行此操作,但实际上您不应该这样做,因为您每秒执行数百个select语句而不会在某处睡眠。

您可以在oracle和SQL Server中使用触发器,以便在行更改时执行某些操作。

例如,您可以在SQL Server中运行SQL代理作业: http://social.msdn.microsoft.com/Forums/en-US/b672ee45-7198-4783-8143-2908f8a954d2/how-to-execute-sql-server-agent-job-from-trigger

oracle中的dbms_job: Can a JOB be created dynamically inside a trigger?

真的,你应该设置一个取决于信息工作的任务。如果做不到这一点,每隔30秒用一点外部C#或应用程序(或其他东西)轮询桌面就可以做到你想要的......

答案 1 :(得分:0)

X=$(sqlplus -s user/pass << !
set heading off
set feedback off
select status from logging where id=4;
)
echo $X
if [ $X -eq 3 ]; 
 then
  (sqlplus -s user/pass << !
    set heading off
    set feedback off
        select * from products;
)
fi

这是您所指的选项吗?现在我如何多次运行SQL,直到满足条件。

答案 2 :(得分:0)

#!/bin/sh
start() {
v=`sqlplus -s <<!
HR/HR
set pages 0 echo off feed off
select distinct status from
emp
where
id=5;
!
`
echo $v;

}
while :
do
  rval=`start`
  if [ "$rval" -eq 4 ]
  then
    echo if condition true
    sqlplus -l scott/tiger <<EOF
    select * from department;
    EXIT
EOF
    break
  else
     sleep 30
  fi
done