【问题标题】:PLSQL Search with VARCHAR2使用 VARCHAR2 进行 PLSQL 搜索
【发布时间】: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;不太确定这个问题是重复但相同的问题。
  • 我认为你所说的某种匈牙利符号正在解决它,我同意它将它与列进行比较

标签: oracle plsql


【解决方案1】:

通过将变量名称更改为 xx 它可以工作,因为之前的查询如下所示

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

就像1=1 一样,条件s.barcode= barcode 对所有行都为真。如果您向表中添加更多行,您将获得条件为s.barcode=barcode的总行数@

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 2013-10-29
    • 2016-05-24
    • 2011-02-27
    • 2012-03-09
    相关资源
    最近更新 更多