PLSQL IF 是不是这样写?

-一个大坑 2017-07-31 03:07:21

SELECT A.OPTYPE
INTO E_OPTYPE
FROM APP_NOMAPPING A
WHERE A.DERIVENO = E_APPNO;

IF E_OPTYPE == 'ORI' THEN
SELECT A.APPNO,
A.APPDT,
A.RIDE_STARTTIME,
REGEXP_REPLACE(LISTAGG(B.CITYFROM || B.ADDFROM, '-->') WITHIN
GROUP(ORDER BY B.CITY_SEQ),
'([^,]+)(-->\1)+',
'\1') AS ADDFROM,
C.MAIL
INTO E_TEST,E_APPDT,E_RIDE_STARTTIME,E_ADDFROM,E_MAILADDRESS
FROM APP_MAIN A, APP_SCHEDULE B, EMPLOYEE C
WHERE A.APPNO = E_APPNO
AND A.APPNO = B.APPNO
AND A.APPEMPLID = C.EMPLID
GROUP BY A.APPNO, A.APPDT, A.RIDE_STARTTIME, C.MAIL; --原始單

ELSE IF E_OPTYPE == 'SEP' THEN
SELECT A.APPNO,
B.APPDT,
B.RIDE_STARTTIME,
REGEXP_REPLACE(LISTAGG(C.CITYFROM || C.ADDFROM, '-->') WITHIN
GROUP(ORDER BY C.CITY_SEQ),
'([^,]+)(-->\1)+',
'\1') AS ADDFROM,
D.MAIL
INTO E_TEST,E_APPDT,E_RIDE_STARTTIME,E_ADDFROM,E_MAILADDRESS
FROM APP_NOMAPPING A, APP_MAIN B, APP_SCHEDULE C, EMPLOYEE D
WHERE A.DERIVENO = E_APPNO
AND A.APPNO = B.APPNO
AND C.APPNO = B.APPNO
AND B.APPEMPLID = D.EMPLID
GROUP BY A.APPNO, B.APPDT, B.RIDE_STARTTIME, D.MAIL; --拆單

IF E_OPTYPE == 'SPE' THEN
--其余的

END IF;
...全文
276 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
-一个大坑 2017-07-31
  • 打赏
  • 举报
回复
引用 1 楼 chengccy 的回复:
把else if 换成 elsif
不行,直接报错
-一个大坑 2017-07-31
  • 打赏
  • 举报
回复
引用 2 楼 mayanzs 的回复:
用单个等于号 IF E_OPTYPE = 'SPE' THEN ...... ELSE ....... END IF;

  SELECT A.OPTYPE
    INTO E_OPTYPE
    FROM APP_NOMAPPING A
   WHERE A.DERIVENO = E_APPNO;
   
   IF E_OPTYPE = 'ORI' THEN
     SELECT A.APPNO,
       A.APPDT,
       A.RIDE_STARTTIME,
       REGEXP_REPLACE(LISTAGG(B.CITYFROM || B.ADDFROM, '-->') WITHIN
                      GROUP(ORDER BY B.CITY_SEQ),
                      '([^,]+)(-->\1)+',
                      '\1') AS ADDFROM,
       C.MAIL
       INTO E_TEST,E_APPDT,E_RIDE_STARTTIME,E_ADDFROM,E_MAILADDRESS
  FROM APP_MAIN A, APP_SCHEDULE B, EMPLOYEE C
 WHERE A.APPNO = E_APPNO
   AND A.APPNO = B.APPNO
   AND A.APPEMPLID = C.EMPLID
 GROUP BY A.APPNO, A.APPDT, A.RIDE_STARTTIME, C.MAIL; --原始單
 
 ELSE IF E_OPTYPE = 'SEP' THEN 
  SELECT A.APPNO,
         B.APPDT,
         B.RIDE_STARTTIME,
         REGEXP_REPLACE(LISTAGG(C.CITYFROM || C.ADDFROM, '-->') WITHIN
                        GROUP(ORDER BY C.CITY_SEQ),
                        '([^,]+)(-->\1)+',
                        '\1') AS ADDFROM,
         D.MAIL
         INTO E_TEST,E_APPDT,E_RIDE_STARTTIME,E_ADDFROM,E_MAILADDRESS
    FROM APP_NOMAPPING A, APP_MAIN B, APP_SCHEDULE C, EMPLOYEE D
   WHERE A.DERIVENO = E_APPNO
     AND A.APPNO = B.APPNO
     AND C.APPNO = B.APPNO
     AND B.APPEMPLID = D.EMPLID
   GROUP BY A.APPNO, B.APPDT, B.RIDE_STARTTIME, D.MAIL; --拆單
   
   END IF;
我写end if;怎么还提示 Compilation errors for PROCEDURE SENDCAR.P_SENDCARMAIL Error: PLS-00103: Encountered the symbol "P_SENDCARMAIL" when expecting one of the following: if Line: 151 Text: end P_SENDCARMAIL;
卖水果的net 2017-07-31
  • 打赏
  • 举报
回复
 IF E_OPTYPE == 'SPE' THEN 写一个等号。
mayanzs 2017-07-31
  • 打赏
  • 举报
回复
用单个等于号 IF E_OPTYPE = 'SPE' THEN ...... ELSE ....... END IF;
chengccy 2017-07-31
  • 打赏
  • 举报
回复
把else if 换成 elsif

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧