Page 1 of 1

Compile and Run PL/1 with SQL

PostPosted: Wed Nov 05, 2014 11:37 am
by admiral00
Hi!

How can i compile and run a PL/1 Program with SQL inside?

My PL/1 Program:

MYSQL: PROC OPtions(main);                         
  dcl depno char(5);                               
  dcl depname char(20);                             
  exec sql include sqlca;                           
  /*exec sql include dept272;*/                     
  exec sql                                         
     select depno,depname                           
     into :DEPNO,:DEPNAME                           
     from DSN8910.DEPT                             
     where deptno='E01'M                           
  put skip list('DEPNO IS :',DEPNO);               
  put skip list('DEPNAME IS:',DEPNAME);             
END MYSQL;                                         


My JCL for Compile and Run:

//IBMUSERX JOB MSGCLASS=A,NOTIFY=IBMUSER,REGION=0M                     
//STEP1 EXEC IBMZCBG,REGION.PLI=32M                     
//STEPLIB DD DSN=IEL370.SIBMZCMP,DISP=SHR               
//PLI.SYSIN DD DSN=IBMUSER.TEST.PL1(MYSQL),DISP=SHR     
//                                                       


I get the Error:

Compiler Messages
Message       Line.File Message Description                     
IBM1866I S       4.0    The EXEC statement is not supported.     
IBM1866I S       6.0    The EXEC statement is not supported.     
IBM1085I W      12.0    DEPNAME may be uninitialized when used. 

Re: Compile and Run PL/1 with SQL

PostPosted: Wed Nov 05, 2014 2:36 pm
by prino
That is because you do not use the builtin SQL pre-processor...

//PLI      EXEC PGM=IBMZPLI,PARM='OBJECT,OPTIONS'


As a minimum change this into

//IBMZPLI EXEC PGM=IBMZPLI,
//             REGION=0M,
//             PARM=('+DD:PLIUSER')


and add a

IBMZPLI.PLIUSER DD DSN=whatever(PXEP37Z),DISP=SHR


with member PXEP37Z (or whatever you might want to call it) containing, if you want to generate high-quality code, the options below, or your organisation's options, which are likely to be, been there, done that, far less optimal:

   aggregate(dec)
   arch(7)
   attributes(s)
   backreg(5)
   bifprec(31)
   blank('05'x)
   blkoff
   ceestart(last)
   check(noconformance nostorage)
   cmpat(v2)
   codepage(1140)
 nocommon
 nocompact
   compile
   copyright('(C) Copyright Whatever')
   csect
   csectcut(4)
   currency('$')
 nodbcs
   dd(sysprint,sysin,syslib,syspunch,*,*,*,*)
   dd(*,*,*,*,syslin,sysadata,sysxmlsd,sysdebug)
   decimal(foflonasgn noforcedsign)
   default(ibm)
   default(aligned)
   default(assignable)
   default(byaddr)
   default(connected)
   default(desclocator)
   default(descriptor)
   default(dummy(unaligned))
   default(e(hexadec))
   default(ebcdic)
   default(hexadec)
   default(linkage(optlink))
   default(native)
   default(nativeaddr)
   default(nobin1arg)
   default(noevendec)
   default(noinitfill)
   default(noinline)
   default(nonrecursive)
   default(nooverlap)
   default(noretcode)
   default(null370)
   default(ordinal(max))
   default(reorder)
   default(returns(byaddr))
   default(short(hexadec))
   display(wto)
 nodllinit
 noexit
   extrn(full)
   flag(i)
   float(afp(novolatile) nodfp)
   floatinmath(asis)
   gonumber
 nographic
   incafter(process(''))
 noinitauto
 noinitbased
 noinitctl
 noinitstatic
 nis
 nointerrupt
   langlvl(os saa2)
   limits(extname(7) fixeddec(15,31) fixedbin(31,63) name(31))
   lc(32767)
 nolist
 nomacro
 nomap
   margini(' ')
   mar(2,72,1)
   maxmem(1048576)
   maxmsg(e 32767)
   maxnest(block(8) do(8) if(8))
   maxstmt(2048)
   maxtemp(4096)
   names('#@$','#@$')
   natlang(enu)
   nest
   not('^')
   number
   obj
 nooffset
   opt(3)
   options(all)
   or('|')
   pp(macro('case(asis)'))
   prectype(ans)
 noproceed(s)
   process(delete)
   quote('"')
   reduce
 norent
   resexp
   rules(ibm)
   rules(  byname)
   rules(nodecsize)
   rules(  elseif)
   rules(noevendec)
   rules(nogoto)
   rules(nolaxbif)
   rules(nolaxctl)
   rules(nolaxdcl)
   rules(nolaxdef)
   rules(nolaxif)
   rules(nolaxinout)
   rules(nolaxlink)
   rules(nolaxmargins(xnumeric))
   rules(nolaxpunc)
   rules(  laxqual)
   rules(nolaxsemi)
   rules(nolaxstg)
   rules(nolaxstrz)
   rules(nomulticlose)
   rules(nounref)
   scheduler
   semantic
   service('')
   source
   spill(512)
   static(full)
   stmt
 nostorage
   syntax
   sysparm('')
   system(mvs)
   test(all,sym)
 notest
   tune(7)
   usage(round(ibm))
   usage(unspec(ibm))
   widechar(bigendian)
   window(1950)
   writable
   xref(s)


and change the

   pp(macro('case(asis)'))


into

   pp(macro('case(asis)') SQL('RTFM for all six zillion SQL options'))


And then add all required extra datasets to the JOB, such as the DBRMLIB, etc.

And for what it's worth Enterprise PL/I V3.7 is no longer supported, which indicates that you are probably not doing this in a corporate environment.