【发布时间】:2021-12-29 01:43:56
【问题描述】:
我有这个代码:
create view nombres_lab as
select L.NOMBRE_LAB, R.NOM_REG, count(*) as vacunas_suministradas
from LABORATORIOS L
inner join CREA_VACUNAS CV on l.cod_lab = cv.cod_lab
inner join vacunas V on cv.cod_vac = v.cod_vac
inner join vtorio VT on v.cod_vac = vt.cod_vac
inner join datos_vac_sum DVS on vt.cod_vtorio = dvs.cod_vtorio
inner join frasco_vac FV on dvs.s_unica = fv.s_unica
inner join direccion D on vt.cod_dir = d.cod_dir
inner join region R on d.cod_reg = r.cod_reg
where v.cod_vac = 100202 or v.cod_vac = 100303
group by l.nombre_lab, r.nom_reg;
create or replace procedure ranking is
begin
select nombre_lab, nom_reg, count(*) as vacunas_suministradas, rank() over(order by count(*) desc) as ranking from nombres_lab group by nom_reg, nombre_lab;
end;
我一直在尝试将此选择转换为选择转换,以便它可以在过程中工作,但我尝试的任何方法都不起作用。
错误: PLS-00428: an INTO clause is expected in this SELECT statement
我知道只在过程中进行选择很奇怪,仅此而已,但我想知道它是否可能
【问题讨论】:
-
您希望该过程做什么?你不能有一个只是一个查询的过程。您可以将过程定义为具有
sys_refcursor类型的out参数,以便它将引用游标返回给调用者。但在这种情况下,将其定义为函数而不是过程可能更有意义。您在视图定义和查询中复制逻辑似乎很奇怪——也许您想在第一个视图之上创建第二个视图,而不是创建一个过程。 -
您遇到的错误是什么。 rank 函数中的 count(*) 似乎是个问题。您可以在 CTE 中单独执行此操作,然后再执行 rank() ....