Código fuente PL/I para el procedimiento almacenado de ejemplo.
/*
* Procedimiento almacenado PLI SAMPLE.PLISAMP
* @param Action
* @param City
* @param Country
* @param Response
*/
PLISAMP : Procedure ( Action ,
City ,
Country ,
Response ) options (main);
dcl Action CHAR (8) VAR;
dcl City CHAR (32) VAR;
dcl Country CHAR (32) VAR;
dcl Response CHAR (80) VAR;
dcl Sqlcode_Pic PIC'SSS999';
EXEC SQL INCLUDE SQLCA;
Action=TRANSLATE(Action,'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'abcdefghijklmnopqrstuvwxyz');
select (Action);
when ('S','SELECT') do;
Select;
When (City='' & Country='') do;
EXEC SQL
DECLARE C1 CURSOR WITH RETURN WITH HOLD FOR
SELECT * FROM SAMPLE.CITYTABLE
;
EXEC SQL
OPEN C1
;
end;
When (City='') do;
EXEC SQL
DECLARE C2 CURSOR WITH RETURN WITH HOLD FOR
SELECT * FROM SAMPLE.CITYTABLE
WHERE COUNTRY=:COUNTRY
;
EXEC SQL
OPEN C2
;
end;
When (Country='') do;
EXEC SQL
DECLARE C3 CURSOR WITH RETURN WITH HOLD FOR
SELECT * FROM SAMPLE.CITYTABLE
WHERE CITY=:CITY
;
EXEC SQL
OPEN C3
;
end;
Otherwise do;
EXEC SQL
DECLARE C4 CURSOR WITH RETURN WITH HOLD FOR
SELECT * FROM SAMPLE.CITYTABLE
WHERE CITY=:CITY AND COUNTRY=:COUNTRY
;
EXEC SQL
OPEN C4
;
end;
end;
if Sqlcode=0 then Response='Select successful';
else do;
Sqlcode_Pic = Sqlcode;
Response='Select unsuccessful: Sqlcode '||Sqlcode_Pic;
end;
end;
when ('I','INSERT') do;
Select;
When (City='' & Country='')
Response='Insertar no satisfactorio: Ciudad y País no especificados';
When (City='')
Response='Insertar no satisfactorio: Ciudad no especificada';
When (Country='')
Response='Insertar no satisfactorio: País no especificado';
Otherwise do;
EXEC SQL
INSERT INTO SAMPLE.CITYTABLE
(CITY, COUNTRY) VALUES (:CITY, :COUNTRY)
;
if Sqlcode=0 then Response='Insertar satisfactorio';
else do;
Sqlcode_Pic = Sqlcode;
Response='Insertar no satisfactorio: Sqlcode '||Sqlcode_Pic;
end;
end;
end;
end;
when ('D','DELETE') do;
Select;
When (City='' & Country='')
Response='Suprimir no satisfactorio: Ciudad y País no especificados';
When (City='')
Response='Suprimir no satisfactorio: Ciudad no especificada';
When (Country='')
Response='Suprimir no satisfactorio: País no especificado';
Otherwise do;
EXEC SQL
DELETE FROM SAMPLE.CITYTABLE
WHERE CITY=:CITY AND COUNTRY=:COUNTRY
;
if Sqlcode=0 then Response='Suprimir satisfactorio';
else do;
Sqlcode_Pic = Sqlcode;
Response='Suprimir no satisfactorio: Sqlcode '||Sqlcode_Pic;
end;
end;
end;
end;
otherwise Response='Acción "'||Action||'" no soportada';
end;
END PLISAMP;