【发布时间】:2015-07-01 13:25:35
【问题描述】:
我有一个表,其中有一列名为 BARCODE (VARCHAR2);它有一个值为CORE-BARCODE1 的记录。
当我运行以下 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(这显然是错误的)?
谢谢。
【问题讨论】:
-
好的,我将变量的名称更改为 xx 并且它起作用了 - 但是我仍然不明白为什么会发生这种情况?
-
可能是因为
s.barcode = barcode有效地将列与其自身进行比较,而不是您的varchar2变量? -
根据经验,不要将变量命名为与列相同的名称。有些人喜欢在前面加上“v_”来区分变量和列。
-
更多解释here;不太确定这个问题是重复但相同的问题。
-
我认为你所说的某种匈牙利符号正在解决它,我同意它将它与列进行比较