title: db2 : Expected tokens may include: "<values>". LINE NUMBER=1. SQLSTATE=42601
body: <p>I m executing following:</p>
  
  <pre><code>db2  -tvsf ./sql/update_product.sql
  </code></pre>
  
  <p>I have used eclipse for editing <code>update_product.sql</code> and moved the file to unix box. I have also removed <code>update_product.sql</code> <strong><code>^M</code></strong> character from the file before executing. </p>
  
  <p><strong>I'm getting the following error:</strong></p>
  
  <pre><code>Database Connection Information
  
   Database server        = DB2/AIX64 9.7.0
   SQL authorization ID   = CGO_USER
   Local database alias   = JPN_DEV
  
  
  DECLARE BEGIN DECLARE   v_eisidentifier VARCHAR(100)
  DB21034E  The command was processed as an SQL statement because it was not a
  valid Command Line Processor command.  During SQL processing it returned:
  SQL0104N  An unexpected token "DECLARE BEGIN DECLARE v_eisidentifier VARC" was
  found following "BEGIN-OF-STATEMENT".  Expected tokens may include:
  "&lt;values&gt;".  LINE NUMBER=1.  SQLSTATE=42601
  </code></pre>
  
  <p>The following is in the SQL file: </p>
  
  <pre><code>   CONNECT TO JPN_DEV USER devuser USING password;
  
     DECLARE 
  
     BEGIN
  
      DECLARE v_eisidentifier VARCHAR(100);
  DECLARE v_categoryGuid DECIMAL(19,0); 
  DECLARE v_localeGuid DECIMAL(19,0);
  DECLARE v_realmGuid DECIMAL(19,0);
  DECLARE v_catchingPhrase VARCHAR(120) ;
  DECLARE v_genericName VARCHAR(80);
  DECLARE v_ingredients VARCHAR(900);
  DECLARE v_quantity VARCHAR (60);
  DECLARE v_dose VARCHAR(40);
  DECLARE v_nutritionFacts VARCHAR (900);
  DECLARE v_productDescription VARCHAR (900);
  DECLARE v_recommendedFor VARCHAR (200);
  DECLARE v_promotionMessage VARCHAR (200);
  DECLARE v_message VARCHAR (4500);
  
  
  DECLARE C1 CURSOR FOR
      SELECT 
              EISIDENTIFIER,
              CATEGORY_GUID,
              LOCALEGUID,
              REALMGUID,
              CATCHING_PHRASE,
              GENERIC_NAME,
              INGREDIENTS,
              QUANTITY,
              DOSE,
              NUTIRITION_FACTS,
              PRODUCT_DESCRIPTION,
              RECOMMENDED_FOR,
              PROMOTION_MESSAGE,
              MESSAGE
          FROM 
              TEMP_UPLOAD_PRODUCT_ATTRIBUTES;
  
          FETCH C1 into :v_eisidentifier,     
                        :v_categoryGuid, 
                        :v_localeGuid,
                        :v_realmGuid,
                        :v_catchingPhrase,
                        :v_genericName,
                        :v_ingredients,
                        :v_quantity,
                        :v_dose,
                        :v_nutritionFacts,
                        :v_productDescription
                        :v_recommendedFor,
                        :v_promotionMessage,
                        :v_message
          ;
          DECLARE v_proudctGuid;  
          WHILE (SQLCODE=0) 
          DO
              IF EXISTS (SELECT 1 FROM PRD_PRODUCT WHERE EISIDENTIFIER = :v_eisidentifier)
              THEN
                  SELECT GUID INTO :v_productGuid where PRD_PRODUCT WHERE EISIDENTIFIER = :v_eisidentifier;                       
                  UPDATE PRD_PRODUCT_L10N
                  SET CATEGORY_GUID = :v_categoryGuid,
                      REALMGUID = :v_realmGuid,
                      CATCHING_PHRASE =:v_catchingPhrase,
                      GENERIC_NAME =:v_genericName,
                      INGREDIENTS =:v_ingredients,
                      QUANTITY=:v_quantity,
                      DOSE=:v_dose,
                      NUTIRITION_FACTS=:v_nutritionFacts,
                      PRODUCT_DESCRIPTION=:v_productDescription,
                      RECOMMENDED_FOR:=v_recommendedFor,
                      PROMOTION_MESSAGE:=v_promotionMessage,
                      MESSAGE:=v_message
                  WHERE PRODUCTGUID =:v_proudctGuid and LOCALGUID =:v_categoryGuid;
                  IF SQLCODE &lt;&gt; 0 THEN
                      DBMS_OUTPUT.PUT_LINE ('ERROR:' || SUBSTR(SQLERRM,1,175));
                  END IF
  
              ELSE 
                  --  INSERT INTO --- should not be the case....
                  DBMS_OUTPUT.PUT_LINE ('WARNING: THE PRODUCT' || :v_eisidentifier || ' NOT FOUND IN THE DATABASE' );
              END IF;
  
              IF EXISTS (SELECT 1 FROM PRD_PRODUCT_CATEGORY WHERE CATEGORY_GUID=:v_categoryGuid AND PRODUCT_GUID=:v_productGuid)
                  DBMS_OUTPUT.PUT_LINE ('WARNING: PRODUCT NOT FOUND IN THE DATABASE' );
              ELSE 
                  INSERT INTO PRD_PRODUCT_CATEGORY (CATEGORY_GUID, PRODUCT_GUID) VALUES (:v_categoryGuid,:v_productGuid); 
                  IF SQLCODE &lt;&gt; 0 THEN
                      DBMS_OUTPUT.PUT_LINE ('ERROR: COULD NOT INSERT categoryGuid: ' || :v_categoryGuid || ' productGuid: ' || :v_productGuid || 'in PRD_PRODUCT_CATEGORY table'); 
                      DBMS_OUTPUT.PUT_LINE ('ERROR:' || SUBSTR(SQLERRM,1,175));
                  END IF
              END IF;
  
              FETCH C1 into :v_productGuid,   
                        :v_categoryGuid, 
                        :v_localeGuid,
                        :v_realmGuid,
                        :v_catchingPhrase,
                        :v_genericName,
                        :v_ingredients,
                        :v_quantity,
                        :v_dose,
                        :v_nutritionFacts,
                        :v_productDescription
                        :v_recommendedFor,
                        :v_promotionMessage,
                        :v_message
              ;
          END WHILE;
  
  END ;
  COMMIT;
  </code></pre>
  
  <p>Please advise.</p>