【问题标题】:count(*) cannot be selected in PL/SQL在 PL/SQL 中不能选择 count(*)
【发布时间】:2015-01-14 17:14:47
【问题描述】:
DECLARE
  rec_count integer default 0;
  str varchar(100);
BEGIN
    str := 'select count(*) into ' || rec_count ||' from emp_table';
    EXECUTE IMMEDIATE (str);
    dbms_output.put_line(rec_count);
END;

我无法在 rec_count valibale 中获得计数。我收到 ORA-00905 消息。

我必须在我的脚本中添加这些行,所以 sql 语句应该是这样的。 我会将行程名称传递给该脚本,它会返回该表的计数。

提前致谢。

【问题讨论】:

    标签: oracle plsql


    【解决方案1】:

    你必须像下面这样使用

    DECLARE
      rec_count integer default 0;
      str varchar(100);
    BEGIN
        str := 'select count(*) from emp_table';
        EXECUTE IMMEDIATE str into rec_count;
        dbms_output.put_line(rec_count);
    END;
    

    into 子句必须在execute immediate 之后使用。请参阅此处http://docs.oracle.com/cd/B12037_01/appdev.101/b10807/13_elems017.htm 了解更多信息

    【讨论】:

    • 感谢@Exhausted 的帮助。我对此还有另一个问题,如何通过 sqlplus 在命令行中查看过程的输出。
    • 您必须使用set serveroutput on。你看到我的回答了吗?
    • @abidkhan303 是的,正如 Lalith 所说的
    【解决方案2】:

    正确的方法是EXECUTE IMMEDIATE str into rec_count;INTO 子句必须在您执行 EXECUTE IMMEDIATE 时使用。

    SQL> set serveroutput on
    SQL> DECLARE
      2    rec_count integer default 0;
      3    str varchar(100);
      4  BEGIN
      5      str := 'select count(*) from emp';
      6      EXECUTE IMMEDIATE str into rec_count;
      7      dbms_output.put_line(rec_count);
      8  END;
      9  /
    14
    
    PL/SQL procedure successfully completed.
    
    SQL>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 2016-05-21
      • 2012-06-17
      • 2021-11-29
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多