2015-07-01 62 views
1

我有一個名爲BARCODEVARCHAR2)列的表;它有一個值爲CORE-BARCODE1的記錄。PLSQL搜索與VARCHAR2

當我運行以下PL/SQL語句:

declare 
    num_lines INT; 
begin 
    SELECT COUNT (*) into num_lines 
     FROM CORE.SAMPLE s 
     WHERE s.barcode = 'BARCODE1'; 
    DBMS_OUTPUT.PUT_LINE(TO_CHAR(num_lines)); 
end; 

如所預期的零被打印出來;但是如果我修改這包括VAR進行搜索,如圖所示:

declare 
    num_lines INT; 
    barcode varchar2(56); 
begin 
    barcode := 'BARCODE1'; 
    SELECT COUNT (*) into num_lines 
     FROM CORE.SAMPLE s 
     WHERE s.barcode = barcode; 
    DBMS_OUTPUT.PUT_LINE(TO_CHAR(num_lines)); 
end; 

這打印出1,但這是錯誤的;爲什麼當我使用一個變量(這顯然是錯誤的)時,它給了我一個1?

謝謝。

+0

好吧我把變量的名稱改爲xx,它的工作 - 但我仍然不明白爲什麼會發生? –

+6

可能是因爲's.barcode = barcode'有效地將列與自己進行比較,而不是您的'varchar2'變量? –

+0

作爲一個經驗法則,不要將變量命名爲列。有些人喜歡在前面添加「v_」來區分變量和列。 –

回答

3

通過改變變量名XX它的工作,因爲previosuly查詢是像下面

Select count (*) into num_line 
from core.sample s 
where 1=1 

就像1=1條件s.barcode= barcode是所有行真。如果你添加更多的行到表中,你將得到總行數的條件s.barcode=barcode