You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PL/SQL函数同时统计数据库中男女学生的人数?

实现同时返回男女学生人数的PL/SQL函数

没问题,我来帮你把这个函数改造成能同时返回男女生人数的版本。在PL/SQL里,要返回多个值有几种常用的方法,我给你分享两个最实用的方案:

方案1:使用OUT参数直接返回两个数值

这种方式适合你只需要单独获取男、女生人数的场景,调用时可以直接拿到两个独立的变量值:

函数创建代码

create or replace function total_students(
    total_male out number,
    total_female out number
) return void is
begin
    -- 一次扫描表完成统计,比两次查询效率更高
    select 
        count(case when gender = 'Male' then 1 end),
        count(case when gender = 'Female' then 1 end)
    into total_male, total_female
    from New_Student;
end;
/

调用示例

declare
    v_male number;
    v_female number;
begin
    total_students(v_male, v_female);
    dbms_output.put_line('男性学生人数: ' || v_male);
    dbms_output.put_line('女性学生人数: ' || v_female);
end;
/

方案2:返回自定义记录类型

如果你需要把男女生人数作为一个结构化的结果返回(比如在其他PL/SQL模块中复用这个结果结构),可以定义一个自定义记录类型,让函数返回该类型的实例:

步骤1:创建自定义记录类型

create or replace type student_gender_stats is record(
    male_count number,
    female_count number
);
/

步骤2:创建返回该记录的函数

create or replace function get_gender_student_count return student_gender_stats is
    stats student_gender_stats;
begin
    select 
        count(case when gender = 'Male' then 1 end),
        count(case when gender = 'Female' then 1 end)
    into stats.male_count, stats.female_count
    from New_Student;
    return stats;
end;
/

调用示例

declare
    result student_gender_stats;
begin
    result := get_gender_student_count();
    dbms_output.put_line('男性学生人数: ' || result.male_count);
    dbms_output.put_line('女性学生人数: ' || result.female_count);
end;
/

补充说明

  • 两种方案都只需要扫描一次New_Student表,比分开两次查询统计的效率更高;
  • 如果你的数据库中存在其他性别选项,可以考虑使用GROUP BY gender来统计所有性别的人数,但根据你的需求,上面的代码已经足够覆盖男女的统计;
  • 方案1中的return void需要Oracle 12c及以上版本支持,如果你使用的是旧版本,可以让函数返回一个默认值(比如return 0),实际结果通过OUT参数传递。

内容的提问来源于stack exchange,提问作者Lenz Vital

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:48:07