2

次の表では、インフォマティカ ワークフローが実行されるとステータス列の値が動的に更新されます。

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')

特定の行 (この例では id=4) の Status 列の値が 3 になったときに、サンプル製品などのテーブルからすべての行を表示する必要があります。Oracle SQLでこれを行う方法。SQLサーバーでこの問題の汚い解決策を得ました

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 に変わります。

4

3 に答える 3

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を複数回実行するにはどうすればよいですか。

于 2013-10-21T20:34:28.193 に答える
0

SQLサーバーのどこでこれを実行していますか?? 何かが変わるまでループで何度も何度もクエリを実行しているので、DBAがこれに非常に満足しているとは思えません...

PL/SQL ブロックを使用してこれを行うことはできますが、どこかでスリープせずに 1 秒あたり何百もの select ステートメントを実行しているため、そうすべきではありません。

Oracle と SQL サーバーの両方でトリガーを使用して、行が変更されたときに何かを実行できます。

たとえば、SQL サーバーで SQL エージェント ジョブを実行できます 。サーバーエージェントジョブフロムトリガー

または、Oracle の dbms_job: JOB をトリガー内で動的に作成できますか?

実際には、インフォマティカのジョブに依存するタスクを設定する必要があります。それができない場合は、必要なことを行う小さな外部 C# またはアプリ (または何か) を使用して、30 秒ごとにテーブルをポーリングします...

于 2013-10-18T20:06:24.510 に答える
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
于 2013-10-22T19:51:42.490 に答える