在PL/SQL(DB2)中找到意外标记“EXCEPTION”

ttvkxqim  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(185)

我正在db2中编写一个存储函数,如下所示。

CREATE OR replace FUNCTION moc_enddate( IN v_date    VARCHAR(6),
                                        IN v_message VARCHAR(20)) returns DATE
  BEGIN
    DECLARE v_temp DATE;
    DECLARE v_end_date DATE;
    DECLARE v_temp_string VARCHAR(8) DEFAULT '01';

      SET v_temp_string = v_temp_string
          || v_date;
      SET v_temp = to_date(v_temp_string,'DDMMYYYY');
      SET v_end_date = (v_temp + 19 days);
      RETURN v_end_date;
  EXCEPTION
        WHEN no_data_found THEN
          SET v_message = 'SqlDataException';
        WHEN OTHERS THEN
          SET v_message = 'OTHER';
        END;

但我得到了以下异常。

ERROR [42601] [IBM][DB2/AIX64] SQL0104N  An unexpected token "EXCEPTION" was found following "RN V_END_MOC_DATE; ".  Expected tokens may include.
"<psm_case>".
8gsdolmq

8gsdolmq1#

也许,您使用的是DB2 SQL PL而不是PL/SQL。这两种语言之间存在差异。如果是这种情况,则应满足以下条件:

create or replace procedure CreatePlants
begin
   declare sqlstate   char(5)       default '00000';
   declare ErrorMsg   varchar(96);

   declare exit handler for sqlexception
      begin
         set ErrorMsg = 'SQLSTATE=' concat sqlstate;
         signal sqlstate '99001'
            set message_text = ErrorMsg;
      end;

   create table plants
   ( ID dec(3),  Location  varchar(16),
   primary key (ID));

   label on table plants is 'Plant master';

   insert into plants values
   (  1,  'Lost Angeles'),
   (  2,  'New Yolk'),
   (  3,  'Last Vegas');
end

有关更多参考,请参见:
Error Handling in SQL PL, Part 1
Determine The State Of The Error

相关问题