'Encountered the symbol "PROCEDURE" when expecting one of the following:

Encountered the symbol "PROCEDURE" when expecting one of the following: ( begin case declare end exception exit for goto if loop mod null pragma raise return select update while with << continue close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe purge The symbol "declare" was substituted for "PROCEDURE" to continue.

PROCEDURE GETS_SO_ATS_INVALID_NOTIFY AS
  FLAG VARCHAR2(100);
  TRAMS_TOTAL_HOURS NUMBER(4);
  ATS_TOTAL_HOURS NUMBER(4);
  INVALID_MESSAGE VARCHAR2(100);

  BEGIN
     DECLARE
   cursor TRAMS_CURSOR is
   SELECT DISTINCT EMPLY_ID, FISCAL_YEAR, FISCAL_WEEK  , DATE_ENTERED FROM GETS_SO_ATS_TRAMS_NEW_VIEW
   where FISCAL_WEEK <>LNCURRENTFW 
   ;

   BEGIN
   FOR trams_record IN TRAMS_CURSOR LOOP
   TRAMS_TOTAL_HOURS := 0;
   ATS_TOTAL_HOURS := 0;

   END LOOP;

  END;

    PROCEDURE TRAMS_LAB_HOURs_UPLOAD AS
    LSMAILBODY             CLOB;
    LSTOMAIL               VARCHAR2(200);
    LSMAILCC               VARCHAR2(50);
    LSSUBJECT              VARCHAR2(100);
    V_MAIL_ERROR           VARCHAR2(100);
    PNOUTFORECASTID            VARCHAR2(38);
    counter                     number(10);

     BEGIN
     counter:=1;
      PNOUTFORECASTID:='mayank';
      LSSUBJECT:='hello';
      LSMAILBODY := '';

      LSMAILBODY := LSMAILBODY ||
                    '<HTML><BODY ><FONT FACE=times roman SIZE=3>';
 LSMAILBODY := LSMAILBODY ||'<table style="border-collapse:collapse;border-spacing:0"><tr>';
  LSMAILBODY := LSMAILBODY || '<th style="font-family:Arial, Helvetica, sans-serif !important;;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;background-color:#ffcb2f;color:#010066">EMPLOY</th>';
  LSMAILBODY := LSMAILBODY || '<th style="font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;background-color:#ffcb2f;color:#010066">TRAMS</th>';
  LSMAILBODY := LSMAILBODY || '<th style="font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;background-color:#ffcb2f;color:#010066">ATS</th>';
  LSMAILBODY := LSMAILBODY || '<th style="font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;background-color:#ffcb2f;color:#010066">REASON</th>';
  LSMAILBODY := LSMAILBODY || '</tr>';
  FOR counter IN 1 .. 5 LOOP
  LSMAILBODY := LSMAILBODY || '<tr>';
  LSMAILBODY := LSMAILBODY || '<td style="font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal">';
  LSMAILBODY := LSMAILBODY || counter;
  LSMAILBODY := LSMAILBODY || '</td><td style="font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal">';
  LSMAILBODY :=  LSMAILBODY || counter;
  LSMAILBODY := LSMAILBODY || '</td><td style="font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal">';
  LSMAILBODY := LSMAILBODY || counter;
  LSMAILBODY := LSMAILBODY || '</td><td style="font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal">';
  LSMAILBODY := LSMAILBODY || counter;
  LSMAILBODY := LSMAILBODY || '</td></tr>';

END LOOP;
 LSMAILBODY := LSMAILBODY || '</table>';
      LSMAILBODY := LSMAILBODY || '</BODY></HTML>';
    LSTOMAIL :='[email protected]';
     V_MAIL_ERROR:='hello';
        LSMAILCC:='hello';

    ats_multi_email_clob(LSTOMAIL, LSSUBJECT, LSMAILBODY, LSMAILCC, V_MAIL_ERROR);


    END;




END GETS_SO_ATS_TRAMS_PKG;


Solution 1:[1]

Wrong Syntax.. First of all You have to define package and then Procedures inside it. Also for every begin block there should be an 'END' needed.

e.g.

CREATE OR REPLACE Pkg_test
PROCEDURE Proc_test(
  )
IS
BEGIN
  .... ..
END;
END Proc_test;
END Pkg_test;

Solution 2:[2]

You have missed the entire package specification and body. You can try like this without using package.

CREATE PROCEDURE GETS_SO_ATS_INVALID_NOTIFY
AS
  FLAG              VARCHAR2(100);
  TRAMS_TOTAL_HOURS NUMBER(4);
  ATS_TOTAL_HOURS   NUMBER(4);
  INVALID_MESSAGE   VARCHAR2(100);
BEGIN
  DECLARE
    CURSOR TRAMS_CURSOR
    IS
      SELECT DISTINCT EMPLY_ID,
        FISCAL_YEAR,
        FISCAL_WEEK ,
        DATE_ENTERED
      FROM GETS_SO_ATS_TRAMS_NEW_VIEW
      WHERE FISCAL_WEEK <>LNCURRENTFW ;
  BEGIN
    FOR trams_record IN TRAMS_CURSOR
    LOOP
      TRAMS_TOTAL_HOURS := 0;
      ATS_TOTAL_HOURS   := 0;
    END LOOP;
  END;
  /
CREATE PROCEDURE TRAMS_LAB_HOURs_UPLOAD
AS
  LSMAILBODY CLOB;
  LSTOMAIL        VARCHAR2(200);
  LSMAILCC        VARCHAR2(50);
  LSSUBJECT       VARCHAR2(100);
  V_MAIL_ERROR    VARCHAR2(100);
  PNOUTFORECASTID VARCHAR2(38);
  counter         NUMBER(10);
BEGIN
  counter        :=1;
  PNOUTFORECASTID:='mayank';
  LSSUBJECT      :='hello';
  LSMAILBODY     := '';
  LSMAILBODY     := LSMAILBODY || '<HTML><BODY ><FONT FACE=times roman SIZE=3>';
  LSMAILBODY     := LSMAILBODY ||'<table style="border-collapse:collapse;border-spacing:0"><tr>';
  LSMAILBODY     := LSMAILBODY || '<th style="font-family:Arial, Helvetica, sans-serif !important;;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;background-color:#ffcb2f;color:#010066">EMPLOY</th>';
  LSMAILBODY     := LSMAILBODY || '<th style="font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;background-color:#ffcb2f;color:#010066">TRAMS</th>';
  LSMAILBODY     := LSMAILBODY || '<th style="font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;background-color:#ffcb2f;color:#010066">ATS</th>';
  LSMAILBODY     := LSMAILBODY || '<th style="font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;background-color:#ffcb2f;color:#010066">REASON</th>';
  LSMAILBODY     := LSMAILBODY || '</tr>';
  FOR counter IN 1 .. 5
  LOOP
    LSMAILBODY := LSMAILBODY || '<tr>';
    LSMAILBODY := LSMAILBODY || '<td style="font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal">';
    LSMAILBODY := LSMAILBODY || counter;
    LSMAILBODY := LSMAILBODY || '</td><td style="font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal">';
    LSMAILBODY := LSMAILBODY || counter;
    LSMAILBODY := LSMAILBODY || '</td><td style="font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal">';
    LSMAILBODY := LSMAILBODY || counter;
    LSMAILBODY := LSMAILBODY || '</td><td style="font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal">';
    LSMAILBODY := LSMAILBODY || counter;
    LSMAILBODY := LSMAILBODY || '</td></tr>';
  END LOOP;
  LSMAILBODY  := LSMAILBODY || '</table>';
  LSMAILBODY  := LSMAILBODY || '</BODY></HTML>';
  LSTOMAIL    :='[email protected]';
  V_MAIL_ERROR:='hello';
  LSMAILCC    :='hello';
  ats_multi_email_clob(LSTOMAIL, LSSUBJECT, LSMAILBODY, LSMAILCC, V_MAIL_ERROR);
END;
/

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 mmmmmpie
Solution 2 StackUser