微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不能写 if 或 select above begin on a procedure

如何解决不能写 if 或 select above begin on a procedure

我正在为一个班级项目建立一个程序,我必须在其中发明一些与我的国家足球联赛相关的程序。现在我正在开发一个程序来显示比赛结果,在介绍了联赛回合和球队后,包括教练、球员、卡片和目标。问题是,我无法将回合的日期设置为我用 if 创建的变量,因为 if 结构上预期会出现以下错误之一(我只创建了两轮,所以这就是只有两个条件的原因),并且我无法从表中选择数据到我创建的其他变量中,这些变量用于存储不需要在光标上的数据,因为每场比赛、裁判姓名和教练姓名都是唯一的,但还有另一个“期待”错误。有什么帮助吗?先感谢您! PS:其余代码仍在开发中,所以可能有一些不完整的部分。 Arbitro 代表裁判,entrenador 代表教练或经理,nombre 代表姓名,partido 代表比赛 错误

enter image description here

create or replace PROCEDURE COMPROBARPARTIDO(JORNADA IN NUMBER,EQUIPO IN VARCHAR2) AS 

FECHA DATE;
ELOCAL VARCHAR2(30);
EVISITANTE VARCHAR2(30);
ARBIP VARCHAR2(30);
ASISTENTE VARCHAR2(30);
IF JORNADA = 1 THEN
FECHA:=4-03-2021;
ELSIF JORNADA = 2 THEN
FECHA:=13-03-2021;
ELSE
    DBMS_OUTPUT.PUT_LINE('ERROR');
END IF;

SELECT APR.NOMBRE INTO ARBIP,ASS.NOMBRE INTO ASISTENTE,ENL.NOMBRE INTO ELOCAL,ENV.NOMBRE INTO EVISITANTE
FROM  PARTIDO_JUGADOR PA
INNER JOIN PARTIDO P
ON PA.ID_PARTIDO = P.ID
INNER JOIN EQUIPO EL 
ON P.ID_LOCAL =EL.ID
INNER JOIN EQUIPO EV
ON P.ID_VISITANTE = EV.ID
INNER JOIN ENTRENADOR ENL
ON EL.ID_ENTRENADOR = ENL.ID
INNER JOIN ENTRENADOR ENV
ON EV.ID_ENTRENADOR = ENV.ID
INNER JOIN PARTIDO_ARBITRO PAR
ON P.ID = PAR.ID_PARTIDO
INNER JOIN ARBITRO APR
ON PAR.ID_ARBITROC = APR.ID
INNER JOIN ARBITRO ASS
ON PAR.ID_ARBITROA = ASS.ID
WHERE P.FECHA = FECHA AND (EQUIPO =EV.NOMBRE OR EQUIPO = EL.NOMBRE);


CURSOR C1 IS
SELECT J.NOMBRE,J.APELLIDO,EQ.NOMBRE
FROM PARTIDO P
INNER JOIN PARTIDO_JUGADOR PJ
ON P.ID = PARTIDO_JUGADOR.ID_PARTIDO
INNER JOIN JUGADOR J
ON PJ.ID_JUGADOR = J.ID
INNER JOIN EQUIPO EQ
ON J.ID_EQUIPO = EQ.ID
ORDER BY EQ.ID,J.COD_POSICION ;

BEGIN
  NULL;
END COMPROBARPARTIDO;

解决方法

关于我评论的结构:

create procedure as
  <declaration section>
begin
  <executable section>
end;

你把

  • 可执行语句 (if) 进入声明部分,然后
  • 后面有 select(无效……应该只有一个 into 关键字),并且
  • 惊喜! - 游标声明 (?)。顺便说一句,您“声明”了它,但从未使用过
  • 将日期称为日期;通过使用带有适当格式掩码的 to_date,或使用日期文字(就像我一样)

可能编译的代码(不知道,没有你的表格);看看有没有帮助。

CREATE OR replace PROCEDURE comprobarpartido(
  jornada  IN  NUMBER,equipo   IN  VARCHAR2
)
AS
  fecha       DATE;
  elocal      VARCHAR2(30);
  evisitante  VARCHAR2(30);
  arbip       VARCHAR2(30);
  asistente   VARCHAR2(30);

  CURSOR c1 IS
  SELECT j.nombre,j.apellido,eq.nombre
  FROM partido p
  INNER JOIN partido_jugador  pj ON p.id = partido_jugador.id_partido
  INNER JOIN jugador          j ON pj.id_jugador = j.id
  INNER JOIN equipo           eq ON j.id_equipo = eq.id
  ORDER BY eq.id,j.cod_posicion;

BEGIN 
  IF jornada = 1 THEN
     fecha := DATE '2021-03-04';
  ELSIF jornada = 2 THEN
     fecha := DATE '2021-03-13';
  ELSE
     dbms_output.put_line('ERROR');
  END IF;
  
  SELECT APR.NOMBRE,ASS.NOMBRE,ENL.NOMBRE,ENV.NOMBRE
    INTO ARBIP,ASISTENTE,ELOCAL,EVISITANTE
  FROM partido_jugador pa
  INNER JOIN partido          p   ON pa.id_partido = p.id
  INNER JOIN equipo           el  ON p.id_local = el.id
  INNER JOIN equipo           ev  ON p.id_visitante = ev.id
  INNER JOIN entrenador       enl ON el.id_entrenador = enl.id
  INNER JOIN entrenador       env ON ev.id_entrenador = env.id
  INNER JOIN partido_arbitro  par ON p.id = par.id_partido
  INNER JOIN arbitro          apr ON par.id_arbitroc = apr.id
  INNER JOIN arbitro          ass ON par.id_arbitroa = ass.id
  WHERE p.fecha = fecha
    AND (   equipo = ev.nombre
         OR equipo = el.nombre
        ); 
END comprobarpartido;
,

根据条件设置声明值,可以使用case。例如:

fecha date := 
    case jornada
        when 1 then date '2021-03-04'
        when 2 then date '2021-03-13'
    end;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?