2012-02-20 59 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語句,然後,如果其他條件不工作。如何找到選擇的結果在存儲過程

請你可以幫助我如何找到選擇查詢給出任何結果或不這樣做,在那個基礎上,我可以改變我的if else條件。 (Oracle數據庫 - 存儲過程)

回答

3

A 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

詳細說明你的'where rownum <2'的例子,我認爲下面的內容應該不需要使用'if'語句:'從rownum <2;'的表中選擇2 - count(*)into total_row_count,除非,當然,'dup_row_count'在其他地方也是需要的,以及用於計算'total_row_count'。 – 2012-02-20 09:33:06

1

您可以修改SQL如下

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

在這種情況下,你不需要if... else條件。這由解碼功能處理。