SQL Programming Manual for TAL
Examples of Dynamic NonStop SQL Programs
HP NonStop SQL Programming Manual for TAL—527887-001
C-6
Dynamic SQL Program
Page 4 [1] $VOL1.S04.TALDYNEZ 1991-10-15 13:41:54
104. 000061 1 1 OSQLDA.NUM^ENTRIES := 1;
105. 000064 1 1
106. 000064 1 1 -- Initialize IND^PTR field to null. You must initialize
107. 000064 1 1 -- IND^PTR even if the program will not handle null values.
108. 000064 1 1 OSQLDA.SQLVAR[0].IND^PTR := NULL^ADDR;
109. 000070 1 1
110. 000070 1 1 EXEC SQL DESCRIBE DYNCMD INTO :OSQLDA;
111. 000140 1 1
112. 000140 1 1 -- SQL tells you what it has to work with; you then
communicate
113. 000140 1 1 -- what your variable is like to SQL. You might want to look
114. 000140 1 1 -- at the DATA^TYPE field and adjust accordingly. Here, we
are
115. 000140 1 1 -- using an INT32 and ignoring scale.
116. 000140 1 1
117. 000140 1 1 -- set DATA^TYPE to INT32:
118. 000140 1 1 OSQLDA.SQLVAR[0].DATA^TYPE := _SQLDT_32BIT_U;
119. 000143 1 1
120. 000143 1 1
121. 000143 1 1 -- set length to 4 bytes; leave scale as 0 in upper byte of
DATA^LEN:
122. 000143 1 1 OSQLDA.SQLVAR[0].DATA^LEN := 4;
123. 000146 1 1
124. 000146 1 1
125. 000146 1 1 -- set VAR^PTR to point to memory where the average
126. 000146 1 1 -- will be output:
127. 000146 1 1 OSQLDA.SQLVAR[0].VAR^PTR := $XADR(AVERAGE);
128. 000153 1 1
129. 000153 1 1 EXEC SQL BEGIN WORK;
130. 000236 1 1
131. 000236 1 1 EXEC SQL DECLARE C1 CURSOR FOR DYNCMD;
132. 000236 1 1 EXEC SQL OPEN C1;
133. 000300 1 1 EXEC SQL FETCH C1 USING DESCRIPTOR :OSQLDA;
134. 000350 1 1
135. 000350 1 1
136. 000350 1 1 IF SQLCODE >= 0 THEN
137. 000353 1 1 BEGIN
138. 000353 1 2 CALL WRITE(HOME^TERM^NUM,IBUF,0);
139. 000363 1 2 SBUF ':=' "THE AVERAGE SALARY IS: "->@BUF^END;
140. 000374 1 2 -- Convert the average for display and place it into the
buffer:
141. 000374 1 2 @BUF^END := @BUF^END '+' DNUMOUT (BUF^END, AVERAGE, 10);
142. 000413 1 2 CALL WRITE(HOME^TERM^NUM,IBUF,@BUF^END '-' @SBUF);
143. 000425 1 2 CALL WRITE(HOME^TERM^NUM,IBUF,0);
144. 000435 1 2 END;
145. 000435 1 1
146. 000435 1 1 EXEC SQL CLOSE C1;
147. 000512 1 1
148. 000512 1 1 EXEC SQL COMMIT WORK;
149. 000554 1 1
150. 000554 1 1 END; -- process^and^execute
151. 000000 0 0
152. 000000 0 0
153. 000000 0 0 !--------------------------------------------------------
154. 000000 0 0 ! PROC GET^CMD;
155. 000000 0 0 !
156. 000000 0 0 ! Assigns a SELECT statement to the statement buffer.
157. 000000 0 0 ! Gets the WHERE clause from the user and concatenates it to
158. 000000 0 0 ! the SELECT statement.
159. 000000 0 0 !--------------------------------------------------------
160. 000000 0 0