0

Select 1 from dual ステートメントを使用して、システムに入る新しいデータが実際に新しいかどうかを確認しています。新しい場合は挿入され、そうでない場合はデータベースで更新されます。

sql.CommandText = "select 1 from dual where exists (select * from my table where hour = " + hour + " and zone = '" + zone+ "' and date = TO_DATE('" + mydate + "','DD-MM-YY'))"

ただし、問題は、ステートメントを実行した後、テーブルが完全に空であっても、条件が満たされていない場合でも 1 の値を返すことです。これはどのように起こりますか?VB、.NET Framework 3.5、および Oracle 10g を使用しています。

4

2 に答える 2

2

私は次のようなものを提案します

SELECT COUNT(*) AS cnt 
  FROM mytable m
 WHERE m.hour = hour 
   AND m.zone = zone
   AND m.date = TO_DATE( mydate,'DD-MM-YY'))
   AND ROWNUM = 1

結果は 0 または 1 になります。行の存在のみを気にROWNUM = 1するため、一致するエントリが見つかるとすぐにクエリが終了し、テーブル全体をスキャンできなくなります。

于 2012-09-28T23:39:33.480 に答える
0

sign(count(1))カウントを取得するために使用できます。

select sign(count(1)) cnt 
from my_table 
where hour = " + hour + " and zone = '" + zone+ "' 
    and date = TO_DATE('" + mydate + "','DD-MM-YY'))" 
于 2012-09-28T22:20:27.137 に答える