我有下表,其中状态列值将在执行信息工作流时动态更新。
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.
答案 0 :(得分:0)
你在SQL服务器上运行它在哪里?我无法想象你的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