【问题标题】:How to count values in pl/sql如何计算pl/sql中的值
【发布时间】:2021-03-25 02:01:41
【问题描述】:

我是 pl/sql 的新手,我正在尝试计算所有具有首字母“H”的员工
我的代码目前看起来像这样,但在第 24 行出现错误,COUNT(v_initials);

declare

    cursor cursor_employee
    is 
    select * from cmp_employer_employees
    where rownum < 25
    order by employer_employee_id asc
    ;
    
    v_initials varchar(100);
    v_count number := 0;
    
begin
    
    for r_employee in cursor_employee loop
    
        v_initials := r_employee.INITIALS;
    
        if v_initials like '%H' 
        then
        
            COUNT(v_initials);
        
        end if;
    
    end loop;

end;

【问题讨论】:

  • 你永远不会在 pl/sql 中真正做到这一点,因为它在 SQL 中得到了很好的优化。但是,您可以只声明一个数字变量(在declare 部分中),而不是count(这不是一个pl/sql 语句),并在每次if 条件被评估为真时将其加一。请记住,您的查询中有一个 rownum 过滤器,因此您不会计算所有匹配的行,除非您的表中的行数少于 25。

标签: oracle plsql count oracle-sqldeveloper plsqldeveloper


【解决方案1】:

你不需要循环 - 你可以从表中查询 count(*) 条件:

SELECT COUNT(*)
FROM   employees
WHERE  initials LIKE '%H'

编辑
要回答评论中的问题,您可以使用 insert-select 语句将这些员工收集到另一个表中:

INSERT INTO employees_with_h
SELECT * 
FROM   employees
WHERE  initials LIKE '%H'

或者,如果您只需要几个特定的​​列:

INSERT INTO employees_with_h (target_col1, target_col2, etc)
SELECT col1, col2, etc
FROM   employees
WHERE  initials LIKE '%H'

【讨论】:

  • 是的,我知道,但是否可以在 if 语句中使用 sql?
  • 如果首字母为“H”,是否可以插入新表?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 2017-08-30
相关资源
最近更新 更多