【问题标题】:PL/SQL count(*) behaves differently in SQLPL/SQL count(*) 在 SQL 中的行为不同
【发布时间】:2013-07-16 08:02:08
【问题描述】:

我有一张空桌子。

如果我执行

select count(*) from table;

返回0;

但是在 PL/SQL 中,Sql*Plus

declare
   c number;
begin
   select count(*) into c from table;
   dbms_output.put_line(c);
end;

返回 572。

发生了什么事?

------------------------------已解决- ---------------------------------

所以我不得不这样做

delete from table;

在 Sql*Plus 中,而不是在 Toad 中。

但是,我在他们两个中都运行了提交..

【问题讨论】:

  • 您是否以同一个用户(即在同一个表空间中)运行查询?
  • count(*) 是 SQL,即使 SQL 包含在 PL/SQL 中
  • 是的,我以同一用户身份运行查询。

标签: sql oracle plsql sqlplus


【解决方案1】:

提交或回滚事务。看来您一直在使用桌子。没有提交/回滚在不同的会话中你会有不同的结果。

【讨论】:

  • @otisonoza 你必须连接到不同的模式。请运行这两个代码是 SQL*Plus 中的一个新会话
【解决方案2】:

您确定 SQL 表中有行吗? SQL 选择的语法看起来是正确的。我想“表”将是您的表名,例如:tblProducts? "Table" 是 MS SQL 中的保留键

【讨论】:

  • 表格有0行,所以第一个例子是正确的。
【解决方案3】:

尝试使用即:

DECLARE
   c NUMBER(10) := 0;

然后:

SELECT COUNT(1) INTO c FROM table;

【讨论】:

  • -1 ... count(1) 给出与 count(*) 完全相同的结果,但认为有性能(或任何功能)优势是一个神话。
  • 它仍然返回 572。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多