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










