Plsql 如何获取输出以显示PL/SQL游标

Plsql 如何获取输出以显示PL/SQL游标,plsql,Plsql,我试图使用光标来标识每种工作类型的计数。如果可能的话,我只想显示具有最高计数的作业类型,但也可以让输出显示每个作业类型的计数。到目前为止,我有以下代码,但不确定如何创建输出。任何帮助都将不胜感激 DECLARE CURSOR job_cursor IS SELECT job, count(job) from BANK_DATA group by job; v_job job_cursor%rowtype; BEGIN OPEN job_cursor; fetch job_cursor int

我试图使用光标来标识每种工作类型的计数。如果可能的话,我只想显示具有最高计数的作业类型,但也可以让输出显示每个作业类型的计数。到目前为止,我有以下代码,但不确定如何创建输出。任何帮助都将不胜感激

DECLARE
CURSOR job_cursor IS
SELECT job, count(job) from BANK_DATA group by job;
v_job job_cursor%rowtype; 

BEGIN
OPEN job_cursor;
fetch job_cursor into v_job;
CLOSE JOB_CURSOR;
END;

根据“显示”的含义,一个选项是简单地在屏幕上显示它

该示例基于Scott的示例模式,即其EMP表。店员和推销员是最常见的工作,所以-你应该把它们都展示出来

SQL> set serveroutput on
SQL> select job, count(*) cnt
  2  from emp
  3  group by job
  4  order by cnt desc;

JOB              CNT
--------- ----------
CLERK              4
SALESMAN           4
MANAGER            3
ANALYST            2
PRESIDENT          1
以下是方法:

内联视图第6-10行使用秩分析函数,该函数。。。嗯,按发生次数对工作进行排序 listagg函数聚合它们,即连接值 结果存储到本地声明的变量中,该变量使用dbms_output.put_行显示
我已经稍微修改了您的代码以符合您的要求

SET SERVEROUTPUT ON; -- To enable printing on console

DECLARE

    CURSOR job_cursor IS
    SELECT job, count(job) as count_job from BANK_DATA group by job; --An alias has been added to count(job) for smooth functioning with cursor

    v_job job_cursor%rowtype;

    job_typ varchar(20); -- name of job with highest count
    job_cnt number; -- frequency of job with highest count

BEGIN
    job_typ := '';
    job_cnt := 0;
    --OPEN job_cursor; -- FOR Loop takes care of opening cursor so you don't need to explicitly do that via your code
    --fetch job_cursor into v_job; -- FOR Loop takes care of fetching cursor so you don't need to explicitly do that via your code
    FOR v_job IN job_cursor
    LOOP
        dbms_output.put_line( v_job.job || ' ' ||  v_job.count_job ); -- It prints all jobs with the count of each job type
        IF(job_cnt<v_job.count_job) THEN
            job_cnt:= v_job.count_job;
            job_typ := v_job.job;
        END IF;
    END LOOP;
    dbms_output.put_line( 'Highest counted job is ' || job_typ || ' ' ||  job_cnt); -- It prints job with the highest count
    --CLOSE job_cursor; -- FOR Loop takes care of opening and closing cursor so you don't need to explicitly do that via your code
END;

希望有帮助!:

如果需要游标,只需使用游标语句即可。那么您就不需要变量了:

BEGIN
    FOR ds IN (
        SELECT job
        FROM (
            SELECT job, RANK() OVER (ORDER BY COUNT(1) DESC) as rnk
            FROM bank_data
            GROUP BY job
        )
        WHERE rnk = 1
     )
     LOOP
         DBMS_OUTPUT.PUT_LINE(ds.job);
     END LOOP;
END;
/
BEGIN
    FOR ds IN (
        SELECT job
        FROM (
            SELECT job, RANK() OVER (ORDER BY COUNT(1) DESC) as rnk
            FROM bank_data
            GROUP BY job
        )
        WHERE rnk = 1
     )
     LOOP
         DBMS_OUTPUT.PUT_LINE(ds.job);
     END LOOP;
END;
/