Saturday 17 May 2014

PL/I - DB2 Stored Procedure - Sample Program

The below is DB2 logic we are putting it in a Subprogram (Stored procedure). Whenever we need we USE CALL procname  in the main program => to get this DB2 code.

  1. /*
  2.  * PLI Stored Procedure SAMPLE.PLISAMP
  3.  * @param Action
  4.  * @param City
  5.  * @param Country
  6.  * @param Response
  7.  */

  8. /*Reference: IBM */

  9. PLISAMP : Procedure ( Action   ,
  10.                        City     ,
  11.                        Country  ,
  12.                        Response ) options (main);

  13.  dcl Action   CHAR  (8) VAR;
  14.  dcl City     CHAR (32) VAR;
  15.  dcl Country  CHAR (32) VAR;
  16.  dcl Response CHAR (80) VAR;

  17.  dcl Sqlcode_Pic PIC'SSS999';

  18.  EXEC SQL INCLUDE SQLCA;

  19.  Action=TRANSLATE(Action,'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
  20.                          'abcdefghijklmnopqrstuvwxyz');

  21.  select (Action);
  22.    when ('S','SELECT') do;
  23.      Select;
  24.        When (City='' & Country='') do;
  25.          EXEC SQL
  26.            DECLARE C1 CURSOR WITH RETURN WITH HOLD FOR
  27.              SELECT * FROM SAMPLE.CITYTABLE
  28.          ;
  29.          EXEC SQL
  30.            OPEN C1
  31.          ;
  32.        end;
  33.        When (City='') do;
  34.          EXEC SQL
  35.            DECLARE C2 CURSOR WITH RETURN WITH HOLD FOR
  36.              SELECT * FROM SAMPLE.CITYTABLE
  37.                WHERE COUNTRY=:COUNTRY
  38.          ;
  39.          EXEC SQL
  40.            OPEN C2
  41.          ;
  42.        end;
  43.        When (Country='') do;
  44.          EXEC SQL
  45.            DECLARE C3 CURSOR WITH RETURN WITH HOLD FOR
  46.              SELECT * FROM SAMPLE.CITYTABLE
  47.                WHERE CITY=:CITY
  48.          ;
  49.          EXEC SQL
  50.            OPEN C3
  51.          ;
  52.        end;
  53.        Otherwise do;
  54.          EXEC SQL
  55.            DECLARE C4 CURSOR WITH RETURN WITH HOLD FOR
  56.              SELECT * FROM SAMPLE.CITYTABLE
  57.                WHERE CITY=:CITY AND COUNTRY=:COUNTRY
  58.          ;
  59.          EXEC SQL
  60.            OPEN C4
  61.          ;
  62.        end;
  63.      end;
  64.      if Sqlcode=0 then Response='Select successful';
  65.      else do;
  66.        Sqlcode_Pic = Sqlcode;
  67.        Response='Select unsuccessful: Sqlcode '||Sqlcode_Pic;
  68.      end;
  69.    end;
  70.    when ('I','INSERT') do;
  71.      Select;
  72.        When (City='' & Country='')
  73.          Response='Insert unsuccessful: City and Country not specified';
  74.        When (City='')
  75.          Response='Insert unsuccessful: City not specified';
  76.        When (Country='')
  77.          Response='Insert unsuccessful: Country not specified';
  78.        Otherwise do;
  79.          EXEC SQL
  80.            INSERT INTO SAMPLE.CITYTABLE
  81.              (CITY, COUNTRY) VALUES (:CITY, :COUNTRY)
  82.          ;
  83.          if Sqlcode=0 then Response='Insert successful';
  84.          else do;
  85.            Sqlcode_Pic = Sqlcode;
  86.            Response='Insert unsuccessful: Sqlcode '||Sqlcode_Pic;
  87.          end;
  88.        end;
  89.      end;
  90.    end;
  91.    when ('D','DELETE') do;
  92.      Select;
  93.        When (City='' & Country='')
  94.          Response='Delete unsuccessful: City and Country not specified';
  95.        When (City='')
  96.          Response='Delete unsuccessful: City not specified';
  97.        When (Country='')
  98.          Response='Delete unsuccessful: Country not specified';
  99.        Otherwise do;
  100.          EXEC SQL
  101.            DELETE FROM SAMPLE.CITYTABLE
  102.              WHERE CITY=:CITY AND COUNTRY=:COUNTRY
  103.          ;
  104.          if Sqlcode=0 then Response='Delete successful';
  105.          else do;
  106.            Sqlcode_Pic = Sqlcode;
  107.            Response='Delete unsuccessful: Sqlcode '||Sqlcode_Pic;
  108.          end;
  109.        end;
  110.      end;
  111.    end;
  112.    otherwise Response='Action "'||Action||'" not supported';
  113.  end;

  114.  END PLISAMP;

POINTS:

NO-> END EXEC in PL/I

No comments:

Post a Comment