2012-02-20 11 views
0
select count(*) into dup_row_count from tablea ; 

if dup_row_count is not null then 
    total_row_count :=1; 
else 
    total_row_count :=2; 
end if; 

上記のクエリでは、select文にデータが存在しない場合はelse条件が機能しません。ストアドプロシージャの選択結果を見つける方法

選択クエリの検索方法を教えてください。その結果に基づいて、if else条件を変更できるようにしてください。 (Oracleデータベース - ストアド・プロシージャ)

答えて

3

COUNT(*)は決してNULLを返しません。

select count(*) 
    into dup_row_count 
    from tablea ; 

は、テーブルに行がない場合は0を返します。あなたが気にすべてが任意の行があるかどうかである場合ので、あなたのIF文が

if dup_row_count > 0 then 
    total_row_count :=1; 
else 
    total_row_count :=2; 
end if; 

ような何かになりたいと思い、しかし、潜在的に

select count(*) 
    into dup_row_count 
    from tablea 
where rownum < 2; 

ような何かをするために、より効率的ですデータベースは、最初に見つかった行のカウントを停止することができます。

+0

'rownum <2'の例で詳しく説明すると、次のように' if'文が不要になると思います: 'rownum <2;'でtableauからtotal_row_countにcount(*もちろん、 'dup_row_count'は' total_row_count'の計算だけでなく他の場所でも必要です。 –

1

はあなたがif... else条件を必要としないこの場合

select decode(count(*),0,2,1) 
    into dup_row_count 
    from tablea ; 

以下のようにSQLを修正することができます。これは、デコード機能によって処理されます。

関連する問題