SQL Programming Manual for Pascal
Examples of Dynamic NonStop SQL Programs
HP NonStop SQL Programming Manual for Pascal—528614-001
C-22
Detailed Dynamic SQL Program
632 9 if (G_errcb.erc = ERC_SUCCESS) then
633 10 begin { alloc input SQLDA ----5 }
634 11
635 11 {**********************************************************}
636 11 {* Get the number of parameters and the description of *}
637 11 {* each parameter in the input SQLDA. The names of the *}
638 11 {* parameters will appear in the names buffer. *}
639 11 {**********************************************************}
640 11 EXEC SQL DESCRIBE INPUT S1 INTO :isqlda_p^
641 11 NAMES INTO :inambuf_p^;
642 11
643 11 {**********************************************************}
644 11 {* Prompt the user for parameters, initialize SQLDA. *}
645 11 {**********************************************************}
646 11 writeln('Enter parameter values');
647 11 iter := np; { # iterations to perform }
648 11 {----Set pointer to first SQLVAR element }
649 11 varp.sqldap := isqlda_p;
650 11 varp.i := varp.i + sizeof(SQLDA_HDR);
651 11 namp.bufp := inambuf_p;
652 11 while (iter > 0) do
653 12 begin { store param value ----6 }
654 13 iter := iter - 1;
655 13 {----namp will be advanced to point to the next name }
656 13 prompt_user(namp); { display parameter name }
657 13 {----Allocate space for the data to be read. }
658 13 parp.xa := alloc_space(heap,varp.hvp^.data_len);
659 13 {**** if (G_errcb.erc) then exit; ****}
660 13 varp.hvp^.var_ptr := parp.xa;
661 13 {----Check the data type of the host variable. }
662 13 data_type := varp.hvp^.data_type;
663 13 {----CHAR or VARCHAR: }
664 13 if data_type <= SQLDT_ASCII_V then
665 14 readln(parp.bufp^)
666 14 {----A 16 bit integer value }
667 14 else if data_type <= SQLDT_16BIT_U then
668 15 readln(parp.cardp^)
669 15 {----A 32 bit integer value }
670 15 else if data_type <= SQLDT_32BIT_U then
671 16 readln(parp.int32p^)
672 16 else
673 16 writeln('****Data type ',data_type,' not supported');
674 13
675 13 { Initialize ind_ptr field to nil: }
676 13 varp.hvp^.ind_ptr := RETYPE(nil, EXTADDR ) ;
677 13
678 13 varp.i := varp.i + sqlvar_size;
679 13 end; { store param value ----6 }
680 11
681 11 end; { alloc input SQLDA ----5 }
682 9
683 9 end; { process parameters ----4 }
684 7
685 7 if (statement_type = 1) and { statement is a SELECT }
686 8 (G_errcb.erc = ERC_SUCCESS) then { got no error yet }
687 8 begin { SELECT statement ----7 }
688 9
689 9 {**********************************************************}
690 9 {* Allocate the output SQLDA on the heap including the *}
691 9 {* required number of SQLVAR structures, the names *}
692 9 {* buffer and a data area to store column data values. *}
693 9 {**********************************************************}
694 9 alloc_sqlda(osqlda_p,nc,onambuf_p,onambuf_size);
695 9