/*------------------REXX ME BABY ONE MORE TIME----------------------*/ /* DESCRIBE trigger text */ /* */ /* ISAAC YASSIN */ /*------------------------------------------------------------------*/ PARSE UPPER ARG env FULLNAME IF FULLNAME='' THEN do; say "no Trigger name given " exit end; /*------------------------------------------------------------------*/ /* SET A DEFAULT ENVIRONMENT - GET COMPUTER LPAR NAME FROM MEMORY */ /*------------------------------------------------------------------*/ SYSID = MVSVAR('SYSNAME'); PARSE VAR FULLNAME trgcre '.' trgname CALL DB2RINI ENV /* GET THE TABLE COLUMNS' DATA */ ADDRESS SQL "SELECT SEQNO,TEXT ", "INTO :SEQ,:TEXT ", "FROM SYSIBM.SYSTRIGGERS ", "WHERE SCHEMA = '"trgcre"' AND NAME = '"trgname"'", "ORDER BY SEQNO WITH UR " IF SQLCODE <> 0 & SQLCODE <> 100 THEN SAY "ERROR!!! SQLCODE = "SQLCODE ELSE IF SQLCODE = 100 THEN do say " " SAY " TRIGGER: "trgcre"."trgname" ==> DOES NOT EXIST !!!" say " " db2end return end if datatype(text.0)<>'NUM' then do; say " ===> Error in select from systriggers " say " ===> for "trgcre" "trgname" " return end; db2end address tso /* USE TEMP FILE FOR TRIG */ Output_Dsname = "'" || Userid() || ".TRG" || time(s) ||, ".DESC.OUTPUT" || "'" if Sysdsn(Output_Dsname) = "OK" then "alloc f(SQLCMDS) da(" || Output_Dsname || ") old reu" else "alloc f(SQLCMDS) da(" || Output_Dsname || ") new catalog " ||, "UNIT(SYSDA) SPACE(1 1) tracks LRECL(80) BLKSIZE(8880) " ||, "recfm(F B) dsorg(PS)" /* FORMAT THE DATA AND DISPLAY IT */ QUEUE copies('-',60) QUEUE "TRIGGER : "trgcre"."trgname" QUEUE copies('-',60) QUEUE " TEXT " QUEUE copies('-',60) QUEUE " " CALL BUILD_LINE /* parse the text field and build view definition */ QUEUE " " QUEUE copies("=",60) QUEUE copies(" ",60) "EXECIO " QUEUED() " DISKW SQLCMDS(FINIS " address ISPEXEC 'view dataset(' || Output_Dsname || ')' "free f(sqlcmds)" RETURN /**************************************************************/ BUILD_LINE: long_text=''; do i1=1 to text.0; long_text = long_text||text.i1 ; end; line=''; do i1=1 to words(long_text); Current_Word=strip(subword(long_text,i1,1)); select ; when length(line) + length(Current_Word) >= 70 then call Q_LINE; when wordpos(Current_Word, , 'AND OR NOT ( ) WHEN AFTER BEFORE ' , 'BEGIN END VALUES ', 'REFERENCING FOR MODE') > 0 then call Q_LINE; when wordpos(Current_Word, , 'FROM WHERE BETWEEN GROUP ORDER ' , 'INSERT UPDATE DELETE SELECT SET ' ) > 0 then do; call Q_LINE; line=Current_Word ; call Q_LINE; Current_Word=''; end; otherwise nop; end; line=line||Current_Word||' ' ; end call Q_LINE; /* print last line */ RETURN /**************************************************************/ Q_LINE: queue line ; line='' RETURN /**************************************************************/