Hex Artifact Content
Not logged in

Artifact 8381db1af38f114878aaa1423a2dc5f73f264271:

Wiki page [Stored Procedures] by sandro 2019-12-26 15:49:59.
0000: 44 20 32 30 31 39 2d 31 32 2d 32 36 54 31 35 3a  D 2019-12-26T15:
0010: 34 39 3a 35 39 2e 37 32 35 0a 4c 20 53 74 6f 72  49:59.725.L Stor
0020: 65 64 5c 73 50 72 6f 63 65 64 75 72 65 73 0a 50  ed\sProcedures.P
0030: 20 33 66 36 61 39 35 30 33 39 35 30 31 38 64 34   3f6a950395018d4
0040: 31 36 30 61 30 38 61 63 34 37 63 35 62 32 32 34  160a08ac47c5b224
0050: 37 64 66 32 61 63 63 64 65 0a 55 20 73 61 6e 64  7df2accde.U sand
0060: 72 6f 0a 57 20 34 39 30 32 39 0a 3c 74 61 62 6c  ro.W 49029.<tabl
0070: 65 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 31  e cellspacing="1
0080: 32 22 20 77 69 64 74 68 3d 22 31 30 30 25 22 3e  2" width="100%">
0090: 0d 0a 3c 74 72 3e 3c 74 64 20 63 6f 6c 73 70 61  ..<tr><td colspa
00a0: 6e 3d 22 32 22 3e 0d 0a 3c 74 61 62 6c 65 20 77  n="2">..<table w
00b0: 69 64 74 68 3d 22 31 30 30 25 22 20 62 67 63 6f  idth="100%" bgco
00c0: 6c 6f 72 3d 22 23 66 30 66 30 66 38 22 3e 0d 0a  lor="#f0f0f8">..
00d0: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 63  <tr><td align="c
00e0: 65 6e 74 65 72 22 3e 0d 0a 3c 2f 74 64 3e 3c 2f  enter">..</td></
00f0: 74 72 3e 3c 2f 74 61 62 6c 65 3e 0d 0a 3c 74 61  tr></table>..<ta
0100: 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25 22  ble width="100%"
0110: 3e 3c 74 72 3e 0d 0a 3c 74 64 20 77 69 64 74 68  ><tr>..<td width
0120: 3d 22 33 33 25 22 20 61 6c 69 67 6e 3d 22 6c 65  ="33%" align="le
0130: 66 74 22 3e 3c 2f 74 64 3e 0d 0a 3c 74 64 20 61  ft"></td>..<td a
0140: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 42 61  lign="center">Ba
0150: 63 6b 20 74 6f 20 3c 61 20 68 72 65 66 3d 22 68  ck to <a href="h
0160: 74 74 70 73 3a 2f 2f 77 77 77 2e 67 61 69 61 2d  ttps://www.gaia-
0170: 67 69 73 2e 69 74 2f 66 6f 73 73 69 6c 2f 6c 69  gis.it/fossil/li
0180: 62 73 70 61 74 69 61 6c 69 74 65 2f 77 69 6b 69  bspatialite/wiki
0190: 3f 6e 61 6d 65 3d 35 2e 30 2e 30 2d 64 6f 63 22  ?name=5.0.0-doc"
01a0: 3e 35 2e 30 2e 30 2d 64 6f 63 20 6d 61 69 6e 20  >5.0.0-doc main 
01b0: 70 61 67 65 3c 2f 61 3e 3c 2f 74 64 3e 0d 0a 3c  page</a></td>..<
01c0: 74 64 20 77 69 64 74 68 3d 22 33 33 25 22 20 61  td width="33%" a
01d0: 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 3c 2f 74  lign="right"></t
01e0: 64 3e 0d 0a 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65  d>..</tr></table
01f0: 3e 0d 0a 3c 68 31 3e 53 51 4c 20 50 72 6f 63 65  >..<h1>SQL Proce
0200: 64 75 72 65 73 2c 20 53 74 6f 72 65 64 20 50 72  dures, Stored Pr
0210: 6f 63 65 64 75 72 65 73 20 61 6e 64 20 53 74 6f  ocedures and Sto
0220: 72 65 64 20 56 61 72 69 61 62 6c 65 73 3a 20 61  red Variables: a
0230: 20 71 75 69 63 6b 20 69 6e 74 72 6f 3c 2f 68 31   quick intro</h1
0240: 3e 0d 0a 53 74 61 72 74 69 6e 67 20 77 69 74 68  >..Starting with
0250: 20 76 65 72 73 69 6f 6e 20 3c 62 3e 35 2e 30 2e   version <b>5.0.
0260: 30 3c 2f 62 3e 2c 20 53 70 61 74 69 61 4c 69 74  0</b>, SpatiaLit
0270: 65 20 73 75 70 70 6f 72 74 73 20 61 6e 20 61 64  e supports an ad
0280: 76 61 6e 63 65 64 20 6d 65 63 68 61 6e 69 73 6d  vanced mechanism
0290: 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 73 69 67   intended to sig
02a0: 6e 69 66 69 63 61 6e 74 6c 79 20 65 78 74 65 6e  nificantly exten
02b0: 64 20 74 68 65 20 73 63 72 69 70 74 69 6e 67 20  d the scripting 
02c0: 74 65 63 68 6e 69 71 75 65 73 20 61 6c 6c 6f 77  techniques allow
02d0: 69 6e 67 20 66 6f 72 20 61 20 70 6f 77 65 72 66  ing for a powerf
02e0: 75 6c 20 61 6e 64 20 66 6c 65 78 69 62 6c 65 20  ul and flexible 
02f0: 61 75 74 6f 6d 61 74 69 6f 6e 20 6f 66 20 63 6f  automation of co
0300: 6d 70 6c 65 78 20 77 6f 72 6b 66 6c 6f 77 73 2e  mplex workflows.
0310: 3c 62 72 3e 0d 0a 54 68 69 6e 6b 20 6f 66 20 74  <br>..Think of t
0320: 68 65 20 6e 69 63 65 20 66 6c 65 78 69 62 69 6c  he nice flexibil
0330: 69 74 79 20 70 6f 73 73 69 62 6c 65 2c 20 62 79  ity possible, by
0340: 20 6d 69 78 69 6e 67 20 73 74 61 6e 64 61 72 64   mixing standard
0350: 20 3c 62 3e 3c 69 3e 53 51 4c 20 73 63 72 69 70   <b><i>SQL scrip
0360: 74 73 3c 2f 69 3e 3c 2f 62 3e 20 61 6e 64 20 3c  ts</i></b> and <
0370: 62 3e 3c 69 3e 56 61 72 69 61 62 6c 65 73 3c 2f  b><i>Variables</
0380: 69 3e 3c 2f 62 3e 20 77 68 69 63 68 20 61 72 65  i></b> which are
0390: 20 72 65 70 6c 61 63 65 64 20 62 65 66 6f 72 65   replaced before
03a0: 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 2e   being executed.
03b0: 0d 0a 4e 6f 74 20 6f 6e 6c 79 20 74 68 61 74 2c  ..Not only that,
03c0: 20 62 75 74 20 74 68 69 6e 6b 20 6f 66 20 74 68   but think of th
03d0: 65 20 6d 61 6e 79 20 77 6f 6e 64 65 72 66 75 6c  e many wonderful
03e0: 20 6f 70 70 6f 72 74 75 6e 69 74 69 65 73 20 6f   opportunities o
03f0: 66 66 65 72 65 64 20 62 79 20 70 65 72 6d 61 6e  ffered by perman
0400: 65 6e 74 6c 79 20 73 74 6f 72 69 6e 67 2c 20 77  ently storing, w
0410: 69 74 68 69 6e 20 61 20 64 61 74 61 62 61 73 65  ithin a database
0420: 2c 20 3c 62 3e 3c 69 3e 53 51 4c 20 53 63 72 69  , <b><i>SQL Scri
0430: 70 74 73 20 77 69 74 68 20 56 61 72 69 61 62 6c  pts with Variabl
0440: 65 73 3c 2f 69 3e 3c 2f 62 3e 2c 20 73 69 6d 70  es</i></b>, simp
0450: 6c 69 66 79 69 6e 67 20 63 6f 6d 6d 6f 6e 20 61  lifying common a
0460: 75 74 6f 6d 61 74 65 64 20 77 6f 72 6b 66 6c 6f  utomated workflo
0470: 77 73 20 74 68 61 74 20 61 72 65 20 72 65 70 65  ws that are repe
0480: 61 74 65 64 6c 79 20 65 78 65 63 75 74 65 64 2e  atedly executed.
0490: 20 54 68 69 73 20 69 73 20 65 78 61 63 74 6c 79   This is exactly
04a0: 20 74 68 65 20 69 6e 74 65 6e 64 65 64 20 73 63   the intended sc
04b0: 6f 70 65 20 6f 66 20 74 68 69 73 20 6e 65 77 20  ope of this new 
04c0: 6d 6f 64 75 6c 65 2e 3c 62 72 3e 3c 62 72 3e 0d  module.<br><br>.
04d0: 0a 57 65 27 6c 6c 20 73 74 61 72 74 20 66 69 72  .We'll start fir
04e0: 73 74 20 62 79 20 64 65 66 69 6e 69 6e 67 20 61  st by defining a
04f0: 20 66 65 77 20 62 61 73 69 63 20 63 6f 6e 63 65   few basic conce
0500: 70 74 73 20 61 6e 64 20 6f 62 6a 65 63 74 69 76  pts and objectiv
0510: 65 73 2c 20 73 6f 20 61 73 20 74 6f 20 61 76 6f  es, so as to avo
0520: 69 64 20 61 6e 79 20 70 6f 73 73 69 62 6c 65 20  id any possible 
0530: 63 6f 6e 66 75 73 69 6f 6e 2e 3c 62 72 3e 3c 62  confusion.<br><b
0540: 72 3e 0d 0a 3c 68 72 3e 0d 0a 3c 68 32 3e 42 61  r>..<hr>..<h2>Ba
0550: 73 69 63 20 44 65 66 69 6e 69 74 69 6f 6e 73 20  sic Definitions 
0560: 61 6e 64 20 43 6f 6e 63 65 70 74 73 3c 2f 68 32  and Concepts</h2
0570: 3e 0d 0a 3c 6f 6c 3e 0d 0a 3c 6c 69 3e 0d 0a 3c  >..<ol>..<li>..<
0580: 68 34 3e 53 51 4c 20 53 74 61 74 65 6d 65 6e 74  h4>SQL Statement
0590: 3c 2f 68 34 3e 0d 0a 54 68 65 20 6d 69 6e 69 6d  </h4>..The minim
05a0: 61 6c 20 65 78 65 63 75 74 69 6f 6e 20 75 6e 69  al execution uni
05b0: 74 20 61 6c 6c 6f 77 65 64 20 62 79 20 53 51 4c  t allowed by SQL
05c0: 20 73 79 6e 74 61 78 3b 20 61 20 73 74 61 6e 64   syntax; a stand
05d0: 2d 61 6c 6f 6e 65 20 53 51 4c 20 64 69 72 65 63  -alone SQL direc
05e0: 74 69 76 65 20 74 6f 20 62 65 20 61 74 6f 6d 69  tive to be atomi
05f0: 63 61 6c 6c 79 20 65 78 65 63 75 74 65 64 20 69  cally executed i
0600: 6e 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 2e  n a single step.
0610: 20 3c 62 72 3e 0d 0a 53 61 6d 70 6c 65 73 3a 0d   <br>..Samples:.
0620: 0a 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 53 45 4c  .<verbatim>..SEL
0630: 45 43 54 20 69 64 2c 20 6e 61 6d 65 2c 20 6d 65  ECT id, name, me
0640: 61 73 75 72 65 20 46 52 4f 4d 20 73 6f 6d 65 5f  asure FROM some_
0650: 74 61 62 6c 65 3b 0d 0a 2d 2d 2d 2d 2d 2d 2d 2d  table;..--------
0660: 2d 2d 2d 2d 0d 0a 44 45 4c 45 54 45 20 46 52 4f  ----..DELETE FRO
0670: 4d 20 73 6f 6d 65 5f 74 61 62 6c 65 20 57 48 45  M some_table WHE
0680: 52 45 20 6d 65 61 73 75 72 65 20 3e 20 31 30 30  RE measure > 100
0690: 30 3b 0d 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  0;..------------
06a0: 0d 0a 55 50 44 41 54 45 20 73 6f 6d 65 5f 74 61  ..UPDATE some_ta
06b0: 62 6c 65 20 53 45 54 20 6d 65 61 73 75 72 65 20  ble SET measure 
06c0: 3d 20 6d 65 61 73 75 72 65 20 2f 20 31 30 2e 30  = measure / 10.0
06d0: 0d 0a 3c 2f 76 65 72 62 61 74 69 6d 3e 0d 0a 3c  ..</verbatim>..<
06e0: 75 3e 4e 6f 74 65 3c 2f 75 3e 3a 20 53 51 4c 20  u>Note</u>: SQL 
06f0: 53 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 75  Statements are u
0700: 73 75 61 6c 6c 79 20 65 78 70 65 63 74 65 64 20  sually expected 
0710: 74 6f 20 62 65 20 65 78 70 6c 69 63 69 74 6c 79  to be explicitly
0720: 20 74 65 72 6d 69 6e 61 74 65 64 20 62 79 20 61   terminated by a
0730: 20 3c 62 3e 3c 69 3e 73 65 6d 69 63 6f 6c 6f 6e   <b><i>semicolon
0740: 3c 2f 69 3e 3c 2f 62 3e 20 28 3c 62 3e 3c 69 3e  </i></b> (<b><i>
0750: 3b 3c 2f 69 3e 3c 2f 62 3e 29 2e 3c 62 72 3e 0d  ;</i></b>).<br>.
0760: 0a 54 68 65 20 73 65 6d 69 63 6f 6c 6f 6e 20 74  .The semicolon t
0770: 65 72 6d 69 6e 61 74 6f 72 20 63 61 6e 20 62 65  erminator can be
0780: 20 73 61 66 65 6c 79 20 73 75 70 70 72 65 73 73   safely suppress
0790: 65 64 20 6f 6e 6c 79 20 77 68 65 6e 20 74 68 65  ed only when the
07a0: 20 53 51 4c 20 53 74 61 74 65 6d 65 6e 74 20 69   SQL Statement i
07b0: 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  s immediately fo
07c0: 6c 6c 6f 77 65 64 20 62 79 20 61 20 73 74 72 69  llowed by a stri
07d0: 6e 67 20 74 65 72 6d 69 6e 61 74 6f 72 20 28 6c  ng terminator (l
07e0: 65 61 64 69 6e 67 20 61 6e 64 20 74 72 61 69 6c  eading and trail
07f0: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 6f 66  ing sequences of
0800: 20 61 6c 6c 20 3c 62 3e 3c 69 3e 62 6c 61 6e 6b   all <b><i>blank
0810: 73 3c 2f 69 3e 3c 2f 62 3e 20 77 69 6c 6c 20 62  s</i></b> will b
0820: 65 20 61 6c 77 61 79 73 20 69 67 6e 6f 72 65 64  e always ignored
0830: 29 2e 0d 0a 3c 62 72 3e 3c 62 72 3e 3c 68 72 3e  )...<br><br><hr>
0840: 0d 0a 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e 0d 0a 3c  ..</li>..<li>..<
0850: 68 34 3e 53 51 4c 20 53 63 72 69 70 74 3c 2f 68  h4>SQL Script</h
0860: 34 3e 0d 0a 41 20 6d 6f 72 65 20 6f 72 20 6c 65  4>..A more or le
0870: 73 73 20 63 6f 6d 70 6c 65 78 20 63 6f 6c 6c 65  ss complex colle
0880: 63 74 69 6f 6e 20 6f 66 20 3c 62 3e 3c 69 3e 53  ction of <b><i>S
0890: 51 4c 20 53 74 61 74 65 6d 65 6e 74 73 3c 2f 69  QL Statements</i
08a0: 3e 3c 2f 62 3e 2c 20 70 6f 73 73 69 62 6c 79 20  ></b>, possibly 
08b0: 69 6e 63 6c 75 64 69 6e 67 20 69 6e 74 65 72 6c  including interl
08c0: 65 61 76 65 64 20 3c 62 3e 3c 69 3e 43 6f 6d 6d  eaved <b><i>Comm
08d0: 65 6e 74 73 3c 2f 69 3e 3c 2f 62 3e 20 61 6e 64  ents</i></b> and
08e0: 2f 6f 72 20 3c 62 3e 3c 69 3e 44 6f 74 20 4d 61  /or <b><i>Dot Ma
08f0: 63 72 6f 73 3c 2f 69 3e 3c 2f 62 3e 2e 3c 62 72  cros</i></b>.<br
0900: 3e 0d 0a 53 51 4c 20 53 63 72 69 70 74 73 20 61  >..SQL Scripts a
0910: 72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 62  re intended to b
0920: 65 20 65 78 65 63 75 74 65 64 20 69 6e 20 61 20  e executed in a 
0930: 73 69 6e 67 6c 65 20 6d 6f 6e 6f 6c 69 74 68 69  single monolithi
0940: 63 20 70 61 73 73 20 28 61 74 6f 6d 69 63 61 6c  c pass (atomical
0950: 6c 79 20 6f 72 20 6e 6f 74 2c 20 64 65 70 65 6e  ly or not, depen
0960: 64 69 6e 67 20 6f 6e 20 69 6e 74 65 72 6e 61 6c  ding on internal
0970: 20 3c 62 3e 3c 69 3e 54 72 61 6e 73 61 63 74 69   <b><i>Transacti
0980: 6f 6e 3c 2f 69 3e 3c 2f 62 3e 20 68 61 6e 64 6c  on</i></b> handl
0990: 69 6e 67 29 2e 20 45 78 61 6d 70 6c 65 3a 0d 0a  ing). Example:..
09a0: 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 2e 65 63 68  <verbatim>...ech
09b0: 6f 20 6f 6e 0d 0a 0d 0a 2d 2d 0d 0a 2d 2d 20 73  o on....--..-- s
09c0: 74 61 72 74 69 6e 67 20 61 20 54 72 61 6e 73 61  tarting a Transa
09d0: 63 74 69 6f 6e 0d 0a 2d 2d 0d 0a 42 45 47 49 4e  ction..--..BEGIN
09e0: 3b 0d 0a 0d 0a 2d 2d 0d 0a 2d 2d 20 63 72 65 61  ;....--..-- crea
09f0: 74 69 6e 67 20 61 20 74 61 62 6c 65 0d 0a 2d 2d  ting a table..--
0a00: 0d 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 65  ..CREATE TABLE e
0a10: 78 61 6d 70 6c 65 20 28 0d 0a 20 20 69 64 20 49  xample (..  id I
0a20: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
0a30: 45 59 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  EY AUTOINCREMENT
0a40: 2c 0d 0a 20 20 6e 61 6d 65 20 54 45 58 54 20 4e  ,..  name TEXT N
0a50: 4f 54 20 4e 55 4c 4c 2c 0d 0a 20 20 76 61 6c 75  OT NULL,..  valu
0a60: 65 20 44 4f 55 42 4c 45 29 3b 0d 0a 0d 0a 2d 2d  e DOUBLE);....--
0a70: 0d 0a 2d 2d 20 70 6f 70 75 6c 61 74 69 6e 67 20  ..-- populating 
0a80: 74 68 65 20 74 61 62 6c 65 0d 0a 2d 2d 0d 0a 49  the table..--..I
0a90: 4e 53 45 52 54 20 49 4e 54 4f 20 65 78 61 6d 70  NSERT INTO examp
0aa0: 6c 65 20 28 69 64 2c 20 6e 61 6d 65 2c 20 76 61  le (id, name, va
0ab0: 6c 75 65 29 20 56 41 4c 55 45 53 20 28 4e 55 4c  lue) VALUES (NUL
0ac0: 4c 2c 20 27 66 69 72 73 74 27 2c 20 31 32 2e 33  L, 'first', 12.3
0ad0: 34 29 3b 0d 0a 49 4e 53 45 52 54 20 49 4e 54 4f  4);..INSERT INTO
0ae0: 20 65 78 61 6d 70 6c 65 20 28 69 64 2c 20 6e 61   example (id, na
0af0: 6d 65 2c 20 76 61 6c 75 65 29 20 56 41 4c 55 45  me, value) VALUE
0b00: 53 20 28 4e 55 4c 4c 2c 20 27 73 65 63 6f 6e 64  S (NULL, 'second
0b10: 27 2c 20 35 36 2e 37 38 29 3b 0d 0a 49 4e 53 45  ', 56.78);..INSE
0b20: 52 54 20 49 4e 54 4f 20 65 78 61 6d 70 6c 65 20  RT INTO example 
0b30: 28 69 64 2c 20 6e 61 6d 65 2c 20 76 61 6c 75 65  (id, name, value
0b40: 29 20 56 41 4c 55 45 53 20 28 4e 55 4c 4c 2c 20  ) VALUES (NULL, 
0b50: 27 74 68 69 72 64 27 2c 20 4e 55 4c 4c 29 3b 0d  'third', NULL);.
0b60: 0a 0d 0a 2d 2d 0d 0a 2d 2d 20 63 6f 6d 6d 69 74  ...--..-- commit
0b70: 74 69 6e 67 20 74 68 65 20 70 65 6e 64 69 6e 67  ting the pending
0b80: 20 54 72 61 6e 73 61 63 74 69 6f 6e 0d 0a 2d 2d   Transaction..--
0b90: 0d 0a 43 4f 4d 4d 49 54 3b 0d 0a 0d 0a 2e 71 75  ..COMMIT;.....qu
0ba0: 69 74 0d 0a 3c 2f 76 65 72 62 61 74 69 6d 3e 0d  it..</verbatim>.
0bb0: 0a 3c 68 72 3e 0d 0a 3c 2f 6c 69 3e 0d 0a 3c 6c  .<hr>..</li>..<l
0bc0: 69 3e 0d 0a 3c 68 34 3e 53 51 4c 20 56 61 72 69  i>..<h4>SQL Vari
0bd0: 61 62 6c 65 3c 2f 68 34 3e 0d 0a 41 20 3c 62 3e  able</h4>..A <b>
0be0: 3c 69 3e 53 51 4c 20 56 61 72 69 61 62 6c 65 3c  <i>SQL Variable<
0bf0: 2f 69 3e 3c 2f 62 3e 20 69 73 20 6a 75 73 74 20  /i></b> is just 
0c00: 61 20 70 6c 61 63 65 68 6f 6c 64 65 72 20 73 79  a placeholder sy
0c10: 6d 62 6f 6c 2c 20 74 68 61 74 20 6c 61 74 65 72  mbol, that later
0c20: 20 6d 75 73 74 20 62 65 20 72 65 73 6f 6c 76 65   must be resolve
0c30: 64 2c 20 65 6e 63 6c 6f 73 65 64 20 62 65 74 77  d, enclosed betw
0c40: 65 65 6e 20 74 77 6f 20 3c 69 3e 3c 75 3e 73 70  een two <i><u>sp
0c50: 65 63 69 61 6c 20 6d 61 72 6b 65 72 73 3c 2f 75  ecial markers</u
0c60: 3e 3c 2f 69 3e 20 28 3c 62 3e 3c 69 3e 40 3c 2f  ></i> (<b><i>@</
0c70: 69 3e 3c 2f 62 3e 20 6f 72 20 3c 62 3e 3c 69 3e  i></b> or <b><i>
0c80: 24 3c 2f 69 3e 3c 2f 62 3e 29 2e 20 45 78 61 6d  $</i></b>). Exam
0c90: 70 6c 65 73 3a 0d 0a 3c 76 65 72 62 61 74 69 6d  ples:..<verbatim
0ca0: 3e 0d 0a 40 74 61 62 6c 65 5f 6e 61 6d 65 40 0d  >..@table_name@.
0cb0: 0a 40 63 6f 6c 5f 6e 61 6d 65 40 0d 0a 24 76 61  .@col_name@..$va
0cc0: 6c 75 65 24 0d 0a 24 72 61 64 69 75 73 24 0d 0a  lue$..$radius$..
0cd0: 3c 2f 76 65 72 62 61 74 69 6d 3e 0d 0a 3c 75 3e  </verbatim>..<u>
0ce0: 4e 6f 74 65 3c 2f 75 3e 3a 20 75 73 69 6e 67 20  Note</u>: using 
0cf0: 74 68 65 20 3c 62 3e 3c 69 3e 40 3c 2f 69 3e 3c  the <b><i>@</i><
0d00: 2f 62 3e 20 6f 72 20 74 68 65 20 3c 62 3e 3c 69  /b> or the <b><i
0d10: 3e 24 3c 2f 69 3e 3c 2f 62 3e 20 6d 61 72 6b 65  >$</i></b> marke
0d20: 72 73 20 69 73 20 6a 75 73 74 20 61 20 3c 69 3e  rs is just a <i>
0d30: 3c 75 3e 6d 61 74 74 65 72 20 6f 66 20 63 68 6f  <u>matter of cho
0d40: 69 63 65 3c 2f 75 3e 3c 2f 69 3e 3b 20 62 6f 74  ice</u></i>; bot
0d50: 68 20 68 61 76 65 20 69 64 65 6e 74 69 63 61 6c  h have identical
0d60: 20 6d 65 61 6e 69 6e 67 20 61 6e 64 20 70 72 61   meaning and pra
0d70: 63 74 69 63 61 6c 20 65 66 66 65 63 74 2e 0d 0a  ctical effect...
0d80: 3c 62 72 3e 3c 62 72 3e 3c 68 72 3e 0d 0a 3c 2f  <br><br><hr>..</
0d90: 6c 69 3e 0d 0a 3c 6c 69 3e 0d 0a 3c 68 34 3e 53  li>..<li>..<h4>S
0da0: 51 4c 20 42 6f 64 79 3c 2f 68 34 3e 0d 0a 41 20  QL Body</h4>..A 
0db0: 3c 62 3e 3c 69 3e 53 51 4c 20 53 63 72 69 70 74  <b><i>SQL Script
0dc0: 3c 2f 69 3e 3c 2f 62 3e 20 74 68 61 74 20 69 6e  </i></b> that in
0dd0: 74 65 72 6e 61 6c 6c 79 20 75 73 65 73 20 3c 62  ternally uses <b
0de0: 3e 3c 69 3e 56 61 72 69 61 62 6c 65 73 3c 2f 69  ><i>Variables</i
0df0: 3e 3c 2f 62 3e 2e 20 45 78 61 6d 70 6c 65 3a 0d  ></b>. Example:.
0e00: 0a 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 2e 65 63  .<verbatim>...ec
0e10: 68 6f 20 6f 6e 0d 0a 0d 0a 2d 2d 0d 0a 2d 2d 20  ho on....--..-- 
0e20: 73 74 61 72 74 69 6e 67 20 61 20 54 72 61 6e 73  starting a Trans
0e30: 61 63 74 69 6f 6e 0d 0a 2d 2d 0d 0a 42 45 47 49  action..--..BEGI
0e40: 4e 3b 0d 0a 0d 0a 2d 2d 0d 0a 2d 2d 20 63 72 65  N;....--..-- cre
0e50: 61 74 69 6e 67 20 61 20 74 61 62 6c 65 0d 0a 2d  ating a table..-
0e60: 2d 0d 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  -..CREATE TABLE 
0e70: 40 74 61 62 6c 65 40 20 28 0d 0a 20 20 40 70 6b  @table@ (..  @pk
0e80: 40 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  @ INTEGER PRIMAR
0e90: 59 20 4b 45 59 20 41 55 54 4f 49 4e 43 52 45 4d  Y KEY AUTOINCREM
0ea0: 45 4e 54 2c 0d 0a 20 20 40 63 6f 6c 31 40 20 54  ENT,..  @col1@ T
0eb0: 45 58 54 20 4e 4f 54 20 4e 55 4c 4c 2c 0d 0a 20  EXT NOT NULL,.. 
0ec0: 20 40 63 6f 6c 32 40 20 44 4f 55 42 4c 45 29 3b   @col2@ DOUBLE);
0ed0: 0d 0a 0d 0a 2d 2d 0d 0a 2d 2d 20 70 6f 70 75 6c  ....--..-- popul
0ee0: 61 74 69 6e 67 20 74 68 65 20 74 61 62 6c 65 0d  ating the table.
0ef0: 0a 2d 2d 0d 0a 49 4e 53 45 52 54 20 49 4e 54 4f  .--..INSERT INTO
0f00: 20 40 74 61 62 6c 65 40 20 28 40 70 6b 40 2c 20   @table@ (@pk@, 
0f10: 40 63 6f 6c 31 40 2c 20 40 63 6f 6c 32 40 29 20  @col1@, @col2@) 
0f20: 56 41 4c 55 45 53 20 28 4e 55 4c 4c 2c 20 27 66  VALUES (NULL, 'f
0f30: 69 72 73 74 27 2c 20 31 32 2e 33 34 29 3b 0d 0a  irst', 12.34);..
0f40: 49 4e 53 45 52 54 20 49 4e 54 4f 20 40 74 61 62  INSERT INTO @tab
0f50: 6c 65 40 20 28 40 70 6b 40 2c 20 40 63 6f 6c 31  le@ (@pk@, @col1
0f60: 40 2c 20 40 63 6f 6c 32 40 29 20 56 41 4c 55 45  @, @col2@) VALUE
0f70: 53 20 28 4e 55 4c 4c 2c 20 27 73 65 63 6f 6e 64  S (NULL, 'second
0f80: 27 2c 20 35 36 2e 37 38 29 3b 0d 0a 49 4e 53 45  ', 56.78);..INSE
0f90: 52 54 20 49 4e 54 4f 20 40 74 61 62 6c 65 40 20  RT INTO @table@ 
0fa0: 28 40 70 6b 40 2c 20 40 63 6f 6c 32 40 2c 20 40  (@pk@, @col2@, @
0fb0: 63 6f 6c 32 40 29 20 56 41 4c 55 45 53 20 28 4e  col2@) VALUES (N
0fc0: 55 4c 4c 2c 20 27 74 68 69 72 64 27 2c 20 4e 55  ULL, 'third', NU
0fd0: 4c 4c 29 3b 0d 0a 0d 0a 2d 2d 0d 0a 2d 2d 20 63  LL);....--..-- c
0fe0: 6f 6d 6d 69 74 74 69 6e 67 20 74 68 65 20 70 65  ommitting the pe
0ff0: 6e 64 69 6e 67 20 54 72 61 6e 73 61 63 74 69 6f  nding Transactio
1000: 6e 0d 0a 2d 2d 0d 0a 43 4f 4d 4d 49 54 3b 0d 0a  n..--..COMMIT;..
1010: 0d 0a 2e 71 75 69 74 0d 0a 3c 2f 76 65 72 62 61  ...quit..</verba
1020: 74 69 6d 3e 0d 0a 3c 75 3e 4e 6f 74 65 3c 2f 75  tim>..<u>Note</u
1030: 3e 3a 20 74 68 69 73 20 73 65 63 6f 6e 64 20 76  >: this second v
1040: 65 72 73 69 6f 6e 20 69 73 20 6f 62 76 69 6f 75  ersion is obviou
1050: 73 6c 79 20 6d 6f 72 65 20 66 6c 65 78 69 62 6c  sly more flexibl
1060: 65 20 74 68 61 6e 20 74 68 65 20 69 6e 69 74 69  e than the initi
1070: 61 6c 20 53 51 4c 20 73 63 72 69 70 74 2c 20 62  al SQL script, b
1080: 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
1090: 2d 6e 61 6d 65 73 20 61 6e 64 20 63 6f 6c 75 6d  -names and colum
10a0: 6e 2d 6e 61 6d 65 73 20 61 72 65 20 6e 6f 20 6c  n-names are no l
10b0: 6f 6e 67 65 72 20 3c 75 3e 3c 69 3e 68 61 72 64  onger <u><i>hard
10c0: 63 6f 64 65 64 3c 2f 69 3e 3c 2f 75 3e 2c 20 62  coded</i></u>, b
10d0: 75 74 20 3c 75 3e 3c 69 3e 64 79 6e 61 6d 69 63  ut <u><i>dynamic
10e0: 3c 2f 69 3e 3c 2f 75 3e 2e 3c 62 72 3e 0d 0a 53  </i></u>.<br>..S
10f0: 6f 20 77 65 20 61 72 65 20 6e 6f 77 20 66 72 65  o we are now fre
1100: 65 20 74 6f 20 72 65 75 73 65 20 74 68 69 73 20  e to reuse this 
1110: 53 51 4c 20 42 6f 64 79 2c 20 69 6e 20 61 20 64  SQL Body, in a d
1120: 69 66 66 65 72 65 6e 74 20 63 6f 6e 74 65 78 74  ifferent context
1130: 20 61 66 74 65 72 20 73 65 74 74 69 6e 67 20 74   after setting t
1140: 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 56  he appropriate V
1150: 61 72 69 61 62 6c 65 20 56 61 6c 75 65 73 20 62  ariable Values b
1160: 65 66 6f 72 65 20 65 78 65 63 75 74 69 6f 6e 2e  efore execution.
1170: 3c 62 72 3e 3c 62 72 3e 0d 0a 3c 62 3e 3c 69 3e  <br><br>..<b><i>
1180: 53 51 4c 20 42 6f 64 69 65 73 3c 2f 69 3e 3c 2f  SQL Bodies</i></
1190: 62 3e 20 65 78 69 73 74 20 69 6e 20 74 77 6f 20  b> exist in two 
11a0: 64 69 66 66 65 72 65 6e 74 20 66 6f 72 6d 73 3a  different forms:
11b0: 0d 0a 3c 75 6c 3e 0d 0a 3c 6c 69 3e 3c 62 3e 72  ..<ul>..<li><b>r
11c0: 61 77 3c 2f 62 3e 3a 20 63 6f 6e 74 61 69 6e 69  aw</b>: containi
11d0: 6e 67 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20  ng the symbolic 
11e0: 56 61 72 69 61 62 6c 65 73 2e 3c 2f 6c 69 3e 0d  Variables.</li>.
11f0: 0a 3c 6c 69 3e 3c 62 3e 63 6f 6f 6b 65 64 3c 2f  .<li><b>cooked</
1200: 62 3e 3a 20 77 69 74 68 20 74 68 65 20 73 79 6d  b>: with the sym
1210: 62 6f 6c 69 63 20 56 61 72 69 61 62 6c 65 73 20  bolic Variables 
1220: 70 72 6f 70 65 72 6c 79 20 72 65 70 6c 61 63 65  properly replace
1230: 64 20 62 79 20 74 68 65 20 61 63 74 75 61 6c 20  d by the actual 
1240: 76 61 6c 75 65 73 2e 3c 62 72 3e 0d 0a 4f 62 76  values.<br>..Obv
1250: 69 6f 75 73 6c 79 2c 20 6f 6e 6c 79 20 74 68 65  iously, only the
1260: 20 3c 62 3e 3c 69 3e 63 6f 6f 6b 65 64 3c 2f 69   <b><i>cooked</i
1270: 3e 3c 2f 62 3e 20 66 6f 72 6d 20 63 61 6e 20 62  ></b> form can b
1280: 65 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 65  e successfully e
1290: 78 65 63 75 74 65 64 2e 3c 2f 6c 69 3e 0d 0a 3c  xecuted.</li>..<
12a0: 2f 75 6c 3e 0d 0a 3c 62 72 3e 3c 68 72 3e 0d 0a  /ul>..<br><hr>..
12b0: 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e 0d 0a 3c 68 34  </li>..<li>..<h4
12c0: 3e 53 51 4c 20 50 72 6f 63 65 64 75 72 65 20 42  >SQL Procedure B
12d0: 4c 4f 42 20 6f 62 6a 65 63 74 3c 2f 68 34 3e 0d  LOB object</h4>.
12e0: 0a 54 68 69 73 20 73 69 6d 70 6c 79 20 69 73 20  .This simply is 
12f0: 61 20 3c 62 3e 3c 69 3e 42 4c 4f 42 20 65 6e 63  a <b><i>BLOB enc
1300: 6f 64 65 64 3c 2f 69 3e 3c 2f 62 3e 20 77 69 74  oded</i></b> wit
1310: 68 20 74 68 65 20 70 72 65 2d 63 6f 6d 70 69 6c  h the pre-compil
1320: 65 64 20 27 3c 75 3e 3c 69 3e 72 61 77 3c 2f 69  ed '<u><i>raw</i
1330: 3e 3c 2f 75 3e 27 20 3c 62 3e 3c 69 3e 53 51 4c  ></u>' <b><i>SQL
1340: 20 42 6f 64 79 3c 2f 69 3e 3c 2f 62 3e 2c 20 77   Body</i></b>, w
1350: 68 69 63 68 20 77 69 6c 6c 20 62 65 20 75 73 65  hich will be use
1360: 64 20 62 79 20 20 70 72 61 63 74 69 63 61 6c 6c  d by  practicall
1370: 79 20 61 6c 6c 20 53 51 4c 20 66 75 6e 63 74 69  y all SQL functi
1380: 6f 6e 73 20 73 75 70 70 6f 72 74 69 6e 67 20 53  ons supporting S
1390: 74 6f 72 65 64 20 50 72 6f 63 65 64 75 72 65 73  tored Procedures
13a0: 2e 20 0d 0a 3c 62 72 3e 3c 62 72 3e 3c 68 72 3e  . ..<br><br><hr>
13b0: 20 0d 0a 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e 0d 0a   ..</li>..<li>..
13c0: 3c 68 34 3e 53 74 6f 72 65 64 20 50 72 6f 63 65  <h4>Stored Proce
13d0: 64 75 72 65 3c 2f 68 34 3e 0d 0a 41 20 3c 62 3e  dure</h4>..A <b>
13e0: 3c 69 3e 53 51 4c 20 50 72 6f 63 65 64 75 72 65  <i>SQL Procedure
13f0: 20 42 4c 4f 42 20 6f 62 6a 65 63 74 3c 2f 69 3e   BLOB object</i>
1400: 3c 2f 62 3e 20 74 68 61 74 20 69 73 20 70 65 72  </b> that is per
1410: 6d 61 6e 65 6e 74 6c 79 20 73 74 6f 72 65 64 20  manently stored 
1420: 69 6e 74 6f 20 61 20 64 61 74 61 62 61 73 65 2e  into a database.
1430: 3c 62 72 3e 0d 0a 54 68 69 73 20 6d 61 6b 65 73  <br>..This makes
1440: 20 69 74 20 65 61 73 69 65 72 20 74 6f 20 75 73   it easier to us
1450: 65 20 69 6e 20 61 20 61 75 74 6f 6d 61 74 65 64  e in a automated
1460: 20 20 77 6f 72 6b 66 6c 6f 77 2c 20 70 65 72 68    workflow, perh
1470: 61 70 73 20 74 6f 20 62 65 20 69 6d 70 6c 65 6d  aps to be implem
1480: 65 6e 74 65 64 20 61 73 20 61 20 72 6f 75 74 69  ented as a routi
1490: 6e 65 6c 79 20 70 65 72 69 6f 64 69 63 20 74 61  nely periodic ta
14a0: 73 6b 20 28 64 61 69 6c 79 20 2f 20 77 65 65 6b  sk (daily / week
14b0: 6c 79 20 2f 20 6d 6f 6e 74 68 6c 79 20 61 6e 64  ly / monthly and
14c0: 20 73 6f 20 6f 6e 29 2e 3c 62 72 3e 0d 0a 53 74   so on).<br>..St
14d0: 6f 72 65 64 20 50 72 6f 63 65 64 75 72 65 73 20  ored Procedures 
14e0: 61 6c 77 61 79 73 20 63 6f 6e 74 61 69 6e 20 74  always contain t
14f0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 6c 65  he following ele
1500: 6d 65 6e 74 73 3a 0d 0a 3c 75 6c 3e 0d 0a 3c 6c  ments:..<ul>..<l
1510: 69 3e 61 20 3c 62 3e 6e 61 6d 65 3c 2f 62 3e 2c  i>a <b>name</b>,
1520: 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20   intended to be 
1530: 61 6e 20 75 6e 69 71 75 65 20 69 64 65 6e 74 69  an unique identi
1540: 66 69 65 72 20 28 3c 62 3e 3c 69 3e 50 72 69 6d  fier (<b><i>Prim
1550: 61 72 79 20 4b 65 79 3c 2f 69 3e 3c 2f 62 3e 29  ary Key</i></b>)
1560: 2e 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e 61 20 3c 62  .</li>..<li>a <b
1570: 3e 74 69 74 6c 65 3c 2f 62 3e 2c 20 69 2e 65 2e  >title</b>, i.e.
1580: 20 61 20 73 68 6f 72 74 20 64 65 73 63 72 69 70   a short descrip
1590: 74 69 6f 6e 20 6f 66 20 74 68 65 20 69 6e 74 65  tion of the inte
15a0: 6e 64 65 64 20 73 63 6f 70 65 20 6f 66 20 74 68  nded scope of th
15b0: 65 20 53 74 6f 72 65 64 20 50 72 6f 63 65 64 75  e Stored Procedu
15c0: 72 65 2e 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e 61 20  re.</li>..<li>a 
15d0: 3c 62 3e 53 51 4c 20 50 72 6f 63 65 64 75 72 65  <b>SQL Procedure
15e0: 20 42 4c 4f 42 20 4f 62 6a 65 63 74 3c 2f 62 3e   BLOB Object</b>
15f0: 2e 3c 2f 6c 69 3e 0d 0a 3c 2f 75 6c 3e 0d 0a 3c  .</li>..</ul>..<
1600: 62 72 3e 3c 68 72 3e 0d 0a 3c 2f 6c 69 3e 0d 0a  br><hr>..</li>..
1610: 3c 6c 69 3e 0d 0a 3c 68 34 3e 56 61 72 69 61 62  <li>..<h4>Variab
1620: 6c 65 20 77 69 74 68 20 56 61 6c 75 65 20 73 74  le with Value st
1630: 72 69 6e 67 73 3c 2f 68 34 3e 0d 0a 42 65 66 6f  rings</h4>..Befo
1640: 72 65 20 65 78 65 63 75 74 69 6e 67 20 61 20 27  re executing a '
1650: 3c 69 3e 72 61 77 3c 2f 69 3e 27 20 3c 62 3e 3c  <i>raw</i>' <b><
1660: 69 3e 53 51 4c 20 42 6f 64 79 3c 2f 69 3e 3c 2f  i>SQL Body</i></
1670: 62 3e 20 28 77 69 74 68 20 70 6c 61 63 65 68 6f  b> (with placeho
1680: 6c 64 65 72 20 3c 62 3e 3c 69 3e 56 61 72 69 61  lder <b><i>Varia
1690: 62 6c 65 73 3c 2f 69 3e 3c 2f 62 3e 29 2c 20 74  bles</i></b>), t
16a0: 68 65 73 65 20 56 61 72 69 61 62 6c 65 73 20 6e  hese Variables n
16b0: 65 65 64 20 74 6f 20 62 65 20 72 65 70 6c 61 63  eed to be replac
16c0: 65 64 20 28 27 3c 69 3e 63 6f 6f 6b 65 64 3c 2f  ed ('<i>cooked</
16d0: 69 3e 27 29 20 77 69 74 68 20 74 68 65 20 61 70  i>') with the ap
16e0: 70 72 6f 70 72 69 61 74 65 20 3c 62 3e 3c 69 3e  propriate <b><i>
16f0: 56 61 6c 75 65 73 3c 2f 69 3e 3c 2f 62 3e 2c 20  Values</i></b>, 
1700: 74 68 69 73 20 70 72 6f 70 65 72 6c 79 20 74 72  this properly tr
1710: 61 6e 73 66 6f 72 6d 69 6e 67 20 61 20 27 3c 62  ansforming a '<b
1720: 3e 72 61 77 3c 2f 62 3e 27 20 53 51 4c 20 42 6f  >raw</b>' SQL Bo
1730: 64 79 20 69 6e 74 6f 20 61 20 27 3c 62 3e 63 6f  dy into a '<b>co
1740: 6f 6b 65 64 3c 2f 62 3e 27 20 53 51 4c 20 42 6f  oked</b>' SQL Bo
1750: 64 79 2e 3c 62 72 3e 0d 0a 41 20 3c 62 3e 3c 69  dy.<br>..A <b><i
1760: 3e 56 61 72 69 61 62 6c 65 20 77 69 74 68 20 56  >Variable with V
1770: 61 6c 75 65 3c 2f 69 3e 3c 2f 62 3e 20 73 74 72  alue</i></b> str
1780: 69 6e 67 20 73 69 6d 70 6c 79 20 69 73 20 61 6e  ing simply is an
1790: 20 61 70 70 72 6f 70 72 69 61 74 65 6c 79 20 77   appropriately w
17a0: 65 6c 6c 2d 66 6f 72 6d 61 74 74 65 64 20 54 65  ell-formatted Te
17b0: 78 74 20 73 74 72 69 6e 67 20 64 65 63 6c 61 72  xt string declar
17c0: 69 6e 67 20 62 6f 74 68 20 74 68 65 20 53 79 6d  ing both the Sym
17d0: 62 6f 6c 20 61 6e 64 20 74 68 65 20 63 6f 72 72  bol and the corr
17e0: 65 73 70 6f 6e 64 69 6e 67 20 72 65 70 6c 61 63  esponding replac
17f0: 65 6d 65 6e 74 20 56 61 6c 75 65 20 28 65 78 70  ement Value (exp
1800: 72 65 73 73 65 64 20 69 6e 20 69 74 73 20 74 65  ressed in its te
1810: 78 74 75 61 6c 20 72 65 70 72 65 73 65 6e 74 61  xtual representa
1820: 74 69 6f 6e 29 2e 20 45 78 61 6d 70 6c 65 73 3a  tion). Examples:
1830: 0d 0a 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 40 76  ..<verbatim>..@v
1840: 61 6c 75 65 5f 31 40 3d 31 32 33 34 20 20 20 20  alue_1@=1234    
1850: 20 20 20 20 20 20 20 20 2d 2d 20 69 6e 74 65 67          -- integ
1860: 65 72 20 76 61 6c 75 65 0d 0a 40 76 61 6c 75 65  er value..@value
1870: 5f 32 40 3d 31 32 2e 33 34 20 20 20 20 20 20 20  _2@=12.34       
1880: 20 20 20 20 2d 2d 20 64 6f 75 62 6c 65 20 76 61      -- double va
1890: 6c 75 65 0d 0a 40 76 61 6c 75 65 5f 33 40 3d 4e  lue..@value_3@=N
18a0: 65 77 20 59 6f 72 6b 20 43 69 74 79 20 20 20 2d  ew York City   -
18b0: 2d 20 74 65 78 74 20 76 61 6c 75 65 0d 0a 40 76  - text value..@v
18c0: 61 6c 75 65 5f 34 40 3d 78 27 30 31 32 33 61 62  alue_4@=x'0123ab
18d0: 63 64 27 20 20 20 20 20 2d 2d 20 62 6c 6f 62 20  cd'     -- blob 
18e0: 76 61 6c 75 65 0d 0a 40 76 61 6c 75 65 5f 35 40  value..@value_5@
18f0: 3d 4e 55 4c 4c 20 20 20 20 20 20 20 20 20 20 20  =NULL           
1900: 20 2d 2d 20 6e 75 6c 6c 20 76 61 6c 75 65 0d 0a   -- null value..
1910: 3c 2f 76 65 72 62 61 74 69 6d 3e 0d 0a 3c 74 61  </verbatim>..<ta
1920: 62 6c 65 20 62 67 63 6f 6c 6f 72 3d 22 23 66 38  ble bgcolor="#f8
1930: 66 38 64 38 22 20 63 65 6c 6c 70 61 64 64 69 6e  f8d8" cellpaddin
1940: 67 3d 22 36 22 20 63 65 6c 6c 73 70 61 63 69 6e  g="6" cellspacin
1950: 67 3d 22 38 22 3e 3c 74 72 3e 3c 74 64 3e 0d 0a  g="8"><tr><td>..
1960: 3c 75 3e 4e 6f 74 65 3c 2f 75 3e 3a 20 72 65 70  <u>Note</u>: rep
1970: 6c 61 63 69 6e 67 20 56 61 72 69 61 62 6c 65 73  lacing Variables
1980: 20 77 69 74 68 20 74 68 65 20 61 63 74 75 61 6c   with the actual
1990: 20 56 61 6c 75 65 73 20 69 73 20 61 20 62 6c 69   Values is a bli
19a0: 6e 64 20 70 72 6f 63 65 73 73 20 63 6f 6d 70 6c  nd process compl
19b0: 65 74 65 6c 79 20 69 6e 73 65 6e 73 69 62 6c 65  etely insensible
19c0: 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 63   to the specific
19d0: 20 73 79 6e 74 61 63 74 69 63 20 63 6f 6e 74 65   syntactic conte
19e0: 78 74 2e 3c 62 72 3e 0d 0a 59 6f 75 20 61 72 65  xt.<br>..You are
19f0: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1a00: 20 74 68 65 20 63 6f 72 72 65 63 74 20 61 70 70   the correct app
1a10: 6c 69 63 61 74 69 6f 6e 20 6f 66 20 73 69 6e 67  lication of sing
1a20: 6c 65 2d 20 6f 72 20 64 6f 75 62 6c 65 2d 71 75  le- or double-qu
1a30: 6f 74 69 6e 67 2c 20 72 65 71 75 69 72 65 64 20  oting, required 
1a40: 62 79 20 74 68 65 20 53 51 4c 20 73 79 6e 74 61  by the SQL synta
1a50: 78 20 72 75 6c 65 73 2e 0d 0a 3c 2f 74 64 3e 3c  x rules...</td><
1a60: 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0d 0a 3c 62  /tr></table>..<b
1a70: 72 3e 3c 68 72 3e 0d 0a 3c 2f 6c 69 3e 0d 0a 3c  r><hr>..</li>..<
1a80: 6c 69 3e 0d 0a 3c 68 34 3e 53 74 6f 72 65 64 20  li>..<h4>Stored 
1a90: 56 61 72 69 61 62 6c 65 3c 2f 68 34 3e 0d 0a 41  Variable</h4>..A
1aa0: 20 3c 62 3e 3c 69 3e 56 61 72 69 61 62 6c 65 20   <b><i>Variable 
1ab0: 77 69 74 68 20 56 61 6c 75 65 3c 2f 69 3e 3c 2f  with Value</i></
1ac0: 62 3e 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 73  b> permanently s
1ad0: 74 6f 72 65 64 20 69 6e 74 6f 20 61 20 64 61 74  tored into a dat
1ae0: 61 62 61 73 65 2e 3c 62 72 3e 0d 0a 53 74 6f 72  abase.<br>..Stor
1af0: 65 64 20 56 61 72 69 61 62 6c 65 73 20 61 6c 77  ed Variables alw
1b00: 61 79 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ays contain the 
1b10: 66 6f 6c 6c 6f 77 69 6e 67 20 65 6c 65 6d 65 6e  following elemen
1b20: 74 73 3a 0d 0a 3c 75 6c 3e 0d 0a 3c 6c 69 3e 61  ts:..<ul>..<li>a
1b30: 20 3c 62 3e 6e 61 6d 65 3c 2f 62 3e 2c 20 69 6e   <b>name</b>, in
1b40: 74 65 6e 64 65 64 20 74 6f 20 62 65 20 61 6e 20  tended to be an 
1b50: 75 6e 69 71 75 65 20 69 64 65 6e 74 69 66 69 65  unique identifie
1b60: 72 20 28 3c 62 3e 3c 69 3e 50 72 69 6d 61 72 79  r (<b><i>Primary
1b70: 20 4b 65 79 3c 2f 69 3e 3c 2f 62 3e 29 2e 3c 2f   Key</i></b>).</
1b80: 6c 69 3e 0d 0a 3c 6c 69 3e 61 20 3c 62 3e 74 69  li>..<li>a <b>ti
1b90: 74 6c 65 3c 2f 62 3e 2c 20 69 2e 65 2e 20 61 20  tle</b>, i.e. a 
1ba0: 73 68 6f 72 74 20 64 65 73 63 72 69 70 74 69 6f  short descriptio
1bb0: 6e 20 6f 66 20 74 68 65 20 69 6e 74 65 6e 64 65  n of the intende
1bc0: 64 20 73 63 6f 70 65 20 6f 66 20 74 68 65 20 53  d scope of the S
1bd0: 74 6f 72 65 64 20 56 61 72 69 61 62 6c 65 2e 3c  tored Variable.<
1be0: 2f 6c 69 3e 0d 0a 3c 6c 69 3e 61 20 3c 62 3e 56  /li>..<li>a <b>V
1bf0: 61 6c 75 65 20 73 74 72 69 6e 67 3c 2f 62 3e 2e  alue string</b>.
1c00: 3c 2f 6c 69 3e 3c 62 72 3e 0d 0a 3c 2f 75 6c 3e  </li><br>..</ul>
1c10: 3c 74 61 62 6c 65 20 62 67 63 6f 6c 6f 72 3d 22  <table bgcolor="
1c20: 23 66 38 66 38 64 38 22 20 63 65 6c 6c 70 61 64  #f8f8d8" cellpad
1c30: 64 69 6e 67 3d 22 36 22 20 63 65 6c 6c 73 70 61  ding="6" cellspa
1c40: 63 69 6e 67 3d 22 38 22 3e 3c 74 72 3e 3c 74 64  cing="8"><tr><td
1c50: 3e 0d 0a 3c 75 3e 4e 6f 74 65 3c 2f 75 3e 3a 20  >..<u>Note</u>: 
1c60: 74 68 65 20 69 6e 74 65 6e 64 65 64 20 73 63 6f  the intended sco
1c70: 70 65 20 6f 66 20 3c 62 3e 53 74 6f 72 65 64 20  pe of <b>Stored 
1c80: 56 61 72 69 61 62 6c 65 73 3c 2f 62 3e 20 69 73  Variables</b> is
1c90: 20 74 6f 20 64 65 66 69 6e 65 20 61 70 70 72 6f   to define appro
1ca0: 70 72 69 61 74 65 20 64 65 66 61 75 6c 74 20 76  priate default v
1cb0: 61 6c 75 65 73 2e 3c 62 72 3e 0d 0a 49 66 20 61  alues.<br>..If a
1cc0: 20 67 69 76 65 6e 20 3c 62 3e 56 61 72 69 61 62   given <b>Variab
1cd0: 6c 65 3c 2f 62 3e 20 69 73 20 62 65 69 6e 67 20  le</b> is being 
1ce0: 75 73 65 64 20 77 69 74 68 69 6e 20 61 20 3c 69  used within a <i
1cf0: 3e 72 61 77 3c 2f 69 3e 20 53 51 4c 20 42 6f 64  >raw</i> SQL Bod
1d00: 79 20 74 6f 20 62 65 20 65 78 65 63 75 74 65 64  y to be executed
1d10: 2c 20 61 6e 64 20 61 20 63 6f 72 72 65 73 70 6f  , and a correspo
1d20: 6e 64 69 6e 67 20 3c 62 3e 56 61 72 69 61 62 6c  nding <b>Variabl
1d30: 65 20 77 69 74 68 20 56 61 6c 75 65 3c 2f 62 3e  e with Value</b>
1d40: 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 72 65   has not been re
1d50: 73 6f 6c 76 65 64 2c 20 74 68 65 6e 20 61 6e 20  solved, then an 
1d60: 61 74 74 65 6d 70 74 20 77 69 6c 6c 20 62 65 20  attempt will be 
1d70: 61 6c 77 61 79 73 20 6d 61 64 65 20 74 6f 20 72  always made to r
1d80: 65 73 6f 6c 76 65 20 69 74 20 62 79 20 73 65 61  esolve it by sea
1d90: 72 63 68 69 6e 67 20 66 6f 72 20 61 20 63 6f 72  rching for a cor
1da0: 72 65 73 70 6f 6e 64 69 6e 67 20 3c 62 3e 53 74  responding <b>St
1db0: 6f 72 65 64 20 56 61 72 69 61 62 6c 65 3c 2f 62  ored Variable</b
1dc0: 3e 20 62 79 20 6e 61 6d 65 20 28 69 66 20 69 74  > by name (if it
1dd0: 20 65 78 69 73 74 73 29 2e 3c 62 72 3e 0d 0a 41   exists).<br>..A
1de0: 6e 20 65 78 70 6c 69 63 69 74 6c 79 20 64 65 66  n explicitly def
1df0: 69 6e 65 64 20 3c 62 3e 56 61 72 69 61 62 6c 65  ined <b>Variable
1e00: 20 77 69 74 68 20 56 61 6c 75 65 3c 2f 62 3e 20   with Value</b> 
1e10: 61 72 67 75 6d 65 6e 74 20 77 69 6c 6c 20 61 6c  argument will al
1e20: 77 61 79 73 20 74 61 6b 65 20 70 72 65 63 65 64  ways take preced
1e30: 65 6e 63 65 20 6f 76 65 72 20 74 68 65 20 63 6f  ence over the co
1e40: 72 72 65 73 70 6f 6e 64 69 6e 67 20 3c 62 3e 53  rresponding <b>S
1e50: 74 6f 72 65 64 20 56 61 72 69 61 62 6c 65 3c 2f  tored Variable</
1e60: 62 3e 3b 20 69 6e 20 6f 74 68 65 72 20 77 6f 72  b>; in other wor
1e70: 64 73 20 61 20 3c 62 3e 53 74 6f 72 65 64 20 56  ds a <b>Stored V
1e80: 61 72 69 61 62 6c 65 3c 2f 62 3e 20 28 69 66 20  ariable</b> (if 
1e90: 64 65 66 69 6e 65 64 29 20 77 69 6c 6c 20 6a 75  defined) will ju
1ea0: 73 74 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64  st be considered
1eb0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
1ec0: 75 65 2e 0d 0a 3c 2f 74 64 3e 3c 2f 74 72 3e 3c  ue...</td></tr><
1ed0: 2f 74 61 62 6c 65 3e 0d 0a 3c 62 72 3e 3c 68 72  /table>..<br><hr
1ee0: 3e 0d 0a 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e 0d 0a  >..</li>..<li>..
1ef0: 3c 68 34 3e 53 51 4c 20 4c 6f 67 66 69 6c 65 3c  <h4>SQL Logfile<
1f00: 2f 68 34 3e 0d 0a 53 51 4c 20 71 75 65 72 69 65  /h4>..SQL querie
1f10: 73 20 77 69 6c 6c 20 75 73 75 61 6c 6c 79 20 72  s will usually r
1f20: 65 74 75 72 6e 20 73 6f 6d 65 20 3c 62 3e 72 65  eturn some <b>re
1f30: 73 75 6c 74 73 65 74 3c 2f 62 3e 20 70 6f 74 65  sultset</b> pote
1f40: 6e 74 69 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 69  ntially containi
1f50: 6e 67 20 75 73 65 66 75 6c 20 69 6e 66 6f 72 6d  ng useful inform
1f60: 61 74 69 6f 6e 2e 3c 62 72 3e 0d 0a 42 75 74 20  ation.<br>..But 
1f70: 65 78 65 63 75 74 69 6e 67 20 61 20 3c 62 3e 53  executing a <b>S
1f80: 51 4c 20 50 72 6f 63 65 64 75 72 65 3c 2f 62 3e  QL Procedure</b>
1f90: 20 6f 72 20 3c 62 3e 53 74 6f 72 65 64 20 50 72   or <b>Stored Pr
1fa0: 6f 63 65 64 75 72 65 3c 2f 62 3e 20 77 69 6c 6c  ocedure</b> will
1fb0: 20 62 65 20 73 65 65 6e 20 62 79 20 53 51 4c 69   be seen by SQLi
1fc0: 74 65 20 6a 75 73 74 20 61 73 20 61 20 73 69 6d  te just as a sim
1fd0: 70 6c 65 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ple SQL function
1fe0: 20 63 61 6c 6c 20 73 69 6d 70 6c 79 20 72 65 74   call simply ret
1ff0: 75 72 6e 69 6e 67 20 61 20 66 69 6e 61 6c 20 73  urning a final s
2000: 75 63 63 65 73 73 20 6f 72 20 66 61 69 6c 75 72  uccess or failur
2010: 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 3c 62  e return code.<b
2020: 72 3e 0d 0a 41 6e 79 20 69 6e 66 6f 72 6d 61 74  r>..Any informat
2030: 69 6f 6e 20 61 62 6f 75 74 20 61 6c 6c 20 74 68  ion about all th
2040: 65 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 72  e intermediate r
2050: 65 73 75 6c 74 73 65 74 73 2c 20 69 6e 74 65 72  esultsets, inter
2060: 6e 61 6c 6c 79 20 70 72 6f 64 75 63 65 64 20 64  nally produced d
2070: 75 72 69 6e 67 20 74 68 65 20 65 78 65 63 75 74  uring the execut
2080: 69 6f 6e 20 6f 66 20 74 68 65 20 50 72 6f 63 65  ion of the Proce
2090: 64 75 72 65 2c 20 77 69 6c 6c 20 62 65 20 6c 6f  dure, will be lo
20a0: 73 74 2e 3c 62 72 3e 3c 62 72 3e 0d 0a 54 6f 20  st.<br><br>..To 
20b0: 61 76 6f 69 64 20 74 68 69 73 2c 20 79 6f 75 20  avoid this, you 
20c0: 63 61 6e 20 63 6f 6e 66 69 67 75 72 65 20 61 6e  can configure an
20d0: 20 65 78 74 65 72 6e 61 6c 20 3c 62 3e 53 51 4c   external <b>SQL
20e0: 20 4c 6f 67 66 69 6c 65 3c 2f 62 3e 20 74 6f 20   Logfile</b> to 
20f0: 70 65 72 6d 61 6e 65 6e 74 6c 79 20 73 74 6f 72  permanently stor
2100: 65 20 61 6c 6c 20 69 6e 74 65 72 6d 65 64 69 61  e all intermedia
2110: 74 65 20 72 65 73 75 6c 74 73 65 74 73 20 69 6e  te resultsets in
2120: 74 6f 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74  to an ordinary t
2130: 65 78 74 20 66 69 6c 65 2e 20 54 68 65 20 53 51  ext file. The SQ
2140: 4c 20 4c 6f 67 66 69 6c 65 20 73 75 70 70 6f 72  L Logfile suppor
2150: 74 73 20 74 77 6f 20 64 69 66 66 65 72 65 6e 74  ts two different
2160: 20 6d 6f 64 65 73 3a 0d 0a 3c 75 6c 3e 0d 0a 3c   modes:..<ul>..<
2170: 6c 69 3e 3c 62 3e 54 72 75 6e 63 61 74 65 3c 2f  li><b>Truncate</
2180: 62 3e 3a 20 74 68 65 20 4c 6f 67 66 69 6c 65 20  b>: the Logfile 
2190: 77 69 6c 6c 20 62 65 20 61 75 74 6f 6d 61 74 69  will be automati
21a0: 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 77 68  cally created wh
21b0: 65 6e 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 65  en not already e
21c0: 78 69 73 74 69 6e 67 2c 20 61 6e 64 20 69 74 20  xisting, and it 
21d0: 77 69 6c 6c 20 62 65 20 61 6c 77 61 79 73 20 74  will be always t
21e0: 72 75 6e 63 61 74 65 64 20 62 65 66 6f 72 65 20  runcated before 
21f0: 73 74 61 72 74 69 6e 67 20 61 6e 20 65 78 65 63  starting an exec
2200: 75 74 69 6f 6e 20 75 6e 69 74 3b 20 69 6e 20 6f  ution unit; in o
2210: 74 68 65 72 20 77 6f 72 64 73 20 69 74 20 77 69  ther words it wi
2220: 6c 6c 20 61 6c 77 61 79 73 20 70 72 65 73 65 72  ll always preser
2230: 76 65 20 6a 75 73 74 20 74 68 65 20 72 65 73 75  ve just the resu
2240: 6c 74 73 65 74 73 20 70 72 6f 64 75 63 65 64 20  ltsets produced 
2250: 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  by the most rece
2260: 6e 74 20 65 78 65 63 75 74 69 6f 6e 20 75 6e 69  nt execution uni
2270: 74 2e 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e 3c 62 3e  t.</li>..<li><b>
2280: 41 70 70 65 6e 64 3c 2f 62 3e 3a 20 74 68 65 20  Append</b>: the 
2290: 4c 6f 67 66 69 6c 65 20 77 69 6c 6c 20 62 65 20  Logfile will be 
22a0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72  automatically cr
22b0: 65 61 74 65 64 20 77 68 65 6e 20 6e 6f 74 20 61  eated when not a
22c0: 6c 72 65 61 64 79 20 65 78 69 73 74 69 6e 67 2c  lready existing,
22d0: 20 61 6e 64 20 69 74 20 77 69 6c 6c 20 62 65 20   and it will be 
22e0: 6e 65 76 65 72 20 74 72 75 6e 63 61 74 65 64 20  never truncated 
22f0: 62 65 66 6f 72 65 20 73 74 61 72 74 69 6e 67 20  before starting 
2300: 61 6e 20 65 78 65 63 75 74 69 6f 6e 20 75 6e 69  an execution uni
2310: 74 3b 20 69 6e 20 6f 74 68 65 72 20 77 6f 72 64  t; in other word
2320: 73 20 69 74 20 77 69 6c 6c 20 70 72 6f 67 72 65  s it will progre
2330: 73 73 69 76 65 6c 79 20 67 72 6f 77 20 73 6f 20  ssively grow so 
2340: 74 6f 20 73 74 6f 72 65 20 61 6c 6c 20 74 68 65  to store all the
2350: 20 72 65 73 75 6c 74 73 65 74 73 20 70 72 6f 64   resultsets prod
2360: 75 63 65 64 20 62 79 20 66 6f 6c 6c 6f 77 69 6e  uced by followin
2370: 67 20 65 78 65 63 75 74 69 6f 6e 20 75 6e 69 74  g execution unit
2380: 73 2e 3c 62 72 3e 0d 0a 3c 75 3e 4e 6f 74 65 3c  s.<br>..<u>Note<
2390: 2f 75 3e 3a 20 79 6f 75 27 6c 6c 20 62 65 20 6f  /u>: you'll be o
23a0: 62 76 69 6f 75 73 6c 79 20 72 65 71 75 69 72 65  bviously require
23b0: 64 20 74 6f 20 66 6c 75 73 68 20 74 68 65 20 4c  d to flush the L
23c0: 6f 67 66 69 6c 65 20 66 72 6f 6d 20 74 69 6d 65  ogfile from time
23d0: 20 74 6f 20 74 69 6d 65 20 73 6f 20 74 6f 20 73   to time so to s
23e0: 61 66 65 6c 79 20 61 76 6f 69 64 20 74 6f 20 63  afely avoid to c
23f0: 6f 6e 73 75 6d 65 20 74 6f 6f 20 6d 75 63 68 20  onsume too much 
2400: 73 74 6f 72 61 67 65 20 73 70 61 63 65 2e 3c 2f  storage space.</
2410: 6c 69 3e 0d 0a 3c 2f 75 6c 3e 0d 0a 3c 2f 6c 69  li>..</ul>..</li
2420: 3e 0d 0a 3c 2f 6c 69 3e 0d 0a 3c 2f 6f 6c 3e 3c  >..</li>..</ol><
2430: 62 72 3e 0d 0a 3c 68 72 3e 0d 0a 3c 68 32 3e 46  br>..<hr>..<h2>F
2440: 61 6d 69 6c 69 61 72 69 7a 69 6e 67 20 77 69 74  amiliarizing wit
2450: 68 20 53 51 4c 20 46 75 6e 63 74 69 6f 6e 73 3c  h SQL Functions<
2460: 2f 68 32 3e 0d 0a 3c 6f 6c 3e 0d 0a 3c 6c 69 3e  /h2>..<ol>..<li>
2470: 0d 0a 3c 68 34 3e 48 61 6e 64 6c 69 6e 67 20 53  ..<h4>Handling S
2480: 51 4c 20 50 72 6f 63 65 64 75 72 65 20 42 4c 4f  QL Procedure BLO
2490: 42 20 6f 62 6a 65 63 74 73 3c 2f 68 34 3e 0d 0a  B objects</h4>..
24a0: 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 53 45 4c 45  <verbatim>..SELE
24b0: 43 54 20 53 71 6c 50 72 6f 63 5f 46 72 6f 6d 54  CT SqlProc_FromT
24c0: 65 78 74 28 27 53 45 4c 45 43 54 20 40 63 6f 6c  ext('SELECT @col
24d0: 40 20 46 52 4f 4d 20 40 74 62 6c 40 27 29 3b 0d  @ FROM @tbl@');.
24e0: 0a 0d 0a 53 45 4c 45 43 54 20 53 71 6c 50 72 6f  ...SELECT SqlPro
24f0: 63 5f 46 72 6f 6d 46 69 6c 65 28 27 2f 68 6f 6d  c_FromFile('/hom
2500: 65 2f 6a 6f 65 2f 74 65 6d 70 6c 61 74 65 2e 74  e/joe/template.t
2510: 78 74 27 2c 20 43 50 31 32 35 32 27 29 3b 0d 0a  xt', CP1252');..
2520: 3c 2f 76 65 72 62 61 74 69 6d 3e 0d 0a 3c 75 6c  </verbatim>..<ul
2530: 3e 0d 0a 3c 6c 69 3e 79 6f 75 20 63 61 6e 20 63  >..<li>you can c
2540: 72 65 61 74 65 20 61 20 53 51 4c 20 50 72 6f 63  reate a SQL Proc
2550: 65 64 75 72 65 20 42 4c 4f 42 20 6f 62 6a 65 63  edure BLOB objec
2560: 74 20 62 79 20 64 69 72 65 63 74 6c 79 20 70 61  t by directly pa
2570: 73 73 69 6e 67 20 61 20 54 65 78 74 20 53 51 4c  ssing a Text SQL
2580: 20 42 6f 64 79 2e 3c 2f 6c 69 3e 0d 0a 3c 6c 69   Body.</li>..<li
2590: 3e 6f 72 20 61 6c 74 65 72 6e 61 74 69 76 65 6c  >or alternativel
25a0: 79 20 79 6f 75 20 63 61 6e 20 6c 6f 61 64 20 74  y you can load t
25b0: 68 65 20 53 51 4c 20 42 6f 64 79 20 66 72 6f 6d  he SQL Body from
25c0: 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 66 69 6c   an external fil
25d0: 65 2e 3c 62 72 3e 0d 0a 3c 75 3e 4e 6f 74 65 3c  e.<br>..<u>Note<
25e0: 2f 75 3e 3a 20 74 68 69 73 20 69 73 20 61 20 73  /u>: this is a s
25f0: 65 63 75 72 69 74 79 20 73 65 6e 73 69 62 6c 65  ecurity sensible
2600: 20 6f 70 65 72 61 74 69 6f 6e 2c 20 73 6f 20 79   operation, so y
2610: 6f 75 20 61 6c 77 61 79 73 20 6e 65 65 64 20 74  ou always need t
2620: 6f 20 73 65 74 20 61 6e 20 65 78 70 6c 69 63 69  o set an explici
2630: 74 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20  t authorization 
2640: 62 79 20 64 65 66 69 6e 69 6e 67 20 3c 62 3e 53  by defining <b>S
2650: 50 41 54 49 41 4c 49 54 45 5f 53 45 43 55 52 49  PATIALITE_SECURI
2660: 54 59 3d 72 65 6c 61 78 65 64 3c 2f 62 3e 2e 3c  TY=relaxed</b>.<
2670: 2f 6c 69 3e 0d 0a 3c 6c 69 3e 42 6f 74 68 20 66  /li>..<li>Both f
2680: 75 6e 63 74 69 6f 6e 73 20 61 63 63 65 70 74 20  unctions accept 
2690: 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 3c 62 3e 63  an optional <b>c
26a0: 68 61 72 73 65 74 20 65 6e 63 6f 64 69 6e 67 3c  harset encoding<
26b0: 2f 62 3e 20 61 72 67 75 6d 65 6e 74 3b 20 69 6e  /b> argument; in
26c0: 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 53   this case the S
26d0: 51 4c 20 42 6f 64 79 20 77 69 6c 6c 20 62 65 20  QL Body will be 
26e0: 61 70 70 72 6f 70 72 69 61 74 65 6c 79 20 63 6f  appropriately co
26f0: 6e 76 65 72 74 65 64 20 66 72 6f 6d 20 74 68 65  nverted from the
2700: 20 67 69 76 65 6e 20 63 68 61 72 73 65 74 20 69   given charset i
2710: 6e 74 6f 20 3c 62 3e 55 54 46 2d 38 3c 2f 62 3e  nto <b>UTF-8</b>
2720: 2e 3c 2f 6c 69 3e 0d 0a 3c 2f 75 6c 3e 0d 0a 3c  .</li>..</ul>..<
2730: 76 65 72 62 61 74 69 6d 3e 0d 0a 53 45 4c 45 43  verbatim>..SELEC
2740: 54 20 53 71 6c 50 72 6f 63 5f 49 73 56 61 6c 69  T SqlProc_IsVali
2750: 64 20 28 20 53 71 6c 50 72 6f 63 5f 46 72 6f 6d  d ( SqlProc_From
2760: 54 65 78 74 28 27 53 45 4c 45 43 54 20 40 63 6f  Text('SELECT @co
2770: 6c 40 20 46 52 4f 4d 20 40 74 62 6c 40 27 29 20  l@ FROM @tbl@') 
2780: 29 3b 0d 0a 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 0d 0a  );..-----..1....
2790: 53 45 4c 45 43 54 20 53 71 6c 50 72 6f 63 5f 49  SELECT SqlProc_I
27a0: 73 56 61 6c 69 64 20 28 20 4d 61 6b 65 50 6f 69  sValid ( MakePoi
27b0: 6e 74 28 31 31 2e 35 2c 20 34 32 2e 35 2c 20 34  nt(11.5, 42.5, 4
27c0: 33 32 36 29 20 29 3b 0d 0a 2d 2d 2d 2d 2d 0d 0a  326) );..-----..
27d0: 30 0d 0a 3c 2f 76 65 72 62 61 74 69 6d 3e 0d 0a  0..</verbatim>..
27e0: 3c 75 6c 3e 0d 0a 3c 6c 69 3e 79 6f 75 20 63 61  <ul>..<li>you ca
27f0: 6e 20 75 73 65 20 3c 62 3e 53 71 6c 50 72 6f 63  n use <b>SqlProc
2800: 5f 49 73 56 61 6c 69 64 3c 2f 62 3e 20 69 6e 20  _IsValid</b> in 
2810: 6f 72 64 65 72 20 74 6f 20 63 68 65 63 6b 20 69  order to check i
2820: 66 20 61 20 67 65 6e 65 72 69 63 20 42 4c 4f 42  f a generic BLOB
2830: 20 72 65 61 6c 6c 79 20 69 73 20 61 20 76 61 6c   really is a val
2840: 69 64 20 53 51 4c 20 50 72 6f 63 65 64 75 72 65  id SQL Procedure
2850: 20 42 4c 4f 42 20 4f 62 6a 65 63 74 2e 0d 0a 3c   BLOB Object...<
2860: 2f 75 6c 3e 0d 0a 3c 76 65 72 62 61 74 69 6d 3e  /ul>..<verbatim>
2870: 0d 0a 53 45 4c 45 43 54 20 53 71 6c 50 72 6f 63  ..SELECT SqlProc
2880: 5f 4e 75 6d 56 61 72 69 61 62 6c 65 73 20 28 20  _NumVariables ( 
2890: 53 71 6c 50 72 6f 63 5f 46 72 6f 6d 54 65 78 74  SqlProc_FromText
28a0: 28 27 53 45 4c 45 43 54 20 40 63 6f 6c 40 20 46  ('SELECT @col@ F
28b0: 52 4f 4d 20 40 74 62 6c 40 27 29 20 29 3b 0d 0a  ROM @tbl@') );..
28c0: 2d 2d 2d 2d 2d 0d 0a 32 0d 0a 0d 0a 53 45 4c 45  -----..2....SELE
28d0: 43 54 20 53 71 6c 50 72 6f 63 5f 56 61 72 69 61  CT SqlProc_Varia
28e0: 62 6c 65 4e 20 28 53 71 6c 50 72 6f 63 5f 46 72  bleN (SqlProc_Fr
28f0: 6f 6d 54 65 78 74 28 27 53 45 4c 45 43 54 20 40  omText('SELECT @
2900: 63 6f 6c 40 20 46 52 4f 4d 20 40 74 62 6c 40 27  col@ FROM @tbl@'
2910: 29 2c 20 30 29 3b 0d 0a 2d 2d 2d 2d 2d 0d 0a 40  ), 0);..-----..@
2920: 63 6f 6c 40 0d 0a 0d 0a 53 45 4c 45 43 54 20 53  col@....SELECT S
2930: 71 6c 50 72 6f 63 5f 56 61 72 69 61 62 6c 65 4e  qlProc_VariableN
2940: 20 28 53 71 6c 50 72 6f 63 5f 46 72 6f 6d 54 65   (SqlProc_FromTe
2950: 78 74 28 27 53 45 4c 45 43 54 20 40 63 6f 6c 40  xt('SELECT @col@
2960: 20 46 52 4f 4d 20 40 74 62 6c 40 27 29 2c 20 31   FROM @tbl@'), 1
2970: 29 3b 0d 0a 2d 2d 2d 2d 2d 0d 0a 40 74 62 6c 40  );..-----..@tbl@
2980: 0d 0a 0d 0a 53 45 4c 45 43 54 20 53 71 6c 50 72  ....SELECT SqlPr
2990: 6f 63 5f 41 6c 6c 56 61 72 69 61 62 6c 65 73 20  oc_AllVariables 
29a0: 28 53 71 6c 50 72 6f 63 5f 46 72 6f 6d 54 65 78  (SqlProc_FromTex
29b0: 74 28 27 53 45 4c 45 43 54 20 40 63 6f 6c 40 20  t('SELECT @col@ 
29c0: 46 52 4f 4d 20 40 74 62 6c 40 27 29 20 29 3b 0d  FROM @tbl@') );.
29d0: 0a 2d 2d 2d 2d 2d 0d 0a 40 63 6f 6c 40 20 40 74  .-----..@col@ @t
29e0: 62 6c 40 0d 0a 3c 2f 76 65 72 62 61 74 69 6d 3e  bl@..</verbatim>
29f0: 0d 0a 3c 75 6c 3e 0d 0a 3c 6c 69 3e 79 6f 75 20  ..<ul>..<li>you 
2a00: 63 61 6e 20 75 73 65 20 3c 62 3e 53 71 6c 50 72  can use <b>SqlPr
2a10: 6f 63 5f 4e 75 6d 56 61 72 69 61 62 6c 65 73 3c  oc_NumVariables<
2a20: 2f 62 3e 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  /b> in order to 
2a30: 63 68 65 63 6b 20 68 6f 77 20 6d 61 6e 79 20 56  check how many V
2a40: 61 72 69 61 62 6c 65 73 20 61 72 65 20 64 65 66  ariables are def
2a50: 69 6e 65 64 20 62 79 20 61 20 53 51 4c 20 50 72  ined by a SQL Pr
2a60: 6f 63 65 64 75 72 65 20 42 4c 4f 42 20 4f 62 6a  ocedure BLOB Obj
2a70: 65 63 74 2e 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e 61  ect.</li>..<li>a
2a80: 6e 64 20 79 6f 75 20 63 61 6e 20 75 73 65 20 3c  nd you can use <
2a90: 62 3e 53 71 6c 50 72 6f 63 5f 56 61 72 69 61 62  b>SqlProc_Variab
2aa0: 6c 65 4e 3c 2f 62 3e 20 69 6e 20 6f 72 64 65 72  leN</b> in order
2ab0: 20 74 6f 20 72 65 74 72 69 65 76 65 20 61 20 56   to retrieve a V
2ac0: 61 72 69 61 62 6c 65 20 4e 61 6d 65 20 62 79 20  ariable Name by 
2ad0: 73 70 65 63 69 66 79 69 6e 67 20 69 74 73 20 72  specifying its r
2ae0: 65 6c 61 74 69 76 65 20 3c 62 3e 49 6e 64 65 78  elative <b>Index
2af0: 3c 2f 62 3e 20 28 46 69 72 73 74 20 56 61 72 69  </b> (First Vari
2b00: 61 62 6c 65 20 61 6c 77 61 79 73 20 63 6f 72 72  able always corr
2b10: 65 73 70 6f 6e 64 73 20 74 6f 20 3c 62 3e 49 6e  esponds to <b>In
2b20: 64 65 78 3d 30 3c 2f 62 3e 29 2e 3c 2f 6c 69 3e  dex=0</b>).</li>
2b30: 0d 0a 3c 6c 69 3e 61 6e 64 20 66 69 6e 61 6c 6c  ..<li>and finall
2b40: 79 20 79 6f 75 20 63 61 6e 20 75 73 65 20 3c 62  y you can use <b
2b50: 3e 53 71 6c 50 72 6f 63 5f 41 6c 6c 56 61 72 69  >SqlProc_AllVari
2b60: 61 62 6c 65 73 3c 2f 62 3e 20 69 6e 20 6f 72 64  ables</b> in ord
2b70: 65 72 20 74 6f 20 64 69 72 65 63 74 6c 79 20 67  er to directly g
2b80: 65 74 20 61 6c 6c 20 56 61 72 69 61 62 6c 65 20  et all Variable 
2b90: 4e 61 6d 65 73 20 66 6f 72 6d 61 74 74 65 64 20  Names formatted 
2ba0: 61 73 20 61 20 73 70 61 63 65 2d 73 65 70 61 72  as a space-separ
2bb0: 61 74 65 64 20 6c 69 73 74 2e 3c 2f 6c 69 3e 0d  ated list.</li>.
2bc0: 0a 3c 2f 75 6c 3e 0d 0a 3c 62 72 3e 3c 68 72 3e  .</ul>..<br><hr>
2bd0: 0d 0a 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e 0d 0a 3c  ..</li>..<li>..<
2be0: 68 34 3e 45 72 72 6f 72 20 68 61 6e 64 6c 69 6e  h4>Error handlin
2bf0: 67 3c 2f 68 34 3e 0d 0a 3c 76 65 72 62 61 74 69  g</h4>..<verbati
2c00: 6d 3e 0d 0a 53 45 4c 45 43 54 20 53 71 6c 50 72  m>..SELECT SqlPr
2c10: 6f 63 5f 47 65 74 4c 61 73 74 45 72 72 6f 72 28  oc_GetLastError(
2c20: 29 3b 0d 0a 3c 2f 76 65 72 62 61 74 69 6d 3e 0d  );..</verbatim>.
2c30: 0a 41 6c 6c 20 74 68 65 73 65 20 66 75 6e 63 74  .All these funct
2c40: 69 6f 6e 73 20 77 69 6c 6c 20 72 61 69 73 65 20  ions will raise 
2c50: 61 6e 20 45 78 63 65 70 74 69 6f 6e 20 6f 6e 20  an Exception on 
2c60: 69 6e 76 61 6c 69 64 20 61 72 67 75 6d 65 6e 74  invalid argument
2c70: 73 20 6f 72 20 65 72 72 6f 72 73 2e 3c 62 72 3e  s or errors.<br>
2c80: 0d 0a 42 79 20 63 61 6c 6c 69 6e 67 20 3c 62 3e  ..By calling <b>
2c90: 53 71 6c 50 72 6f 63 5f 47 65 74 4c 61 73 74 45  SqlProc_GetLastE
2ca0: 72 72 6f 72 3c 2f 62 3e 20 79 6f 75 27 6c 6c 20  rror</b> you'll 
2cb0: 75 73 75 61 6c 6c 79 20 67 65 74 20 61 20 6d 6f  usually get a mo
2cc0: 72 65 20 64 65 74 61 69 6c 65 64 20 65 78 70 6c  re detailed expl
2cd0: 61 6e 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  anation about th
2ce0: 65 20 73 70 65 63 69 66 69 63 20 63 61 75 73 65  e specific cause
2cf0: 20 61 63 63 6f 75 6e 74 69 6e 67 20 66 6f 72 20   accounting for 
2d00: 74 68 65 20 66 61 69 6c 75 72 65 2e 0d 0a 3c 62  the failure...<b
2d10: 72 3e 3c 62 72 3e 3c 68 72 3e 0d 0a 3c 2f 6c 69  r><br><hr>..</li
2d20: 3e 0d 0a 3c 6c 69 3e 0d 0a 3c 68 34 3e 43 72 65  >..<li>..<h4>Cre
2d30: 61 74 69 6e 67 20 56 61 72 69 61 62 6c 65 73 20  ating Variables 
2d40: 77 69 74 68 20 56 61 6c 75 65 73 3c 2f 68 34 3e  with Values</h4>
2d50: 0d 0a 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 53 45  ..<verbatim>..SE
2d60: 4c 45 43 54 20 53 71 6c 50 72 6f 63 5f 56 61 72  LECT SqlProc_Var
2d70: 56 61 6c 75 65 20 28 27 76 61 72 27 2c 20 4e 55  Value ('var', NU
2d80: 4c 4c 29 3b 0d 0a 2d 2d 2d 2d 2d 0d 0a 40 76 61  LL);..-----..@va
2d90: 72 40 3d 4e 55 4c 4c 0d 0a 0d 0a 53 45 4c 45 43  r@=NULL....SELEC
2da0: 54 20 53 71 6c 50 72 6f 63 5f 56 61 72 56 61 6c  T SqlProc_VarVal
2db0: 75 65 20 28 27 76 61 72 27 2c 20 31 29 3b 0d 0a  ue ('var', 1);..
2dc0: 2d 2d 2d 2d 2d 0d 0a 40 76 61 72 40 3d 31 0d 0a  -----..@var@=1..
2dd0: 0d 0a 53 45 4c 45 43 54 20 53 71 6c 50 72 6f 63  ..SELECT SqlProc
2de0: 5f 56 61 72 56 61 6c 75 65 20 28 27 76 61 72 27  _VarValue ('var'
2df0: 2c 20 31 30 2e 35 29 3b 0d 0a 2d 2d 2d 2d 2d 0d  , 10.5);..-----.
2e00: 0a 40 76 61 72 40 3d 31 30 2e 35 30 30 30 30 30  .@var@=10.500000
2e10: 30 30 30 30 0d 0a 0d 0a 53 45 4c 45 43 54 20 53  0000....SELECT S
2e20: 71 6c 50 72 6f 63 5f 56 61 72 56 61 6c 75 65 20  qlProc_VarValue 
2e30: 28 27 76 61 72 27 2c 20 27 61 6c 70 68 61 20 62  ('var', 'alpha b
2e40: 65 74 61 27 29 3b 0d 0a 2d 2d 2d 2d 2d 0d 0a 40  eta');..-----..@
2e50: 76 61 72 40 3d 61 6c 70 68 61 20 62 65 74 61 0d  var@=alpha beta.
2e60: 0a 0d 0a 53 45 4c 45 43 54 20 53 71 6c 50 72 6f  ...SELECT SqlPro
2e70: 63 5f 56 61 72 56 61 6c 75 65 20 28 27 76 61 72  c_VarValue ('var
2e80: 27 2c 20 4d 61 6b 65 50 6f 69 6e 74 28 31 31 2e  ', MakePoint(11.
2e90: 35 2c 20 34 32 2e 35 2c 20 34 33 32 36 29 20 29  5, 42.5, 4326) )
2ea0: 3b 0d 0a 2d 2d 2d 2d 2d 0d 0a 40 76 61 72 40 3d  ;..-----..@var@=
2eb0: 78 27 30 30 30 31 45 36 31 30 30 30 30 30 30 30  x'0001E610000000
2ec0: 30 30 30 30 30 30 30 30 30 30 32 37 34 30 30 30  0000000000274000
2ed0: 30 30 30 30 30 30 30 30 34 30 34 35 34 30 30 30  0000000040454000
2ee0: 30 30 30 30 30 30 30 30 30 30 32 37 34 30 30 30  0000000000274000
2ef0: 30 30 30 30 30 30 30 30 34 30 34 35 34 30 37 43  000000004045407C
2f00: 30 31 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0100000000000000
2f10: 30 30 30 30 32 37 34 30 30 30 30 30 30 30 30 30  0000274000000000
2f20: 30 30 34 30 34 35 34 30 46 45 27 0d 0a 3c 2f 76  00404540FE'..</v
2f30: 65 72 62 61 74 69 6d 3e 0d 0a 3c 75 3e 4e 6f 74  erbatim>..<u>Not
2f40: 65 3c 2f 75 3e 3a 20 68 61 6e 64 20 77 72 69 74  e</u>: hand writ
2f50: 69 6e 67 20 56 61 72 69 61 62 6c 65 20 77 69 74  ing Variable wit
2f60: 68 20 56 61 6c 75 65 20 73 74 72 69 6e 67 73 20  h Value strings 
2f70: 69 73 20 61 20 72 61 74 68 65 72 20 74 72 69 76  is a rather triv
2f80: 69 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2c 20 73  ial operation, s
2f90: 6f 20 63 61 6c 6c 69 6e 67 20 74 68 69 73 20 53  o calling this S
2fa0: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  QL function is o
2fb0: 66 74 65 6e 20 6b 69 6e 64 20 6f 66 20 61 6e 20  ften kind of an 
2fc0: 6f 76 65 72 6b 69 6c 6c 2e 20 45 78 63 65 70 74  overkill. Except
2fd0: 2c 20 6d 61 79 20 62 65 2c 20 69 6e 20 74 68 65  , may be, in the
2fe0: 20 63 61 73 65 20 6f 66 20 42 4c 4f 42 20 76 61   case of BLOB va
2ff0: 6c 75 65 73 2e 0d 0a 3c 62 72 3e 3c 62 72 3e 3c  lues...<br><br><
3000: 68 72 3e 0d 0a 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e  hr>..</li>..<li>
3010: 0d 0a 3c 68 34 3e 52 61 77 20 61 6e 64 20 43 6f  ..<h4>Raw and Co
3020: 6f 6b 65 64 20 53 51 4c 20 2d 20 72 65 70 6c 61  oked SQL - repla
3030: 63 69 6e 67 20 53 79 6d 62 6f 6c 73 20 77 69 74  cing Symbols wit
3040: 68 20 74 68 65 69 72 20 61 63 74 75 61 6c 20 56  h their actual V
3050: 61 6c 75 65 73 3c 2f 68 34 3e 0d 0a 3c 76 65 72  alues</h4>..<ver
3060: 62 61 74 69 6d 3e 0d 0a 53 45 4c 45 43 54 20 53  batim>..SELECT S
3070: 71 6c 50 72 6f 63 5f 52 61 77 53 51 4c 20 28 20  qlProc_RawSQL ( 
3080: 53 71 6c 50 72 6f 63 5f 46 72 6f 6d 54 65 78 74  SqlProc_FromText
3090: 28 27 53 45 4c 45 43 54 20 40 63 6f 6c 40 20 46  ('SELECT @col@ F
30a0: 52 4f 4d 20 40 74 62 6c 40 3b 27 29 20 29 3b 0d  ROM @tbl@;') );.
30b0: 0a 2d 2d 2d 2d 2d 0d 0a 53 45 4c 45 43 54 20 40  .-----..SELECT @
30c0: 63 6f 6c 40 20 46 52 4f 4d 20 40 74 62 6c 40 3b  col@ FROM @tbl@;
30d0: 0d 0a 0d 0a 53 45 4c 45 43 54 20 53 71 6c 50 72  ....SELECT SqlPr
30e0: 6f 63 5f 43 6f 6f 6b 65 64 53 51 4c 20 28 20 53  oc_CookedSQL ( S
30f0: 71 6c 50 72 6f 63 5f 46 72 6f 6d 54 65 78 74 28  qlProc_FromText(
3100: 27 53 45 4c 45 43 54 20 40 63 6f 6c 40 20 46 52  'SELECT @col@ FR
3110: 4f 4d 20 40 74 62 6c 40 3b 27 29 2c 0d 0a 20 20  OM @tbl@;'),..  
3120: 20 20 27 40 63 6f 6c 40 3d 66 69 72 73 74 5f 6e    '@col@=first_n
3130: 61 6d 65 27 2c 0d 0a 20 20 20 20 27 40 74 62 6c  ame',..    '@tbl
3140: 40 3d 70 68 6f 6e 65 5f 62 6f 6f 6b 27 20 29 3b  @=phone_book' );
3150: 0d 0a 2d 2d 2d 2d 2d 0d 0a 53 45 4c 45 43 54 20  ..-----..SELECT 
3160: 66 69 72 73 74 5f 6e 61 6d 65 20 46 52 4f 4d 20  first_name FROM 
3170: 70 68 6f 6e 65 5f 62 6f 6f 6b 3b 0d 0a 3c 2f 76  phone_book;..</v
3180: 65 72 62 61 74 69 6d 3e 0d 0a 3c 75 6c 3e 0d 0a  erbatim>..<ul>..
3190: 3c 6c 69 3e 79 6f 75 20 63 61 6e 20 75 73 65 20  <li>you can use 
31a0: 3c 62 3e 53 71 6c 50 72 6f 63 5f 52 61 77 53 51  <b>SqlProc_RawSQ
31b0: 4c 3c 2f 62 3e 20 69 6e 20 6f 72 64 65 72 20 74  L</b> in order t
31c0: 6f 20 64 69 72 65 63 74 6c 79 20 63 68 65 63 6b  o directly check
31d0: 20 74 68 65 20 53 51 4c 20 42 6f 64 79 20 65 6e   the SQL Body en
31e0: 63 61 70 73 75 6c 61 74 65 64 20 69 6e 74 6f 20  capsulated into 
31f0: 61 20 53 51 4c 20 50 72 6f 63 65 64 75 72 65 20  a SQL Procedure 
3200: 42 4c 4f 42 20 4f 62 6a 65 63 74 3b 20 61 6c 6c  BLOB Object; all
3210: 20 69 6e 69 74 69 61 6c 20 56 61 72 69 61 62 6c   initial Variabl
3220: 65 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 77 69  e definitions wi
3230: 6c 6c 20 62 65 20 63 61 72 65 66 75 6c 6c 79 20  ll be carefully 
3240: 70 72 65 73 65 72 76 65 64 2e 3c 2f 6c 69 3e 0d  preserved.</li>.
3250: 0a 3c 6c 69 3e 61 6e 64 20 79 6f 75 20 63 61 6e  .<li>and you can
3260: 20 75 73 65 20 3c 62 3e 53 71 6c 50 72 6f 63 5f   use <b>SqlProc_
3270: 43 6f 6f 6b 65 64 53 51 4c 3c 2f 62 3e 20 69 6e  CookedSQL</b> in
3280: 20 6f 72 64 65 72 20 74 6f 20 64 69 72 65 63 74   order to direct
3290: 6c 79 20 63 68 65 63 6b 20 74 68 65 20 53 51 4c  ly check the SQL
32a0: 20 42 6f 64 79 20 61 73 20 69 74 20 61 63 74 75   Body as it actu
32b0: 61 6c 6c 79 20 61 70 70 65 61 72 73 20 61 66 74  ally appears aft
32c0: 65 72 20 72 65 70 6c 61 63 69 6e 67 20 61 6c 6c  er replacing all
32d0: 20 72 65 71 75 69 72 65 64 20 56 61 72 69 61 62   required Variab
32e0: 6c 65 20 56 61 6c 75 65 73 2e 3c 2f 6c 69 3e 0d  le Values.</li>.
32f0: 0a 3c 6c 69 3e 42 6f 74 68 20 66 75 6e 63 74 69  .<li>Both functi
3300: 6f 6e 73 20 61 72 65 20 6d 61 69 6e 6c 79 20 69  ons are mainly i
3310: 6e 74 65 6e 64 65 64 20 66 6f 72 20 73 75 70 70  ntended for supp
3320: 6f 72 74 69 6e 67 20 64 65 62 75 67 67 69 6e 67  orting debugging
3330: 20 61 63 74 69 76 69 74 69 65 73 2c 20 73 6f 20   activities, so 
3340: 74 6f 20 6d 61 6b 65 20 61 73 20 65 61 73 79 20  to make as easy 
3350: 61 73 20 70 6f 73 73 69 62 6c 65 20 69 64 65 6e  as possible iden
3360: 74 69 66 79 69 6e 67 20 65 76 65 6e 74 75 61 6c  tifying eventual
3370: 20 65 72 72 6f 72 73 2e 3c 2f 6c 69 3e 0d 0a 3c   errors.</li>..<
3380: 2f 75 6c 3e 3c 62 72 3e 0d 0a 3c 74 61 62 6c 65  /ul><br>..<table
3390: 20 62 67 63 6f 6c 6f 72 3d 22 23 66 38 66 38 64   bgcolor="#f8f8d
33a0: 38 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  8" cellpadding="
33b0: 36 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22  6" cellspacing="
33c0: 38 22 3e 3c 74 72 3e 3c 74 64 3e 0d 0a 3c 75 3e  8"><tr><td>..<u>
33d0: 4e 6f 74 65 3c 2f 75 3e 3a 20 3c 62 3e 53 71 6c  Note</u>: <b>Sql
33e0: 50 72 6f 63 5f 43 6f 6f 6b 65 64 53 51 4c 3c 2f  Proc_CookedSQL</
33f0: 62 3e 20 77 69 6c 6c 20 61 63 63 65 70 74 20 61  b> will accept a
3400: 6e 20 61 72 62 69 74 72 61 72 79 20 6c 69 73 74  n arbitrary list
3410: 20 6f 66 20 3c 62 3e 56 61 72 69 61 62 6c 65 20   of <b>Variable 
3420: 77 69 74 68 20 56 61 6c 75 65 3c 2f 62 3e 20 61  with Value</b> a
3430: 72 67 75 6d 65 6e 74 73 2e 0d 0a 3c 75 6c 3e 0d  rguments...<ul>.
3440: 0a 3c 6c 69 3e 61 6e 20 65 6d 70 74 79 20 6c 69  .<li>an empty li
3450: 73 74 20 28 6e 6f 20 56 61 72 69 61 62 6c 65 73  st (no Variables
3460: 20 77 69 74 68 20 56 61 6c 75 65 73 20 61 74 20   with Values at 
3470: 61 6c 6c 29 20 69 73 20 61 20 70 65 72 66 65 63  all) is a perfec
3480: 74 6c 79 20 6c 65 67 61 6c 20 63 6f 6e 64 69 74  tly legal condit
3490: 69 6f 6e 20 28 63 6f 75 6c 64 20 65 76 65 6e 74  ion (could event
34a0: 75 61 6c 6c 79 20 6c 65 61 64 20 74 6f 20 61 6e  ually lead to an
34b0: 20 69 6e 76 61 6c 69 64 20 43 6f 6f 6b 65 64 20   invalid Cooked 
34c0: 53 51 4c 20 42 6f 64 79 2c 20 73 65 65 20 62 65  SQL Body, see be
34d0: 6c 6f 77 29 2e 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e  low).</li>..<li>
34e0: 61 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20 66 72  all arguments fr
34f0: 6f 6d 20 74 68 65 20 73 65 63 6f 6e 64 20 74 69  om the second ti
3500: 6c 6c 20 74 68 65 20 6c 61 73 74 20 61 72 65 20  ll the last are 
3510: 65 78 70 65 63 74 65 64 20 74 6f 20 62 65 20 77  expected to be w
3520: 65 6c 6c 2d 66 6f 72 6d 65 64 20 56 61 72 69 61  ell-formed Varia
3530: 62 6c 65 73 20 77 69 74 68 20 56 61 6c 75 65 73  bles with Values
3540: 2e 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e 79 6f 75 20  .</li>..<li>you 
3550: 63 61 6e 20 64 65 66 69 6e 65 20 75 70 20 74 6f  can define up to
3560: 20 3c 62 3e 31 36 3c 2f 62 3e 20 64 69 66 66 65   <b>16</b> diffe
3570: 72 65 6e 74 20 56 61 72 69 61 62 6c 65 73 20 77  rent Variables w
3580: 69 74 68 20 56 61 6c 75 65 73 2e 3c 2f 6c 69 3e  ith Values.</li>
3590: 0d 0a 3c 6c 69 3e 61 6e 79 20 61 74 74 65 6d 70  ..<li>any attemp
35a0: 74 20 74 6f 20 72 65 2d 64 65 66 69 6e 65 20 74  t to re-define t
35b0: 68 65 20 73 61 6d 65 20 56 61 72 69 61 62 6c 65  he same Variable
35c0: 20 77 69 74 68 20 61 6e 6f 74 68 65 72 20 56 61   with another Va
35d0: 6c 75 65 20 77 69 6c 6c 20 62 65 20 61 6c 77 61  lue will be alwa
35e0: 79 73 20 63 6f 6e 73 69 64 65 72 65 64 20 61 73  ys considered as
35f0: 20 61 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 3c   a fatal error.<
3600: 2f 6c 69 3e 0d 0a 3c 6c 69 3e 61 6e 79 20 6f 66  /li>..<li>any of
3610: 20 74 68 65 20 56 61 72 69 61 62 6c 65 20 61 72   the Variable ar
3620: 67 75 6d 65 6e 74 73 20 6e 6f 74 20 63 6f 6e 74  guments not cont
3630: 61 69 6e 65 64 20 69 6e 20 74 68 65 20 3c 69 3e  ained in the <i>
3640: 72 61 77 3c 2f 69 3e 20 53 51 4c 20 42 6f 64 79  raw</i> SQL Body
3650: 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64   will be ignored
3660: 2e 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e 69 66 20 61  .</li>..<li>if a
3670: 20 56 61 72 69 61 62 6c 65 20 64 65 66 69 6e 65   Variable define
3680: 64 20 69 6e 20 74 68 65 20 72 61 77 20 53 51 4c  d in the raw SQL
3690: 20 42 6f 64 79 20 64 6f 65 73 20 6e 6f 74 20 6d   Body does not m
36a0: 61 74 63 68 65 73 20 61 20 63 6f 72 72 65 73 70  atches a corresp
36b0: 6f 6e 64 69 6e 67 20 56 61 72 69 61 62 6c 65 20  onding Variable 
36c0: 61 72 67 75 6d 65 6e 74 20 74 68 65 6e 20 69 74  argument then it
36d0: 20 77 69 6c 6c 20 62 65 20 73 65 74 20 77 69 74   will be set wit
36e0: 68 20 61 20 27 3c 62 3e 4e 55 4c 4c 3c 2f 62 3e  h a '<b>NULL</b>
36f0: 27 20 73 74 72 69 6e 67 2e 3c 2f 6c 69 3e 0d 0a  ' string.</li>..
3700: 3c 6c 69 3e 74 68 65 20 73 61 6d 65 20 69 64 65  <li>the same ide
3710: 6e 74 69 63 61 6c 20 72 75 6c 65 73 20 66 6f 72  ntical rules for
3720: 20 70 61 73 73 69 6e 67 20 56 61 72 69 61 62 6c   passing Variabl
3730: 65 2d 56 61 6c 75 65 20 61 72 67 75 6d 65 6e 74  e-Value argument
3740: 73 20 61 70 70 6c 79 20 74 6f 20 3c 62 3e 53 71  s apply to <b>Sq
3750: 6c 50 72 6f 63 5f 43 6f 6f 6b 65 64 53 51 4c 3c  lProc_CookedSQL<
3760: 2f 62 3e 2c 20 3c 62 3e 53 71 6c 50 72 6f 63 5f  /b>, <b>SqlProc_
3770: 45 78 65 63 75 74 65 3c 2f 62 3e 20 61 6e 64 20  Execute</b> and 
3780: 3c 62 3e 53 74 6f 72 65 64 50 72 6f 63 5f 45 78  <b>StoredProc_Ex
3790: 65 63 75 74 65 3c 2f 62 3e 2e 3c 2f 6c 69 3e 0d  ecute</b>.</li>.
37a0: 0a 3c 2f 75 6c 3e 0d 0a 3c 2f 74 64 3e 3c 2f 74  .</ul>..</td></t
37b0: 72 3e 3c 2f 74 61 62 6c 65 3e 3c 62 72 3e 0d 0a  r></table><br>..
37c0: 3c 74 61 62 6c 65 20 62 67 63 6f 6c 6f 72 3d 22  <table bgcolor="
37d0: 23 66 38 63 38 63 38 22 20 63 65 6c 6c 70 61 64  #f8c8c8" cellpad
37e0: 64 69 6e 67 3d 22 36 22 20 63 65 6c 6c 73 70 61  ding="6" cellspa
37f0: 63 69 6e 67 3d 22 38 22 3e 3c 74 72 3e 3c 74 64  cing="8"><tr><td
3800: 3e 0d 0a 3c 75 3e 57 61 72 6e 69 6e 67 3c 2f 75  >..<u>Warning</u
3810: 3e 3a 20 72 65 66 65 72 65 6e 63 69 6e 67 20 61  >: referencing a
3820: 20 56 61 72 69 61 62 6c 65 20 66 72 6f 6d 20 77   Variable from w
3830: 69 74 68 69 6e 20 61 6e 6f 74 68 65 72 20 56 61  ithin another Va
3840: 72 69 61 62 6c 65 20 69 73 20 6e 6f 74 20 70 65  riable is not pe
3850: 72 6d 69 74 74 65 64 2e 0d 0a 3c 76 65 72 62 61  rmitted...<verba
3860: 74 69 6d 3e 0d 0a 53 45 4c 45 43 54 20 53 71 6c  tim>..SELECT Sql
3870: 50 72 6f 63 5f 43 6f 6f 6b 65 64 53 51 4c 20 28  Proc_CookedSQL (
3880: 20 53 71 6c 50 72 6f 63 5f 46 72 6f 6d 54 65 78   SqlProc_FromTex
3890: 74 28 27 53 45 4c 45 43 54 20 40 63 6f 6c 40 20  t('SELECT @col@ 
38a0: 46 52 4f 4d 20 40 74 62 6c 40 3b 27 29 2c 0d 0a  FROM @tbl@;'),..
38b0: 20 20 20 20 27 40 63 6f 6c 40 3d 66 69 72 73 74      '@col@=first
38c0: 5f 6e 61 6d 65 27 2c 0d 0a 20 20 20 20 27 40 63  _name',..    '@c
38d0: 6f 75 6e 74 72 79 40 3d 69 74 61 6c 79 27 2c 0d  ountry@=italy',.
38e0: 0a 20 20 20 20 27 40 74 62 6c 40 3d 40 63 6f 75  .    '@tbl@=@cou
38f0: 6e 74 72 79 40 5f 70 68 6f 6e 65 5f 62 6f 6f 6b  ntry@_phone_book
3900: 27 20 29 3b 0d 0a 3c 2f 76 65 72 62 61 74 69 6d  ' );..</verbatim
3910: 3e 0d 0a 49 6e 20 74 68 65 20 61 62 6f 76 65 20  >..In the above 
3920: 65 78 61 6d 70 6c 65 20 74 68 65 20 3c 62 3e 40  example the <b>@
3930: 63 6f 75 6e 74 72 79 40 3c 2f 62 3e 20 74 65 72  country@</b> ter
3940: 6d 20 69 6e 74 6f 20 74 68 65 20 56 61 6c 75 65  m into the Value
3950: 20 73 74 72 69 6e 67 20 3c 69 3e 27 40 63 6f 75   string <i>'@cou
3960: 6e 74 72 79 40 5f 70 68 6f 6e 65 5f 62 6f 6f 6b  ntry@_phone_book
3970: 27 3c 2f 69 3e 20 77 69 6c 6c 20 6e 6f 74 20 62  '</i> will not b
3980: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 61 73 20  e considered as 
3990: 61 20 56 61 72 69 61 62 6c 65 20 61 6e 64 20 77  a Variable and w
39a0: 69 6c 6c 20 6e 6f 74 20 62 65 20 72 65 70 6c 61  ill not be repla
39b0: 63 65 64 2e 0d 0a 3c 2f 74 64 3e 3c 2f 74 72 3e  ced...</td></tr>
39c0: 3c 2f 74 61 62 6c 65 3e 0d 0a 3c 62 72 3e 3c 68  </table>..<br><h
39d0: 72 3e 0d 0a 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e 0d  r>..</li>..<li>.
39e0: 0a 3c 68 34 3e 45 78 65 63 75 74 69 6e 67 20 61  .<h4>Executing a
39f0: 20 53 51 4c 20 50 72 6f 63 65 64 75 72 65 3c 2f   SQL Procedure</
3a00: 68 34 3e 0d 0a 3c 76 65 72 62 61 74 69 6d 3e 0d  h4>..<verbatim>.
3a10: 0a 53 45 4c 45 43 54 20 53 71 6c 50 72 6f 63 5f  .SELECT SqlProc_
3a20: 45 78 65 63 75 74 65 20 28 53 71 6c 50 72 6f 63  Execute (SqlProc
3a30: 5f 46 72 6f 6d 54 65 78 74 28 27 53 45 4c 45 43  _FromText('SELEC
3a40: 54 20 40 63 6f 6c 40 20 46 52 4f 4d 20 40 74 62  T @col@ FROM @tb
3a50: 6c 40 3b 27 29 2c 0d 0a 20 20 20 20 27 40 63 6f  l@;'),..    '@co
3a60: 6c 40 3d 66 69 72 73 74 5f 6e 61 6d 65 27 2c 0d  l@=first_name',.
3a70: 0a 20 20 20 20 27 40 74 62 6c 40 3d 70 68 6f 6e  .    '@tbl@=phon
3a80: 65 5f 62 6f 6f 6b 27 20 29 3b 0d 0a 2d 2d 2d 2d  e_book' );..----
3a90: 2d 0d 0a 53 71 6c 50 72 6f 63 20 65 78 63 65 70  -..SqlProc excep
3aa0: 74 69 6f 6e 20 2d 20 61 20 66 61 74 61 6c 20 53  tion - a fatal S
3ab0: 51 4c 20 65 72 72 6f 72 20 77 61 73 20 65 6e 63  QL error was enc
3ac0: 6f 75 6e 74 65 72 65 64 2e 0d 0a 0d 0a 53 45 4c  ountered.....SEL
3ad0: 45 43 54 20 53 71 6c 50 72 6f 63 5f 47 65 74 4c  ECT SqlProc_GetL
3ae0: 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a 2d 2d 2d  astError();..---
3af0: 2d 2d 0d 0a 67 61 69 61 5f 73 71 6c 5f 70 72 6f  --..gaia_sql_pro
3b00: 63 5f 65 78 65 63 75 74 65 3a 20 6e 6f 20 73 75  c_execute: no su
3b10: 63 68 20 74 61 62 6c 65 3a 20 70 68 6f 6e 65 5f  ch table: phone_
3b20: 62 6f 6f 6b 0d 0a 3c 2f 76 65 72 62 61 74 69 6d  book..</verbatim
3b30: 3e 0d 0a 79 6f 75 20 63 61 6e 20 75 73 65 20 3c  >..you can use <
3b40: 62 3e 53 71 6c 50 72 6f 63 5f 45 78 65 63 75 74  b>SqlProc_Execut
3b50: 65 3c 2f 62 3e 20 69 6e 20 6f 72 64 65 72 20 74  e</b> in order t
3b60: 6f 20 64 69 72 65 63 74 6c 79 20 65 78 65 63 75  o directly execu
3b70: 74 65 20 74 68 65 20 77 68 6f 6c 65 20 53 51 4c  te the whole SQL
3b80: 20 42 6f 64 79 20 61 73 20 61 20 73 69 6e 67 6c   Body as a singl
3b90: 65 20 6d 6f 6e 6f 6c 69 74 68 69 63 20 75 6e 69  e monolithic uni
3ba0: 74 2e 3c 62 72 3e 0d 0a 41 74 20 74 68 65 20 65  t.<br>..At the e
3bb0: 6e 64 20 6f 66 20 74 68 65 20 70 72 6f 63 65 73  nd of the proces
3bc0: 73 20 3c 62 3e 31 3c 2f 62 3e 20 28 61 6b 61 20  s <b>1</b> (aka 
3bd0: 3c 62 3e 54 72 75 65 3c 2f 62 3e 29 20 77 69 6c  <b>True</b>) wil
3be0: 6c 20 62 65 20 72 65 74 75 72 6e 65 64 20 6f 6e  l be returned on
3bf0: 20 66 75 6c 6c 20 73 75 63 63 65 73 73 3b 20 61   full success; a
3c00: 6e 20 45 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c  n Exception will
3c10: 20 62 65 20 72 61 69 73 65 64 20 6f 6e 20 66 61   be raised on fa
3c20: 69 6c 75 72 65 2c 20 61 73 20 77 69 6c 6c 20 68  ilure, as will h
3c30: 61 70 70 65 6e 73 20 69 6e 20 74 68 69 73 20 73  appens in this s
3c40: 61 6d 70 6c 65 2c 20 79 6f 75 20 63 61 6e 20 74  ample, you can t
3c50: 68 65 6e 20 75 73 65 20 3c 62 3e 53 71 6c 50 72  hen use <b>SqlPr
3c60: 6f 63 5f 47 65 74 4c 61 73 74 45 72 72 6f 72 3c  oc_GetLastError<
3c70: 2f 62 3e 20 74 6f 20 72 65 74 72 69 65 76 65 20  /b> to retrieve 
3c80: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
3c90: 67 20 53 51 4c 20 65 72 72 6f 72 20 6d 65 73 73  g SQL error mess
3ca0: 61 67 65 2e 0d 0a 3c 62 72 3e 3c 62 72 3e 0d 0a  age...<br><br>..
3cb0: 3c 74 61 62 6c 65 20 62 67 63 6f 6c 6f 72 3d 22  <table bgcolor="
3cc0: 23 66 38 66 38 64 38 22 20 63 65 6c 6c 70 61 64  #f8f8d8" cellpad
3cd0: 64 69 6e 67 3d 22 36 22 20 63 65 6c 6c 73 70 61  ding="6" cellspa
3ce0: 63 69 6e 67 3d 22 38 22 3e 3c 74 72 3e 3c 74 64  cing="8"><tr><td
3cf0: 3e 0d 0a 3c 75 3e 4e 6f 74 65 3c 2f 75 3e 3a 20  >..<u>Note</u>: 
3d00: 61 6c 6c 20 3c 62 3e 44 6f 74 20 4d 61 63 72 6f  all <b>Dot Macro
3d10: 73 3c 2f 62 3e 20 66 6f 75 6e 64 20 77 69 74 68  s</b> found with
3d20: 69 6e 20 74 68 65 20 53 51 4c 20 42 6f 64 79 20  in the SQL Body 
3d30: 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 20 77  being executed w
3d40: 69 6c 6c 20 61 6c 77 61 79 73 20 62 65 20 69 67  ill always be ig
3d50: 6e 6f 72 65 64 2e 3c 62 72 3e 0d 0a 54 68 65 20  nored.<br>..The 
3d60: 73 61 6d 65 20 72 75 6c 65 20 61 70 70 6c 69 65  same rule applie
3d70: 73 20 74 6f 20 3c 62 3e 53 74 6f 72 65 64 50 72  s to <b>StoredPr
3d80: 6f 63 5f 45 78 65 63 75 74 65 3c 2f 62 3e 20 61  oc_Execute</b> a
3d90: 73 20 77 65 6c 6c 2e 3c 2f 62 3e 0d 0a 3c 2f 74  s well.</b>..</t
3da0: 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0d  d></tr></table>.
3db0: 0a 3c 62 72 3e 3c 68 72 3e 0d 0a 3c 2f 6c 69 3e  .<br><hr>..</li>
3dc0: 0d 0a 3c 6c 69 3e 0d 0a 3c 68 34 3e 48 61 6e 64  ..<li>..<h4>Hand
3dd0: 6c 69 6e 67 20 53 51 4c 20 53 74 6f 72 65 64 20  ling SQL Stored 
3de0: 50 72 6f 63 65 64 75 72 65 73 3c 2f 68 34 3e 0d  Procedures</h4>.
3df0: 0a 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 53 45 4c  .<verbatim>..SEL
3e00: 45 43 54 20 53 74 6f 72 65 64 50 72 6f 63 5f 43  ECT StoredProc_C
3e10: 72 65 61 74 65 54 61 62 6c 65 73 28 29 3b 0d 0a  reateTables();..
3e20: 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 3c 2f 76 65 72 62  -----..1..</verb
3e30: 61 74 69 6d 3e 0d 0a 79 6f 75 20 63 61 6e 20 75  atim>..you can u
3e40: 73 65 20 3c 62 3e 53 74 6f 72 65 64 50 72 6f 63  se <b>StoredProc
3e50: 5f 43 72 65 61 74 65 54 61 62 6c 65 73 3c 2f 62  _CreateTables</b
3e60: 3e 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 72  > in order to cr
3e70: 65 61 74 65 2c 20 77 69 74 68 69 6e 20 79 6f 75  eate, within you
3e80: 72 20 63 75 72 72 65 6e 74 6c 79 20 63 6f 6e 6e  r currently conn
3e90: 65 63 74 65 64 20 64 61 74 61 62 61 73 65 2c 20  ected database, 
3ea0: 61 6c 6c 20 3c 62 3e 6d 65 74 61 74 61 62 6c 65  all <b>metatable
3eb0: 73 3c 2f 62 3e 20 72 65 71 75 69 72 65 64 20 74  s</b> required t
3ec0: 6f 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 72 65  o permanently re
3ed0: 67 69 73 74 65 72 20 53 74 6f 72 65 64 20 50 72  gister Stored Pr
3ee0: 6f 63 65 64 75 72 65 73 20 61 6e 64 20 53 74 6f  ocedures and Sto
3ef0: 72 65 64 20 56 61 72 69 61 62 6c 65 73 2e 3c 62  red Variables.<b
3f00: 72 3e 3c 62 72 3e 0d 0a 3c 74 61 62 6c 65 20 62  r><br>..<table b
3f10: 67 63 6f 6c 6f 72 3d 22 23 66 38 66 38 64 38 22  gcolor="#f8f8d8"
3f20: 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 36 22   cellpadding="6"
3f30: 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 38 22   cellspacing="8"
3f40: 3e 3c 74 72 3e 3c 74 64 3e 0d 0a 3c 75 3e 4e 6f  ><tr><td>..<u>No
3f50: 74 65 3c 2f 75 3e 3a 20 61 6e 79 20 6e 65 77 20  te</u>: any new 
3f60: 64 61 74 61 62 61 73 65 20 63 72 65 61 74 65 64  database created
3f70: 20 62 79 20 53 70 61 74 69 61 4c 69 74 65 20 35   by SpatiaLite 5
3f80: 2e 30 2e 30 20 28 61 6e 64 20 73 75 62 73 65 71  .0.0 (and subseq
3f90: 75 65 6e 74 20 76 65 72 73 69 6f 6e 73 29 20 77  uent versions) w
3fa0: 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ill automaticall
3fb0: 79 20 73 75 70 70 6f 72 74 20 74 68 65 20 53 74  y support the St
3fc0: 6f 72 65 64 20 50 72 6f 63 65 64 75 72 65 73 20  ored Procedures 
3fd0: 6d 65 74 61 74 61 62 6c 65 73 2e 20 45 78 70 6c  metatables. Expl
3fe0: 69 63 69 74 6c 79 20 63 61 6c 6c 69 6e 67 20 74  icitly calling t
3ff0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
4000: 6d 61 69 6e 6c 79 20 75 73 65 64 20 69 6e 20 6f  mainly used in o
4010: 72 64 65 72 20 74 6f 20 61 64 64 20 53 74 6f 72  rder to add Stor
4020: 65 64 20 50 72 6f 63 65 64 75 72 65 73 20 73 75  ed Procedures su
4030: 70 70 6f 72 74 20 6f 6e 20 61 6c 72 65 61 64 79  pport on already
4040: 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61   existing databa
4050: 73 65 73 20 63 72 65 61 74 65 64 20 62 79 20 70  ses created by p
4060: 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73  revious versions
4070: 2e 20 43 61 6c 6c 69 6e 67 20 3c 62 3e 53 74 6f  . Calling <b>Sto
4080: 72 65 64 50 72 6f 63 5f 43 72 65 61 74 65 54 61  redProc_CreateTa
4090: 62 6c 65 73 3c 2f 62 3e 20 6f 6e 20 62 65 68 61  bles</b> on beha
40a0: 6c 66 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  lf of a database
40b0: 20 61 6c 72 65 61 64 79 20 73 75 70 70 6f 72 74   already support
40c0: 69 6e 67 20 74 68 65 20 53 74 6f 72 65 64 20 50  ing the Stored P
40d0: 72 6f 63 65 64 75 72 65 73 20 6d 65 74 61 74 61  rocedures metata
40e0: 62 6c 65 20 69 73 20 61 6e 20 68 61 72 6d 6c 65  ble is an harmle
40f0: 73 73 20 6f 70 65 72 61 74 69 6f 6e 20 73 69 6d  ss operation sim
4100: 70 6c 79 20 72 65 74 75 72 6e 69 6e 67 20 3c 62  ply returning <b
4110: 3e 31 3c 2f 62 3e 20 28 66 75 6c 6c 20 73 75 63  >1</b> (full suc
4120: 63 65 73 73 29 2e 0d 0a 3c 2f 74 64 3e 3c 2f 74  cess)...</td></t
4130: 72 3e 3c 2f 74 61 62 6c 65 3e 0d 0a 3c 76 65 72  r></table>..<ver
4140: 62 61 74 69 6d 3e 0d 0a 53 45 4c 45 43 54 20 53  batim>..SELECT S
4150: 74 6f 72 65 64 50 72 6f 63 5f 52 65 67 69 73 74  toredProc_Regist
4160: 65 72 20 28 20 27 73 70 5f 31 27 2c 20 27 61 20  er ( 'sp_1', 'a 
4170: 73 61 6d 70 6c 65 20 53 74 6f 72 65 64 20 50 72  sample Stored Pr
4180: 6f 63 65 64 75 72 65 20 66 6f 72 20 74 65 73 74  ocedure for test
4190: 69 6e 67 27 2c 20 53 71 6c 50 72 6f 63 5f 46 72  ing', SqlProc_Fr
41a0: 6f 6d 54 65 78 74 28 27 53 45 4c 45 43 54 20 40  omText('SELECT @
41b0: 63 6f 6c 40 20 46 52 4f 4d 20 40 74 62 6c 40 3b  col@ FROM @tbl@;
41c0: 27 20 29 29 3b 0d 0a 2d 2d 2d 2d 2d 0d 0a 31 0d  ' ));..-----..1.
41d0: 0a 3c 2f 76 65 72 62 61 74 69 6d 3e 0d 0a 79 6f  .</verbatim>..yo
41e0: 75 20 63 61 6e 20 75 73 65 20 3c 62 3e 53 74 6f  u can use <b>Sto
41f0: 72 65 64 50 72 6f 63 5f 52 65 67 69 73 74 65 72  redProc_Register
4200: 3c 2f 62 3e 20 69 6e 20 6f 72 64 65 72 20 74 6f  </b> in order to
4210: 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 72 65 67   permanently reg
4220: 69 73 74 65 72 20 61 20 53 74 6f 72 65 64 20 50  ister a Stored P
4230: 72 6f 63 65 64 75 72 65 2e 0d 0a 3c 76 65 72 62  rocedure...<verb
4240: 61 74 69 6d 3e 0d 0a 53 45 4c 45 43 54 20 53 74  atim>..SELECT St
4250: 6f 72 65 64 50 72 6f 63 5f 44 65 6c 65 74 65 20  oredProc_Delete 
4260: 28 20 27 73 70 5f 31 27 20 29 3b 0d 0a 2d 2d 2d  ( 'sp_1' );..---
4270: 2d 2d 0d 0a 31 0d 0a 3c 2f 76 65 72 62 61 74 69  --..1..</verbati
4280: 6d 3e 0d 0a 79 6f 75 20 63 61 6e 20 75 73 65 20  m>..you can use 
4290: 3c 62 3e 53 74 6f 72 65 64 50 72 6f 63 5f 44 65  <b>StoredProc_De
42a0: 6c 65 74 65 3c 2f 62 3e 20 69 6e 20 6f 72 64 65  lete</b> in orde
42b0: 72 20 74 6f 20 70 65 72 6d 61 6e 65 6e 74 6c 79  r to permanently
42c0: 20 72 65 6d 6f 76 65 20 61 20 70 72 65 76 69 6f   remove a previo
42d0: 75 73 6c 79 20 72 65 67 69 73 74 65 72 65 64 20  usly registered 
42e0: 53 74 6f 72 65 64 20 50 72 6f 63 65 64 75 72 65  Stored Procedure
42f0: 2e 0d 0a 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 53  ...<verbatim>..S
4300: 45 4c 45 43 54 20 53 71 6c 50 72 6f 63 5f 52 61  ELECT SqlProc_Ra
4310: 77 53 51 4c 20 28 20 53 74 6f 72 65 64 50 72 6f  wSQL ( StoredPro
4320: 63 5f 47 65 74 20 28 20 27 73 70 5f 31 27 20 29  c_Get ( 'sp_1' )
4330: 20 29 3b 0d 0a 2d 2d 2d 2d 2d 0d 0a 53 45 4c 45   );..-----..SELE
4340: 43 54 20 40 63 6f 6c 40 20 46 52 4f 4d 20 40 74  CT @col@ FROM @t
4350: 62 6c 40 3b 0d 0a 3c 2f 76 65 72 62 61 74 69 6d  bl@;..</verbatim
4360: 3e 0d 0a 79 6f 75 20 63 61 6e 20 75 73 65 20 3c  >..you can use <
4370: 62 3e 53 74 6f 72 65 64 50 72 6f 63 5f 47 65 74  b>StoredProc_Get
4380: 3c 2f 62 3e 20 69 6e 20 6f 72 64 65 72 20 74 6f  </b> in order to
4390: 20 72 65 74 72 69 65 76 65 20 74 68 65 20 53 51   retrieve the SQ
43a0: 4c 20 50 72 6f 63 65 64 75 72 65 20 42 4c 4f 42  L Procedure BLOB
43b0: 20 4f 62 6a 65 63 74 20 66 72 6f 6d 20 61 20 72   Object from a r
43c0: 65 67 69 73 74 65 72 65 64 20 53 74 6f 72 65 64  egistered Stored
43d0: 20 50 72 6f 63 65 64 75 72 65 2e 0d 0a 3c 76 65   Procedure...<ve
43e0: 72 62 61 74 69 6d 3e 0d 0a 53 45 4c 45 43 54 20  rbatim>..SELECT 
43f0: 53 74 6f 72 65 64 50 72 6f 63 5f 55 70 64 61 74  StoredProc_Updat
4400: 65 54 69 74 6c 65 20 28 20 27 73 70 5f 31 27 2c  eTitle ( 'sp_1',
4410: 20 27 74 68 69 73 20 54 69 74 6c 65 20 77 61 73   'this Title was
4420: 20 63 68 61 6e 67 65 64 27 20 29 3b 0d 0a 2d 2d   changed' );..--
4430: 2d 2d 2d 0d 0a 31 0d 0a 3c 2f 76 65 72 62 61 74  ---..1..</verbat
4440: 69 6d 3e 0d 0a 79 6f 75 20 63 61 6e 20 75 73 65  im>..you can use
4450: 20 3c 62 3e 53 74 6f 72 65 64 50 72 6f 63 5f 55   <b>StoredProc_U
4460: 70 64 61 74 65 54 69 74 6c 65 3c 2f 62 3e 20 69  pdateTitle</b> i
4470: 6e 20 6f 72 64 65 72 20 74 6f 20 6d 6f 64 69 66  n order to modif
4480: 79 20 74 68 65 20 54 69 74 6c 65 20 6f 66 20 61  y the Title of a
4490: 6e 20 61 6c 72 65 61 64 79 20 72 65 67 69 73 74  n already regist
44a0: 65 72 65 64 20 53 74 6f 72 65 64 20 50 72 6f 63  ered Stored Proc
44b0: 65 64 75 72 65 2e 0d 0a 3c 76 65 72 62 61 74 69  edure...<verbati
44c0: 6d 3e 0d 0a 53 45 4c 45 43 54 20 53 74 6f 72 65  m>..SELECT Store
44d0: 64 50 72 6f 63 5f 55 70 64 61 74 65 53 71 6c 42  dProc_UpdateSqlB
44e0: 6f 64 79 20 28 20 27 73 70 5f 31 27 2c 20 53 71  ody ( 'sp_1', Sq
44f0: 6c 50 72 6f 63 5f 46 72 6f 6d 46 69 6c 65 28 27  lProc_FromFile('
4500: 2f 68 6f 6d 65 2f 6a 6f 65 2f 73 71 6c 5f 73 63  /home/joe/sql_sc
4510: 72 69 70 74 73 2f 73 74 6f 72 65 64 5f 70 72 6f  ripts/stored_pro
4520: 63 5f 74 65 73 74 5f 76 32 2e 74 78 74 27 20 29  c_test_v2.txt' )
4530: 3b 0d 0a 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 3c 2f 76  ;..-----..1..</v
4540: 65 72 62 61 74 69 6d 3e 0d 0a 79 6f 75 20 63 61  erbatim>..you ca
4550: 6e 20 75 73 65 20 3c 62 3e 53 74 6f 72 65 64 50  n use <b>StoredP
4560: 72 6f 63 5f 55 70 64 61 74 65 53 71 6c 42 6f 64  roc_UpdateSqlBod
4570: 79 3c 2f 62 3e 20 69 6e 20 6f 72 64 65 72 20 74  y</b> in order t
4580: 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 53 71 6c  o modify the Sql
4590: 20 42 6f 64 79 20 6f 66 20 61 6e 20 61 6c 72 65   Body of an alre
45a0: 61 64 79 20 72 65 67 69 73 74 65 72 65 64 20 53  ady registered S
45b0: 74 6f 72 65 64 20 50 72 6f 63 65 64 75 72 65 20  tored Procedure 
45c0: 28 65 2e 67 2e 20 62 65 63 61 75 73 65 20 79 6f  (e.g. because yo
45d0: 75 27 76 65 20 64 69 73 63 6f 76 65 72 65 64 20  u've discovered 
45e0: 61 6e 64 20 66 69 78 65 64 20 73 6f 6d 65 20 62  and fixed some b
45f0: 75 67 20 61 66 66 65 63 74 69 6e 67 20 74 68 65  ug affecting the
4600: 20 70 72 65 76 69 6f 75 73 20 53 51 4c 20 69 6d   previous SQL im
4610: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 29 2e 3c 76  plementation).<v
4620: 65 72 62 61 74 69 6d 3e 0d 0a 53 45 4c 45 43 54  erbatim>..SELECT
4630: 20 53 74 6f 72 65 64 50 72 6f 63 5f 45 78 65 63   StoredProc_Exec
4640: 75 74 65 20 28 20 27 73 70 5f 31 27 2c 0d 0a 20  ute ( 'sp_1',.. 
4650: 20 20 20 27 40 63 6f 6c 40 3d 73 72 69 64 27 2c     '@col@=srid',
4660: 0d 0a 20 20 20 20 27 40 74 62 6c 40 3d 73 70 61  ..    '@tbl@=spa
4670: 74 69 61 6c 5f 72 65 66 5f 73 79 73 27 20 29 3b  tial_ref_sys' );
4680: 0d 0a 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 3c 2f 76 65  ..-----..1..</ve
4690: 72 62 61 74 69 6d 3e 0d 0a 61 6e 64 20 66 69 6e  rbatim>..and fin
46a0: 61 6c 6c 79 20 79 6f 75 20 63 61 6e 20 75 73 65  ally you can use
46b0: 20 3c 62 3e 53 74 6f 72 65 64 50 72 6f 63 5f 45   <b>StoredProc_E
46c0: 78 65 63 75 74 65 3c 2f 62 3e 20 69 6e 20 6f 72  xecute</b> in or
46d0: 64 65 72 20 74 6f 20 64 69 72 65 63 74 6c 79 20  der to directly 
46e0: 65 78 65 63 75 74 65 20 61 20 53 74 6f 72 65 64  execute a Stored
46f0: 20 50 72 6f 63 65 64 75 72 65 20 61 73 20 61 20   Procedure as a 
4700: 73 69 6e 67 6c 65 20 6d 6f 6e 6f 6c 69 74 68 69  single monolithi
4710: 63 20 75 6e 69 74 2e 3c 62 72 3e 0d 0a 3c 62 72  c unit.<br>..<br
4720: 3e 3c 62 72 3e 3c 68 72 3e 0d 0a 3c 2f 6c 69 3e  ><br><hr>..</li>
4730: 0d 0a 3c 6c 69 3e 0d 0a 3c 68 34 3e 48 61 6e 64  ..<li>..<h4>Hand
4740: 6c 69 6e 67 20 53 51 4c 20 53 74 6f 72 65 64 20  ling SQL Stored 
4750: 56 61 72 69 61 62 6c 65 73 3c 2f 68 34 3e 0d 0a  Variables</h4>..
4760: 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 53 45 4c 45  <verbatim>..SELE
4770: 43 54 20 53 74 6f 72 65 64 56 61 72 5f 52 65 67  CT StoredVar_Reg
4780: 69 73 74 65 72 20 28 20 27 70 69 27 2c 20 27 61  ister ( 'pi', 'a
4790: 6e 20 75 6e 69 76 65 72 73 61 6c 6c 79 20 75 73  n universally us
47a0: 65 66 75 6c 20 63 6f 6e 73 74 61 6e 74 27 2c 20  eful constant', 
47b0: 27 33 2e 31 34 27 20 29 3b 0d 0a 2d 2d 2d 2d 2d  '3.14' );..-----
47c0: 0d 0a 31 0d 0a 3c 2f 76 65 72 62 61 74 69 6d 3e  ..1..</verbatim>
47d0: 0d 0a 79 6f 75 20 63 61 6e 20 75 73 65 20 3c 62  ..you can use <b
47e0: 3e 53 74 6f 72 65 64 56 61 72 5f 52 65 67 69 73  >StoredVar_Regis
47f0: 74 65 72 3c 2f 62 3e 20 69 6e 20 6f 72 64 65 72  ter</b> in order
4800: 20 74 6f 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20   to permanently 
4810: 72 65 67 69 73 74 65 72 20 61 20 53 74 6f 72 65  register a Store
4820: 64 20 56 61 72 69 61 62 6c 65 2e 0d 0a 3c 76 65  d Variable...<ve
4830: 72 62 61 74 69 6d 3e 0d 0a 53 45 4c 45 43 54 20  rbatim>..SELECT 
4840: 53 74 6f 72 65 64 56 61 72 5f 44 65 6c 65 74 65  StoredVar_Delete
4850: 20 28 20 27 70 69 27 20 29 3b 0d 0a 2d 2d 2d 2d   ( 'pi' );..----
4860: 2d 0d 0a 31 0d 0a 3c 2f 76 65 72 62 61 74 69 6d  -..1..</verbatim
4870: 3e 0d 0a 79 6f 75 20 63 61 6e 20 75 73 65 20 3c  >..you can use <
4880: 62 3e 53 74 6f 72 65 64 56 61 72 5f 44 65 6c 65  b>StoredVar_Dele
4890: 74 65 3c 2f 62 3e 20 69 6e 20 6f 72 64 65 72 20  te</b> in order 
48a0: 74 6f 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 72  to permanently r
48b0: 65 6d 6f 76 65 20 61 20 70 72 65 76 69 6f 75 73  emove a previous
48c0: 6c 79 20 72 65 67 69 73 74 65 72 65 64 20 53 74  ly registered St
48d0: 6f 72 65 64 20 56 61 72 69 61 62 6c 65 2e 0d 0a  ored Variable...
48e0: 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 53 45 4c 45  <verbatim>..SELE
48f0: 43 54 20 53 74 6f 72 65 64 56 61 72 5f 47 65 74  CT StoredVar_Get
4900: 20 28 20 27 70 69 27 20 29 3b 0d 0a 2d 2d 2d 2d   ( 'pi' );..----
4910: 2d 0d 0a 40 50 49 40 3d 33 2e 31 34 0d 0a 3c 2f  -..@PI@=3.14..</
4920: 76 65 72 62 61 74 69 6d 3e 0d 0a 79 6f 75 20 63  verbatim>..you c
4930: 61 6e 20 75 73 65 20 3c 62 3e 53 74 6f 72 65 64  an use <b>Stored
4940: 56 61 72 5f 47 65 74 3c 2f 62 3e 20 69 6e 20 6f  Var_Get</b> in o
4950: 72 64 65 72 20 74 6f 20 72 65 74 72 69 65 76 65  rder to retrieve
4960: 20 74 68 65 20 56 61 72 69 61 62 6c 65 20 77 69   the Variable wi
4970: 74 68 20 56 61 6c 75 65 20 73 74 72 69 6e 67 20  th Value string 
4980: 66 72 6f 6d 20 61 20 72 65 67 69 73 74 65 72 65  from a registere
4990: 64 20 53 74 6f 72 65 64 20 56 61 72 69 61 62 6c  d Stored Variabl
49a0: 65 2e 0d 0a 3c 76 65 72 62 61 74 69 6d 3e 0d 0a  e...<verbatim>..
49b0: 53 45 4c 45 43 54 20 53 74 6f 72 65 64 56 61 72  SELECT StoredVar
49c0: 5f 55 70 64 61 74 65 54 69 74 6c 65 20 28 20 27  _UpdateTitle ( '
49d0: 70 69 27 2c 20 27 50 49 20 2d 20 74 68 65 20 6d  pi', 'PI - the m
49e0: 61 67 69 63 20 6e 75 6d 62 65 72 27 20 29 3b 0d  agic number' );.
49f0: 0a 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 3c 2f 76 65 72  .-----..1..</ver
4a00: 62 61 74 69 6d 3e 0d 0a 79 6f 75 20 63 61 6e 20  batim>..you can 
4a10: 75 73 65 20 3c 62 3e 53 74 6f 72 65 64 56 61 72  use <b>StoredVar
4a20: 5f 55 70 64 61 74 65 54 69 74 6c 65 3c 2f 62 3e  _UpdateTitle</b>
4a30: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6d 6f 64   in order to mod
4a40: 69 66 79 20 74 68 65 20 54 69 74 6c 65 20 6f 66  ify the Title of
4a50: 20 61 6e 20 61 6c 72 65 61 64 79 20 72 65 67 69   an already regi
4a60: 73 74 65 72 65 64 20 53 74 6f 72 65 64 20 50 72  stered Stored Pr
4a70: 6f 63 65 64 75 72 65 2e 0d 0a 3c 76 65 72 62 61  ocedure...<verba
4a80: 74 69 6d 3e 0d 0a 53 45 4c 45 43 54 20 53 74 6f  tim>..SELECT Sto
4a90: 72 65 64 56 61 72 5f 55 70 64 61 74 65 56 61 6c  redVar_UpdateVal
4aa0: 75 65 20 28 20 27 70 69 27 2c 20 27 33 2e 31 34  ue ( 'pi', '3.14
4ab0: 31 35 39 32 36 35 33 35 27 20 29 3b 0d 0a 2d 2d  15926535' );..--
4ac0: 2d 2d 2d 0d 0a 31 0d 0a 3c 2f 76 65 72 62 61 74  ---..1..</verbat
4ad0: 69 6d 3e 0d 0a 61 6e 64 20 66 69 6e 61 6c 6c 79  im>..and finally
4ae0: 20 79 6f 75 20 63 61 6e 20 75 73 65 20 3c 62 3e   you can use <b>
4af0: 53 74 6f 72 65 64 56 61 72 5f 55 70 64 61 74 65  StoredVar_Update
4b00: 56 61 6c 75 65 3c 2f 62 3e 20 69 6e 20 6f 72 64  Value</b> in ord
4b10: 65 72 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65  er to modify the
4b20: 20 56 61 72 69 61 62 6c 65 20 77 69 74 68 20 56   Variable with V
4b30: 61 6c 75 65 20 6f 66 20 61 6e 20 61 6c 72 65 61  alue of an alrea
4b40: 64 79 20 72 65 67 69 73 74 65 72 65 64 20 53 74  dy registered St
4b50: 6f 72 65 64 20 56 61 72 69 61 62 6c 65 2e 0d 0a  ored Variable...
4b60: 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e 0d 0a 3c 68 34  </li>..<li>..<h4
4b70: 3e 53 71 6c 2f 53 74 6f 72 65 64 20 50 72 6f 63  >Sql/Stored Proc
4b80: 65 64 75 72 65 73 20 61 73 20 72 65 61 6c 20 46  edures as real F
4b90: 75 6e 63 74 69 6f 6e 73 3c 2f 68 34 3e 0d 0a 41  unctions</h4>..A
4ba0: 6e 20 53 71 6c 20 6f 72 20 53 74 6f 72 65 64 20  n Sql or Stored 
4bb0: 50 72 6f 63 65 64 75 72 65 20 63 61 6e 20 65 66  Procedure can ef
4bc0: 66 65 63 74 69 76 65 6c 79 20 61 63 74 20 61 73  fectively act as
4bd0: 20 61 20 67 65 6e 75 69 6e 65 20 46 75 6e 63 74   a genuine Funct
4be0: 69 6f 6e 20 62 79 20 61 70 70 72 6f 70 72 69 61  ion by appropria
4bf0: 74 65 6c 79 20 63 61 6c 6c 69 6e 67 20 3c 62 3e  tely calling <b>
4c00: 53 71 6c 50 72 6f 63 5f 52 65 74 75 72 6e 28 29  SqlProc_Return()
4c10: 3c 2f 62 3e 20 28 6f 72 20 3c 62 3e 53 74 6f 72  </b> (or <b>Stor
4c20: 65 64 50 72 6f 63 5f 52 65 74 75 72 6e 28 29 3c  edProc_Return()<
4c30: 2f 62 3e 2c 20 74 68 61 74 20 73 69 6d 70 6c 79  /b>, that simply
4c40: 20 69 73 20 61 6e 20 3c 69 3e 61 6c 69 61 73 20   is an <i>alias 
4c50: 6e 61 6d 65 3c 2f 69 3e 20 66 6f 72 20 74 68 65  name</i> for the
4c60: 20 73 61 6d 65 20 66 75 6e 63 74 69 6f 6e 29 2e   same function).
4c70: 0d 0a 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 53 45  ..<verbatim>..SE
4c80: 4c 45 43 54 20 53 71 6c 50 72 6f 63 5f 52 65 74  LECT SqlProc_Ret
4c90: 75 72 6e 20 28 20 4e 55 4c 4c 20 29 3b 0d 0a 2d  urn ( NULL );..-
4ca0: 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 0d 0a 53 45 4c 45  -----..1....SELE
4cb0: 43 54 20 53 71 6c 50 72 6f 63 5f 52 65 74 75 72  CT SqlProc_Retur
4cc0: 6e 20 28 20 31 32 33 34 35 20 29 3b 0d 0a 2d 2d  n ( 12345 );..--
4cd0: 2d 2d 2d 2d 0d 0a 31 0d 0a 0d 0a 53 45 4c 45 43  ----..1....SELEC
4ce0: 54 20 53 71 6c 50 72 6f 63 5f 52 65 74 75 72 6e  T SqlProc_Return
4cf0: 20 28 20 31 32 33 2e 34 35 20 29 3b 0d 0a 2d 2d   ( 123.45 );..--
4d00: 2d 2d 2d 2d 0d 0a 31 0d 0a 0d 0a 53 45 4c 45 43  ----..1....SELEC
4d10: 54 20 53 71 6c 50 72 6f 63 5f 52 65 74 75 72 6e  T SqlProc_Return
4d20: 20 28 20 27 74 68 69 73 20 69 73 20 61 20 76 61   ( 'this is a va
4d30: 6c 75 65 27 20 29 3b 0d 0a 2d 2d 2d 2d 2d 2d 0d  lue' );..------.
4d40: 0a 31 0d 0a 0d 0a 53 45 4c 45 43 54 20 53 71 6c  .1....SELECT Sql
4d50: 50 72 6f 63 5f 52 65 74 75 72 6e 20 28 20 7a 65  Proc_Return ( ze
4d60: 72 6f 62 6c 6f 62 28 31 30 29 20 29 3b 0d 0a 2d  roblob(10) );..-
4d70: 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 3c 2f 76 65 72 62  -----..1..</verb
4d80: 61 74 69 6d 3e 0d 0a 3c 75 6c 3e 0d 0a 3c 6c 69  atim>..<ul>..<li
4d90: 3e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 73  >This function s
4da0: 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20  tops as soon as 
4db0: 70 6f 73 73 69 62 6c 65 20 74 68 65 20 65 78 65  possible the exe
4dc0: 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 75  cution of the cu
4dd0: 72 72 65 6e 74 20 53 51 4c 20 42 6f 64 79 2c 20  rrent SQL Body, 
4de0: 74 68 65 6e 20 72 65 74 75 72 6e 69 6e 67 20 61  then returning a
4df0: 20 3c 62 3e 76 61 6c 75 65 3c 2f 62 3e 20 74 6f   <b>value</b> to
4e00: 20 74 68 65 20 63 61 6c 6c 65 72 2e 3c 62 72 3e   the caller.<br>
4e10: 0d 0a 54 68 65 20 3c 62 3e 52 65 74 75 72 6e 20  ..The <b>Return 
4e20: 56 61 6c 75 65 3c 2f 62 3e 20 64 65 66 69 6e 65  Value</b> define
4e30: 64 20 62 79 20 3c 62 3e 53 71 6c 50 72 6f 63 5f  d by <b>SqlProc_
4e40: 52 65 74 75 72 6e 28 29 3c 2f 62 3e 20 63 61 6e  Return()</b> can
4e50: 20 66 72 65 65 6c 79 20 62 65 20 6f 66 20 61 6e   freely be of an
4e60: 79 20 70 6f 73 73 69 62 6c 65 20 64 61 74 61 2d  y possible data-
4e70: 74 79 70 65 3a 20 4e 55 4c 4c 2c 20 49 4e 54 45  type: NULL, INTE
4e80: 47 45 52 2c 20 44 4f 55 42 4c 45 2c 20 54 45 58  GER, DOUBLE, TEX
4e90: 54 20 6f 72 20 42 4c 4f 42 2e 3c 2f 6c 69 3e 0d  T or BLOB.</li>.
4ea0: 0a 3c 6c 69 3e 3c 75 3e 4e 6f 74 65 3c 2f 75 3e  .<li><u>Note</u>
4eb0: 3a 20 69 74 27 73 20 6e 6f 74 20 61 6e 20 65 78  : it's not an ex
4ec0: 61 63 74 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  act equivalent o
4ed0: 66 20 74 68 65 20 6d 6f 73 74 20 75 73 75 61 6c  f the most usual
4ee0: 20 3c 62 3e 52 45 54 55 52 4e 3c 2f 62 3e 20 73   <b>RETURN</b> s
4ef0: 74 61 74 65 6d 65 6e 74 20 64 65 66 69 6e 65 64  tatement defined
4f00: 20 62 79 20 6d 61 6e 79 20 63 6f 6d 6d 6f 6e 20   by many common 
4f10: 6c 61 6e 67 75 61 67 65 73 3a 0d 0a 3c 75 6c 3e  languages:..<ul>
4f20: 0d 0a 3c 6c 69 3e 4a 75 73 74 20 63 61 6c 6c 69  ..<li>Just calli
4f30: 6e 67 20 3c 62 3e 53 71 6c 50 72 6f 63 5f 52 65  ng <b>SqlProc_Re
4f40: 74 75 72 6e 28 29 3c 2f 62 3e 20 77 69 6c 6c 20  turn()</b> will 
4f50: 6e 6f 74 20 63 61 75 73 65 20 74 68 65 20 65 78  not cause the ex
4f60: 65 63 75 74 69 6f 6e 20 74 6f 20 69 6d 6d 65 64  ecution to immed
4f70: 69 61 74 65 6c 79 20 73 74 6f 70 3b 20 74 68 69  iately stop; thi
4f80: 73 20 63 6f 75 6c 64 20 65 61 73 69 6c 79 20 62  s could easily b
4f90: 65 20 61 20 64 65 66 65 72 72 65 64 20 61 63 74  e a deferred act
4fa0: 69 6f 6e 2e 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e 57  ion.</li>..<li>W
4fb0: 68 61 74 20 3c 62 3e 53 71 6c 50 72 6f 63 5f 52  hat <b>SqlProc_R
4fc0: 65 74 75 72 6e 28 29 3c 2f 62 3e 20 72 65 61 6c  eturn()</b> real
4fd0: 6c 79 20 64 6f 65 73 20 69 73 20 3c 69 3e 62 6f  ly does is <i>bo
4fe0: 6f 6b 69 6e 67 3c 2f 69 3e 20 74 68 65 20 74 65  oking</i> the te
4ff0: 72 6d 69 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65  rmination of the
5000: 20 63 75 72 72 65 6e 74 20 53 51 4c 20 42 6c 6f   current SQL Blo
5010: 63 6b 2c 20 62 75 74 20 74 68 65 20 63 75 72 72  ck, but the curr
5020: 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ent SQL statemen
5030: 74 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64  t being executed
5040: 20 28 74 68 65 20 6f 6e 65 20 69 6e 63 6c 75 64   (the one includ
5050: 69 6e 67 20 74 68 65 20 53 71 6c 50 72 6f 63 5f  ing the SqlProc_
5060: 52 65 74 75 72 6e 28 29 20 63 61 6c 6c 29 20 77  Return() call) w
5070: 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  ill continue to 
5080: 62 65 20 65 78 65 63 75 74 65 64 20 75 6e 74 69  be executed unti
5090: 6c 20 69 74 73 20 6e 61 74 75 72 61 6c 20 63 6f  l its natural co
50a0: 6d 70 6c 65 74 69 6f 6e 2e 3c 2f 6c 69 3e 0d 0a  mpletion.</li>..
50b0: 3c 6c 69 3e 4f 6e 6c 79 20 61 74 20 74 68 69 73  <li>Only at this
50c0: 20 70 6f 69 6e 74 20 3c 62 3e 53 71 6c 50 72 6f   point <b>SqlPro
50d0: 63 5f 45 78 65 63 75 74 65 28 29 3c 2f 62 3e 20  c_Execute()</b> 
50e0: 28 6f 72 20 3c 62 3e 53 74 6f 72 65 64 50 72 6f  (or <b>StoredPro
50f0: 63 5f 45 78 65 63 75 74 65 29 3c 2f 62 3e 20 77  c_Execute)</b> w
5100: 69 6c 6c 20 72 65 61 6c 6c 79 20 73 74 6f 70 20  ill really stop 
5110: 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 63 75  executing the cu
5120: 72 72 65 6e 74 20 53 51 4c 20 42 6c 6f 63 6b 20  rrent SQL Block 
5130: 69 6d 65 64 69 61 74 65 6c 79 20 72 65 74 75 72  imediately retur
5140: 6e 69 6e 67 20 74 68 65 20 65 78 65 63 75 74 69  ning the executi
5150: 6f 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68  on control to th
5160: 65 20 63 61 6c 6c 65 72 20 61 6e 64 20 70 61 73  e caller and pas
5170: 73 69 6e 67 20 62 61 63 6b 20 74 6f 20 69 74 20  sing back to it 
5180: 74 68 65 20 3c 62 3e 52 65 74 75 72 6e 20 56 61  the <b>Return Va
5190: 6c 75 65 3c 2f 62 3e 20 73 70 65 66 69 66 69 65  lue</b> spefifie
51a0: 64 20 62 79 20 3c 62 3e 53 71 6c 50 72 6f 63 5f  d by <b>SqlProc_
51b0: 52 65 74 75 72 6e 28 29 3c 2f 62 3e 2e 3c 2f 6c  Return()</b>.</l
51c0: 69 3e 0d 0a 3c 2f 75 6c 3e 3c 2f 6c 69 3e 0d 0a  i>..</ul></li>..
51d0: 3c 6c 69 3e 3c 75 3e 49 6d 70 6f 72 74 61 6e 74  <li><u>Important
51e0: 20 6e 6f 74 69 63 65 3c 2f 75 3e 3a 20 61 6e 20   notice</u>: an 
51f0: 53 51 4c 20 42 6f 64 79 20 74 65 72 6d 69 6e 61  SQL Body termina
5200: 74 69 6e 67 20 77 69 74 68 6f 75 74 20 65 78 70  ting without exp
5210: 6c 69 63 69 74 6c 79 20 63 61 6c 6c 69 6e 67 20  licitly calling 
5220: 3c 62 3e 53 71 6c 50 72 6f 63 5f 52 65 74 75 72  <b>SqlProc_Retur
5230: 6e 28 29 3c 2f 62 3e 20 77 69 6c 6c 20 62 65 68  n()</b> will beh
5240: 61 76 65 20 65 78 61 63 74 6c 79 20 61 73 20 69  ave exactly as i
5250: 66 20 68 61 64 20 69 6d 70 6c 69 63 69 74 6c 79  f had implicitly
5260: 20 63 61 6c 6c 65 64 20 3c 62 3e 53 71 6c 50 72   called <b>SqlPr
5270: 6f 63 5f 52 65 74 75 72 6e 28 4e 55 4c 4c 29 2e  oc_Return(NULL).
5280: 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e 3c 75 3e 57 61  </li>..<li><u>Wa
5290: 72 6e 69 6e 67 3c 2f 75 3e 3a 20 61 6e 79 20 63  rning</u>: any c
52a0: 61 6c 6c 20 74 6f 20 3c 62 3e 53 71 6c 50 72 6f  all to <b>SqlPro
52b0: 63 5f 52 65 74 75 72 6e 28 29 3c 2f 62 3e 20 6f  c_Return()</b> o
52c0: 75 74 73 69 64 65 20 74 68 65 20 65 78 65 63 75  utside the execu
52d0: 74 69 6f 6e 20 63 6f 6e 74 65 78 74 20 6f 66 20  tion context of 
52e0: 3c 62 3e 53 71 6c 50 72 6f 63 5f 45 78 65 63 75  <b>SqlProc_Execu
52f0: 74 65 28 29 3c 2f 62 3e 20 28 6f 72 20 3c 62 3e  te()</b> (or <b>
5300: 53 74 6f 72 65 64 50 72 6f 63 5f 45 78 65 63 75  StoredProc_Execu
5310: 74 65 3c 2f 62 3e 29 20 77 69 6c 6c 20 62 65 20  te</b>) will be 
5320: 73 69 6d 70 6c 79 20 63 6f 6e 73 69 64 65 72 65  simply considere
5330: 64 20 61 73 20 61 6e 20 65 66 66 65 63 74 6c 65  d as an effectle
5340: 73 73 20 3c 62 3e 6e 6f 2d 6f 70 3c 2f 62 3e 2e  ss <b>no-op</b>.
5350: 0d 0a 3c 2f 75 6c 3e 0d 0a 3c 62 72 3e 0d 0a 4a  ..</ul>..<br>..J
5360: 75 73 74 20 66 65 77 20 62 61 73 69 63 20 65 78  ust few basic ex
5370: 61 6d 70 6c 65 73 20 61 62 6f 75 74 20 53 71 6c  amples about Sql
5380: 20 50 72 6f 63 65 64 75 72 65 73 20 61 63 74 69   Procedures acti
5390: 6e 67 20 61 73 20 72 65 61 6c 20 46 75 6e 63 74  ng as real Funct
53a0: 69 6f 6e 73 2e 3c 62 72 3e 3c 62 72 3e 0d 0a 3c  ions.<br><br>..<
53b0: 62 3e 45 78 61 6d 70 6c 65 20 23 31 3c 2f 62 3e  b>Example #1</b>
53c0: 3a 20 61 20 70 73 65 75 64 6f 2d 66 75 6e 63 74  : a pseudo-funct
53d0: 69 6f 6e 20 72 65 74 75 72 6e 69 6e 67 20 74 68  ion returning th
53e0: 65 20 73 75 6d 20 6f 66 20 74 77 6f 20 49 6e 74  e sum of two Int
53f0: 65 67 65 72 73 2e 0d 0a 3c 76 65 72 62 61 74 69  egers...<verbati
5400: 6d 3e 0d 0a 53 45 4c 45 43 54 20 53 71 6c 50 72  m>..SELECT SqlPr
5410: 6f 63 5f 45 78 65 63 75 74 65 28 53 71 6c 50 72  oc_Execute(SqlPr
5420: 6f 63 5f 46 72 6f 6d 54 65 78 74 28 0d 0a 20 20  oc_FromText(..  
5430: 20 20 20 20 20 27 53 45 4c 45 43 54 20 53 71 6c       'SELECT Sql
5440: 50 72 6f 63 5f 52 65 74 75 72 6e 28 40 61 72 67  Proc_Return(@arg
5450: 31 40 20 2b 20 40 61 72 67 32 40 29 27 29 2c 20  1@ + @arg2@)'), 
5460: 0d 0a 20 20 20 20 20 20 20 27 40 61 72 67 31 40  ..       '@arg1@
5470: 3d 31 30 30 30 27 2c 20 27 40 61 72 67 32 40 3d  =1000', '@arg2@=
5480: 32 35 27 29 3b 20 0d 0a 2d 2d 2d 2d 2d 2d 2d 2d  25'); ..--------
5490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
54a0: 2d 0d 0a 31 30 32 35 0d 0a 3c 2f 76 65 72 62 61  -..1025..</verba
54b0: 74 69 6d 3e 0d 0a 3c 62 3e 45 78 61 6d 70 6c 65  tim>..<b>Example
54c0: 20 23 32 3c 2f 62 3e 3a 20 61 20 70 73 65 75 64   #2</b>: a pseud
54d0: 6f 2d 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  o-function retur
54e0: 6e 69 6e 67 20 74 68 65 20 70 72 6f 64 75 63 74  ning the product
54f0: 20 6f 66 20 74 77 6f 20 44 6f 75 62 6c 65 73 2e   of two Doubles.
5500: 0d 0a 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 53 45  ..<verbatim>..SE
5510: 4c 45 43 54 20 53 71 6c 50 72 6f 63 5f 45 78 65  LECT SqlProc_Exe
5520: 63 75 74 65 28 53 71 6c 50 72 6f 63 5f 46 72 6f  cute(SqlProc_Fro
5530: 6d 54 65 78 74 28 0d 0a 20 20 20 20 20 20 20 27  mText(..       '
5540: 53 45 4c 45 43 54 20 53 71 6c 50 72 6f 63 5f 52  SELECT SqlProc_R
5550: 65 74 75 72 6e 28 40 61 72 67 31 40 20 2a 20 40  eturn(@arg1@ * @
5560: 61 72 67 32 40 29 27 29 2c 20 0d 0a 20 20 20 20  arg2@)'), ..    
5570: 20 20 20 27 40 61 72 67 31 40 3d 33 2e 32 35 27     '@arg1@=3.25'
5580: 2c 20 27 40 61 72 67 32 40 3d 31 30 30 2e 30 27  , '@arg2@=100.0'
5590: 29 3b 20 0d 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ); ..-----------
55a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a  --------------..
55b0: 33 32 35 2e 30 30 30 30 30 30 0d 0a 3c 2f 76 65  325.000000..</ve
55c0: 72 62 61 74 69 6d 3e 0d 0a 3c 62 3e 45 78 61 6d  rbatim>..<b>Exam
55d0: 70 6c 65 20 23 33 3c 2f 62 3e 3a 20 61 20 70 73  ple #3</b>: a ps
55e0: 65 75 64 6f 2d 66 75 6e 63 74 69 6f 6e 20 72 65  eudo-function re
55f0: 74 75 72 6e 69 6e 67 20 74 68 65 20 63 6f 6e 63  turning the conc
5600: 61 74 65 6e 61 74 69 6f 6e 20 6f 66 20 74 77 6f  atenation of two
5610: 20 54 65 78 74 20 53 74 72 69 6e 67 73 2e 0d 0a   Text Strings...
5620: 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 53 45 4c 45  <verbatim>..SELE
5630: 43 54 20 53 71 6c 50 72 6f 63 5f 45 78 65 63 75  CT SqlProc_Execu
5640: 74 65 28 53 71 6c 50 72 6f 63 5f 46 72 6f 6d 54  te(SqlProc_FromT
5650: 65 78 74 28 0d 0a 20 20 20 20 20 20 20 27 53 45  ext(..       'SE
5660: 4c 45 43 54 20 53 71 6c 50 72 6f 63 5f 52 65 74  LECT SqlProc_Ret
5670: 75 72 6e 28 40 73 74 72 31 40 20 7c 7c 20 27 27  urn(@str1@ || ''
5680: 20 27 27 20 7c 7c 20 40 73 74 72 32 40 29 27 29   '' || @str2@)')
5690: 2c 20 0d 0a 20 20 20 20 20 20 20 27 40 73 74 72  , ..       '@str
56a0: 31 40 3d 27 27 4c 69 6e 75 73 20 54 6f 72 76 61  1@=''Linus Torva
56b0: 6c 64 73 27 27 27 2c 20 27 40 73 74 72 32 40 3d  lds''', '@str2@=
56c0: 27 27 69 73 20 74 68 65 20 61 75 74 68 6f 72 20  ''is the author 
56d0: 6f 66 20 4c 69 6e 75 78 27 27 27 29 3b 20 0d 0a  of Linux'''); ..
56e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
56f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 4c 69 6e 75 73  ---------..Linus
5700: 20 54 6f 72 76 61 6c 64 73 20 69 73 20 74 68 65   Torvalds is the
5710: 20 61 75 74 68 6f 72 20 6f 66 20 4c 69 6e 75 78   author of Linux
5720: 0d 0a 3c 2f 76 65 72 62 61 74 69 6d 3e 0d 0a 3c  ..</verbatim>..<
5730: 62 3e 45 78 61 6d 70 6c 65 20 23 34 3c 2f 62 3e  b>Example #4</b>
5740: 3a 20 61 20 70 73 65 75 64 6f 2d 66 75 6e 63 74  : a pseudo-funct
5750: 69 6f 6e 20 72 65 74 75 72 6e 69 6e 67 20 61 20  ion returning a 
5760: 42 4c 4f 42 20 47 65 6f 6d 65 74 72 79 2e 0d 0a  BLOB Geometry...
5770: 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 53 45 4c 45  <verbatim>..SELE
5780: 43 54 20 41 73 45 57 4b 54 28 53 71 6c 50 72 6f  CT AsEWKT(SqlPro
5790: 63 5f 45 78 65 63 75 74 65 28 53 71 6c 50 72 6f  c_Execute(SqlPro
57a0: 63 5f 46 72 6f 6d 54 65 78 74 28 0d 0a 20 20 20  c_FromText(..   
57b0: 20 20 20 20 27 53 45 4c 45 43 54 20 53 71 6c 50      'SELECT SqlP
57c0: 72 6f 63 5f 52 65 74 75 72 6e 28 4d 61 6b 65 50  roc_Return(MakeP
57d0: 6f 69 6e 74 28 40 78 40 2c 20 40 79 40 2c 20 40  oint(@x@, @y@, @
57e0: 73 72 69 64 40 29 29 27 29 2c 20 0d 0a 20 20 20  srid@))'), ..   
57f0: 20 20 20 20 27 40 78 40 3d 31 30 27 2c 20 27 40      '@x@=10', '@
5800: 79 40 3d 32 30 27 2c 20 27 40 73 72 69 64 40 3d  y@=20', '@srid@=
5810: 34 33 32 36 27 29 29 3b 20 0d 0a 2d 2d 2d 2d 2d  4326')); ..-----
5820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5830: 2d 2d 2d 2d 0d 0a 53 52 49 44 3d 34 33 32 36 3b  ----..SRID=4326;
5840: 50 4f 49 4e 54 28 31 30 20 32 30 29 0d 0a 3c 2f  POINT(10 20)..</
5850: 76 65 72 62 61 74 69 6d 3e 0d 0a 3c 2f 6c 69 3e  verbatim>..</li>
5860: 3c 6c 69 3e 0d 0a 3c 68 34 3e 53 71 6c 2f 53 74  <li>..<h4>Sql/St
5870: 6f 72 65 64 20 50 72 6f 63 65 64 75 72 65 73 20  ored Procedures 
5880: 69 74 65 72 61 74 69 76 65 20 65 78 65 63 75 74  iterative execut
5890: 69 6f 6e 3c 2f 68 34 3e 0d 0a 3c 62 3e 53 71 6c  ion</h4>..<b>Sql
58a0: 50 72 6f 63 5f 45 78 65 63 75 74 65 4c 6f 6f 70  Proc_ExecuteLoop
58b0: 28 29 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 53 74  ()</b> and <b>St
58c0: 6f 72 65 64 50 72 6f 63 5f 45 78 65 63 75 74 65  oredProc_Execute
58d0: 4c 6f 6f 70 28 29 3c 2f 62 3e 20 61 72 65 20 76  Loop()</b> are v
58e0: 65 72 79 20 73 69 6d 69 6c 61 72 20 72 65 73 70  ery similar resp
58f0: 65 63 74 69 76 65 6c 79 20 74 6f 20 3c 62 3e 53  ectively to <b>S
5900: 71 6c 50 72 6f 63 5f 45 78 65 63 75 74 65 28 29  qlProc_Execute()
5910: 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 53 74 6f 72  </b> and <b>Stor
5920: 65 64 50 72 6f 63 5f 45 78 65 63 75 74 65 28 29  edProc_Execute()
5930: 3c 2f 62 3e 3b 20 74 68 65 20 73 69 67 6e 61 74  </b>; the signat
5940: 75 72 65 20 6f 66 20 74 68 65 73 65 20 53 51 4c  ure of these SQL
5950: 20 66 75 6e 63 74 69 6f 6e 20 70 61 69 72 73 20   function pairs 
5960: 69 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73  is exactly the s
5970: 61 6d 65 2e 3c 62 72 3e 3c 62 72 3e 0d 0a 42 75  ame.<br><br>..Bu
5980: 74 20 74 68 65 72 65 20 69 73 20 61 20 76 65 72  t there is a ver
5990: 79 20 72 65 6c 65 76 61 6e 74 20 64 69 66 66 65  y relevant diffe
59a0: 72 65 6e 63 65 20 69 6e 20 74 68 65 69 72 20 72  rence in their r
59b0: 65 73 70 65 63 74 69 76 65 20 62 65 68 61 76 69  espective behavi
59c0: 6f 72 3a 0d 0a 3c 75 6c 3e 0d 0a 3c 6c 69 3e 61  or:..<ul>..<li>a
59d0: 73 20 77 65 20 68 61 76 65 20 61 6c 72 65 61 64  s we have alread
59e0: 79 20 73 65 65 6e 2c 20 62 6f 74 68 20 3c 62 3e  y seen, both <b>
59f0: 53 71 6c 50 72 6f 63 5f 45 78 65 63 75 74 65 28  SqlProc_Execute(
5a00: 29 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 53 74 6f  )</b> and <b>Sto
5a10: 72 65 64 50 72 6f 63 5f 45 78 65 63 75 74 65 28  redProc_Execute(
5a20: 29 3c 2f 62 3e 20 72 75 6e 20 6a 75 73 74 20 6f  )</b> run just o
5a30: 6e 63 65 2c 20 74 68 65 6e 20 72 65 74 75 72 6e  nce, then return
5a40: 69 6e 67 20 74 6f 20 74 68 65 20 63 61 6c 6c 65  ing to the calle
5a50: 72 20 74 68 65 20 3c 62 3e 72 65 74 75 72 6e 20  r the <b>return 
5a60: 76 61 6c 75 65 3c 2f 62 3e 20 69 6d 70 6c 69 63  value</b> implic
5a70: 69 74 6c 79 20 6f 72 20 65 78 70 6c 69 63 69 74  itly or explicit
5a80: 6c 79 20 73 65 74 20 62 79 20 3c 62 3e 53 71 6c  ly set by <b>Sql
5a90: 50 72 6f 63 5f 52 65 74 75 72 6e 28 29 3c 2f 62  Proc_Return()</b
5aa0: 3e 20 6f 72 20 3c 62 3e 53 74 6f 72 65 64 50 72  > or <b>StoredPr
5ab0: 6f 63 5f 52 65 74 75 72 6e 28 29 3c 2f 62 3e 2e  oc_Return()</b>.
5ac0: 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e 62 6f 74 68 20  </li>..<li>both 
5ad0: 3c 62 3e 53 71 6c 50 72 6f 63 5f 45 78 65 63 75  <b>SqlProc_Execu
5ae0: 74 65 4c 6f 6f 70 28 29 3c 2f 62 3e 20 61 6e 64  teLoop()</b> and
5af0: 20 3c 62 3e 53 74 6f 72 65 64 50 72 6f 63 5f 45   <b>StoredProc_E
5b00: 78 65 63 75 74 65 4c 6f 6f 70 28 29 3c 2f 62 3e  xecuteLoop()</b>
5b10: 20 77 69 6c 6c 20 69 6e 73 74 65 61 64 20 61 75   will instead au
5b20: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 69 74 65 72  tomatically iter
5b30: 61 74 65 20 61 73 20 6d 61 6e 79 20 74 69 6d 65  ate as many time
5b40: 73 20 61 73 20 72 65 71 75 69 72 65 64 20 74 68  s as required th
5b50: 65 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74  e execution of t
5b60: 68 65 69 72 20 3c 62 3e 53 51 4c 20 42 6f 64 79  heir <b>SQL Body
5b70: 3c 2f 62 3e 2e 3c 62 72 3e 0d 0a 54 68 65 20 6c  </b>.<br>..The l
5b80: 6f 6f 70 20 77 69 6c 6c 20 62 72 65 61 6b 20 6f  oop will break o
5b90: 6e 6c 79 20 77 68 65 6e 20 74 68 65 20 6c 61 73  nly when the las
5ba0: 74 20 69 74 65 72 61 74 69 6f 6e 20 77 69 6c 6c  t iteration will
5bb0: 20 66 69 6e 61 6c 6c 79 20 72 65 74 75 72 6e 20   finally return 
5bc0: 61 20 3c 62 3e 6e 65 67 61 74 69 76 65 3c 2f 62  a <b>negative</b
5bd0: 3e 20 6f 72 20 3c 62 3e 7a 65 72 6f 3c 2f 62 3e  > or <b>zero</b>
5be0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 3c   integer value.<
5bf0: 2f 6c 69 3e 0d 0a 3c 6c 69 3e 3c 62 3e 3c 75 3e  /li>..<li><b><u>
5c00: 57 61 72 6e 69 6e 67 3c 2f 75 3e 3c 2f 62 3e 3a  Warning</u></b>:
5c10: 20 61 20 62 61 64 6c 79 20 69 6d 70 6c 65 6d 65   a badly impleme
5c20: 6e 74 65 64 20 69 74 65 72 61 74 69 6f 6e 20 63  nted iteration c
5c30: 61 6e 20 65 61 73 69 6c 79 20 63 61 75 73 65 20  an easily cause 
5c40: 61 20 6e 61 73 74 79 20 3c 61 20 68 72 65 66 3d  a nasty <a href=
5c50: 22 68 74 74 70 73 3a 2f 2f 65 6e 2e 77 69 6b 69  "https://en.wiki
5c60: 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 49  pedia.org/wiki/I
5c70: 6e 66 69 6e 69 74 65 5f 6c 6f 6f 70 22 3e 65 6e  nfinite_loop">en
5c80: 64 6c 65 73 73 20 6c 6f 6f 70 3c 2f 61 3e 3b 20  dless loop</a>; 
5c90: 62 65 77 61 72 65 20 61 6e 64 20 62 65 20 76 65  beware and be ve
5ca0: 72 79 20 63 61 75 74 69 6f 75 73 2e 3c 2f 6c 69  ry cautious.</li
5cb0: 3e 0d 0a 3c 2f 75 6c 3e 3c 62 72 3e 0d 0a 3c 62  >..</ul><br>..<b
5cc0: 3e 45 78 61 6d 70 6c 65 3c 2f 62 3e 0d 0a 3c 76  >Example</b>..<v
5cd0: 65 72 62 61 74 69 6d 3e 0d 0a 2d 2d 0d 0a 2d 2d  erbatim>..--..--
5ce0: 20 63 72 65 61 74 69 6e 67 20 61 20 74 65 73 74   creating a test
5cf0: 20 74 61 62 6c 65 0d 0a 2d 2d 0d 0a 43 52 45 41   table..--..CREA
5d00: 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20  TE TABLE IF NOT 
5d10: 45 58 49 53 54 53 20 6c 6f 6f 70 69 6e 67 20 28  EXISTS looping (
5d20: 0d 0a 20 20 20 20 69 64 20 49 4e 54 45 47 45 52  ..    id INTEGER
5d30: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 55 54   PRIMARY KEY AUT
5d40: 4f 49 4e 43 52 45 4d 45 4e 54 2c 0d 0a 20 20 20  OINCREMENT,..   
5d50: 20 63 6f 6c 69 6e 74 20 49 4e 54 45 47 45 52 20   colint INTEGER 
5d60: 4e 4f 54 20 4e 55 4c 4c 2c 0d 0a 20 20 20 20 63  NOT NULL,..    c
5d70: 6f 6c 73 74 72 20 54 45 58 54 20 4e 4f 54 20 4e  olstr TEXT NOT N
5d80: 55 4c 4c 2c 0d 0a 20 20 20 20 74 6d 73 74 61 6d  ULL,..    tmstam
5d90: 70 20 54 45 58 54 20 4e 4f 54 20 4e 55 4c 4c 29  p TEXT NOT NULL)
5da0: 3b 0d 0a 0d 0a 2d 2d 0d 0a 2d 2d 20 69 6e 73 65  ;....--..-- inse
5db0: 72 74 69 6e 67 20 61 20 72 61 6e 64 6f 6d 20 72  rting a random r
5dc0: 6f 77 0d 0a 2d 2d 0d 0a 49 4e 53 45 52 54 20 49  ow..--..INSERT I
5dd0: 4e 54 4f 20 6c 6f 6f 70 69 6e 67 20 28 69 64 2c  NTO looping (id,
5de0: 20 63 6f 6c 69 6e 74 2c 20 63 6f 6c 73 74 72 2c   colint, colstr,
5df0: 20 74 6d 73 74 61 6d 70 29 0d 0a 20 20 20 20 56   tmstamp)..    V
5e00: 41 4c 55 45 53 20 28 4e 55 4c 4c 2c 20 72 61 6e  ALUES (NULL, ran
5e10: 64 6f 6d 28 29 2c 20 68 65 78 28 72 61 6e 64 6f  dom(), hex(rando
5e20: 6d 62 6c 6f 62 28 31 36 29 29 2c 20 64 61 74 65  mblob(16)), date
5e30: 74 69 6d 65 28 27 6e 6f 77 27 29 29 3b 0d 0a 0d  time('now'));...
5e40: 0a 2d 2d 0d 0a 2d 2d 20 73 65 74 74 69 6e 67 20  .--..-- setting 
5e50: 75 70 20 61 20 72 65 74 75 72 6e 20 76 61 6c 75  up a return valu
5e60: 65 0d 0a 2d 2d 0d 0a 53 45 4c 45 43 54 20 43 41  e..--..SELECT CA
5e70: 53 45 20 63 6f 75 6e 74 28 2a 29 20 3e 3d 20 40  SE count(*) >= @
5e80: 4c 49 4d 49 54 40 20 57 48 45 4e 20 31 20 54 48  LIMIT@ WHEN 1 TH
5e90: 45 4e 20 53 71 6c 50 72 6f 63 5f 52 65 74 75 72  EN SqlProc_Retur
5ea0: 6e 28 30 29 0d 0a 20 20 20 20 20 20 20 45 4c 53  n(0)..       ELS
5eb0: 45 20 53 71 6c 50 72 6f 63 5f 52 65 74 75 72 6e  E SqlProc_Return
5ec0: 28 31 29 20 45 4e 44 20 46 52 4f 4d 20 6c 6f 6f  (1) END FROM loo
5ed0: 70 69 6e 67 3b 0d 0a 3c 2f 76 65 72 62 61 74 69  ping;..</verbati
5ee0: 6d 3e 0d 0a 54 68 69 73 20 73 61 6d 70 6c 65 20  m>..This sample 
5ef0: 53 51 4c 20 42 6f 64 79 20 28 3c 62 3e 6c 6f 6f  SQL Body (<b>loo
5f00: 70 2e 73 71 6c 3c 2f 62 3e 29 20 77 69 6c 6c 20  p.sql</b>) will 
5f10: 74 61 6b 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  take the followi
5f20: 6e 67 20 61 63 74 69 6f 6e 73 3a 0d 0a 3c 6f 6c  ng actions:..<ol
5f30: 3e 0d 0a 3c 6c 69 3e 66 69 72 73 74 20 69 74 20  >..<li>first it 
5f40: 77 69 6c 6c 20 74 72 79 20 74 6f 20 63 72 65 61  will try to crea
5f50: 74 65 20 61 20 74 61 62 6c 65 3b 20 69 66 20 74  te a table; if t
5f60: 68 65 20 74 61 62 6c 65 20 61 6c 72 65 64 79 20  he table alredy 
5f70: 65 78 69 73 74 73 20 61 6e 79 20 65 72 72 6f 72  exists any error
5f80: 20 77 69 6c 6c 20 62 65 20 73 69 6c 65 6e 74 6c   will be silentl
5f90: 79 20 69 67 6e 6f 72 65 64 2e 3c 2f 6c 69 3e 0d  y ignored.</li>.
5fa0: 0a 3c 6c 69 3e 74 68 65 6e 20 69 74 20 77 69 6c  .<li>then it wil
5fb0: 6c 20 49 4e 53 45 52 54 20 61 20 72 61 6e 64 6f  l INSERT a rando
5fc0: 6d 20 72 6f 77 20 69 6e 20 74 68 69 73 20 74 61  m row in this ta
5fd0: 62 6c 65 2e 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e 61  ble.</li>..<li>a
5fe0: 6e 64 20 66 69 6e 61 6c 6c 79 20 69 66 20 77 69  nd finally if wi
5ff0: 6c 6c 20 63 68 65 63 6b 20 68 6f 77 20 6d 61 6e  ll check how man
6000: 79 20 72 6f 77 73 20 68 61 76 65 20 62 65 65 6e  y rows have been
6010: 20 61 6c 72 65 61 64 79 20 69 6e 73 65 72 74 65   already inserte
6020: 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 3c  d in the table.<
6030: 62 72 3e 0d 0a 57 68 65 6e 20 74 68 65 20 70 72  br>..When the pr
6040: 65 64 65 66 69 6e 65 64 20 6c 69 6d 69 74 20 77  edefined limit w
6050: 69 6c 6c 20 62 65 20 72 65 61 63 68 65 64 2c 20  ill be reached, 
6060: 74 68 65 20 6c 6f 6f 70 20 77 69 6c 6c 20 74 65  the loop will te
6070: 72 6d 69 6e 61 74 65 2e 3c 2f 6c 69 3e 0d 0a 3c  rminate.</li>..<
6080: 2f 6f 6c 3e 0d 0a 3c 76 65 72 62 61 74 69 6d 3e  /ol>..<verbatim>
6090: 0d 0a 53 45 4c 45 43 54 20 53 71 6c 50 72 6f 63  ..SELECT SqlProc
60a0: 5f 45 78 65 63 75 74 65 4c 6f 6f 70 28 53 71 6c  _ExecuteLoop(Sql
60b0: 50 72 6f 63 5f 46 72 6f 6d 46 69 6c 65 28 27 2e  Proc_FromFile('.
60c0: 2f 6c 6f 6f 70 2e 73 71 6c 27 29 2c 20 27 40 4c  /loop.sql'), '@L
60d0: 49 4d 49 54 40 3d 31 30 30 30 27 29 3b 0d 0a 0d  IMIT@=1000');...
60e0: 0a 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 6c  .SELECT * FROM l
60f0: 6f 6f 70 69 6e 67 3b 0d 0a 3c 2f 76 65 72 62 61  ooping;..</verba
6100: 74 69 6d 3e 0d 0a 41 73 20 79 6f 75 20 63 61 6e  tim>..As you can
6110: 20 65 61 73 69 6c 79 20 63 68 65 63 6b 2c 20 74   easily check, t
6120: 68 65 20 69 74 65 72 61 74 69 76 65 20 65 78 65  he iterative exe
6130: 63 75 74 69 6f 6e 20 6f 66 20 3c 62 3e 6c 6f 6f  cution of <b>loo
6140: 70 2e 73 71 6c 3c 2f 62 3e 20 68 61 73 20 6a 75  p.sql</b> has ju
6150: 73 74 20 63 72 65 61 74 65 64 20 74 68 65 20 74  st created the t
6160: 61 72 67 65 74 20 74 61 62 6c 65 20 69 6e 73 65  arget table inse
6170: 72 74 69 6e 67 20 74 68 6f 75 73 61 6e 64 20 72  rting thousand r
6180: 6f 77 73 20 69 6e 74 6f 20 69 74 2e 0d 0a 3c 2f  ows into it...</
6190: 6c 69 3e 0d 0a 3c 6c 69 3e 0d 0a 3c 68 34 3e 48  li>..<li>..<h4>H
61a0: 61 6e 64 6c 69 6e 67 20 74 68 65 20 53 51 4c 20  andling the SQL 
61b0: 4c 6f 67 66 69 6c 65 3c 2f 68 34 3e 0d 0a 3c 76  Logfile</h4>..<v
61c0: 65 72 62 61 74 69 6d 3e 0d 0a 53 45 4c 45 43 54  erbatim>..SELECT
61d0: 20 53 71 6c 50 72 6f 63 5f 53 65 74 4c 6f 67 66   SqlProc_SetLogf
61e0: 69 6c 65 20 28 20 27 2f 68 6f 6d 65 2f 73 61 6e  ile ( '/home/san
61f0: 64 72 6f 2f 73 71 6c 5f 6c 6f 67 2e 74 78 74 27  dro/sql_log.txt'
6200: 20 29 3b 0d 0a 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 0d   );..-----..1...
6210: 0a 53 45 4c 45 43 54 20 53 71 6c 50 72 6f 63 5f  .SELECT SqlProc_
6220: 53 65 74 4c 6f 67 66 69 6c 65 20 28 20 27 2f 68  SetLogfile ( '/h
6230: 6f 6d 65 2f 73 61 6e 64 72 6f 2f 73 71 6c 5f 6c  ome/sandro/sql_l
6240: 6f 67 2e 74 78 74 27 2c 20 31 29 3b 0d 0a 2d 2d  og.txt', 1);..--
6250: 2d 2d 2d 0d 0a 31 0d 0a 0d 0a 53 45 4c 45 43 54  ---..1....SELECT
6260: 20 53 71 6c 50 72 6f 63 5f 53 65 74 4c 6f 67 66   SqlProc_SetLogf
6270: 69 6c 65 20 28 20 4e 55 4c 4c 20 29 3b 0d 0a 2d  ile ( NULL );..-
6280: 2d 2d 2d 2d 0d 0a 31 0d 0a 3c 2f 76 65 72 62 61  ----..1..</verba
6290: 74 69 6d 3e 0d 0a 59 6f 75 20 63 61 6e 20 75 73  tim>..You can us
62a0: 65 20 3c 62 3e 53 71 6c 50 72 6f 63 5f 53 65 74  e <b>SqlProc_Set
62b0: 4c 6f 67 66 69 6c 65 28 29 3c 2f 62 3e 20 69 6e  Logfile()</b> in
62c0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c 65   order to enable
62d0: 20 6f 72 20 64 69 73 61 62 6c 65 20 74 68 65 20   or disable the 
62e0: 53 51 4c 20 4c 6f 67 66 69 6c 65 3a 0d 0a 3c 75  SQL Logfile:..<u
62f0: 6c 3e 0d 0a 3c 6c 69 3e 74 68 65 20 66 69 72 73  l>..<li>the firs
6300: 74 20 66 6f 72 6d 20 28 73 69 6e 67 6c 65 20 61  t form (single a
6310: 72 67 75 6d 65 6e 74 29 20 6a 75 73 74 20 72 65  rgument) just re
6320: 71 75 69 72 65 73 20 74 6f 20 64 65 66 69 6e 65  quires to define
6330: 20 74 68 65 20 3c 62 3e 61 62 73 6f 6c 75 74 65   the <b>absolute
6340: 3c 2f 62 3e 20 6f 72 20 3c 62 3e 72 65 6c 61 74  </b> or <b>relat
6350: 69 76 65 20 70 61 74 68 6e 61 6d 65 3c 2f 62 3e  ive pathname</b>
6360: 20 6f 66 20 74 68 65 20 69 6e 74 65 6e 64 65 64   of the intended
6370: 20 4c 6f 67 66 69 6c 65 2e 3c 62 72 3e 0d 0a 41   Logfile.<br>..A
6380: 20 4c 6f 67 66 69 6c 65 20 64 65 66 69 6e 65 64   Logfile defined
6390: 20 69 6e 20 73 75 63 68 20 61 20 77 61 79 20 77   in such a way w
63a0: 69 6c 6c 20 61 6c 77 61 79 73 20 6f 70 65 72 61  ill always opera
63b0: 74 65 20 69 6e 20 3c 62 3e 54 72 75 6e 63 61 74  te in <b>Truncat
63c0: 65 3c 2f 62 3e 20 6d 6f 64 65 2e 3c 2f 6c 69 3e  e</b> mode.</li>
63d0: 0d 0a 3c 6c 69 3e 74 68 65 20 73 65 63 6f 6e 64  ..<li>the second
63e0: 20 66 6f 72 6d 20 28 74 77 6f 20 61 72 67 75 6d   form (two argum
63f0: 65 6e 74 73 29 20 73 75 70 70 6f 72 74 73 20 61  ents) supports a
6400: 20 66 75 72 74 68 65 72 20 3c 62 3e 6d 6f 64 65   further <b>mode
6410: 3c 2f 62 3e 20 61 72 67 75 6d 65 6e 74 3a 0d 0a  </b> argument:..
6420: 3c 75 6c 3e 0d 0a 3c 6c 69 3e 69 66 20 73 65 74  <ul>..<li>if set
6430: 20 74 6f 20 3c 62 3e 46 41 4c 53 45 3c 2f 62 3e   to <b>FALSE</b>
6440: 20 28 3c 62 3e 30 3c 2f 62 3e 2c 20 64 65 66 61   (<b>0</b>, defa
6450: 75 6c 74 20 76 61 6c 75 65 29 20 74 68 65 20 4c  ult value) the L
6460: 6f 67 66 69 6c 65 20 77 69 6c 6c 20 6f 70 65 72  ogfile will oper
6470: 61 74 65 20 69 6e 20 3c 62 3e 54 72 75 6e 63 61  ate in <b>Trunca
6480: 74 65 3c 2f 62 3e 20 6d 6f 64 65 2e 3c 2f 6c 69  te</b> mode.</li
6490: 3e 0d 0a 3c 6c 69 3e 69 66 20 73 65 74 20 74 6f  >..<li>if set to
64a0: 20 3c 62 3e 54 52 55 45 3c 2f 62 3e 20 28 61 6e   <b>TRUE</b> (an
64b0: 79 20 6f 74 68 65 72 20 76 61 6c 75 65 20 64 69  y other value di
64c0: 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 3c 62 3e  fferent from <b>
64d0: 30 3c 2f 62 3e 29 20 74 68 65 20 4c 6f 67 66 69  0</b>) the Logfi
64e0: 6c 65 20 77 69 6c 6c 20 6f 70 65 72 61 74 65 20  le will operate 
64f0: 69 6e 20 3c 62 3e 41 70 70 65 6e 64 3c 2f 62 3e  in <b>Append</b>
6500: 20 6d 6f 64 65 2e 3c 2f 6c 69 3e 0d 0a 3c 2f 75   mode.</li>..</u
6510: 6c 3e 0d 0a 3c 6c 69 3e 66 69 6e 61 6c 6c 79 2c  l>..<li>finally,
6520: 20 79 6f 75 20 63 61 6e 20 70 61 73 73 20 61 20   you can pass a 
6530: 3c 62 3e 4e 55 4c 4c 3c 2f 62 3e 20 70 61 74 68  <b>NULL</b> path
6540: 20 61 72 67 75 6d 65 6e 74 20 69 6e 20 6f 72 64   argument in ord
6550: 65 72 20 74 6f 20 69 6d 6d 65 64 69 61 74 65 6c  er to immediatel
6560: 79 20 64 69 73 61 62 6c 65 20 74 68 65 20 4c 6f  y disable the Lo
6570: 67 66 69 6c 65 2e 3c 2f 6c 69 3e 0d 0a 3c 2f 75  gfile.</li>..</u
6580: 6c 3e 0d 0a 3c 76 65 72 62 61 74 69 6d 3e 0d 0a  l>..<verbatim>..
6590: 53 45 4c 45 43 54 20 53 71 6c 50 72 6f 63 5f 47  SELECT SqlProc_G
65a0: 65 74 4c 6f 67 66 69 6c 65 28 29 3b 0d 0a 2d 2d  etLogfile();..--
65b0: 2d 2d 2d 0d 0a 2f 68 6f 6d 65 2f 73 61 6e 64 72  ---../home/sandr
65c0: 6f 2f 73 71 6c 5f 6c 6f 67 2e 74 78 74 0d 0a 0d  o/sql_log.txt...
65d0: 0a 53 45 4c 45 43 54 20 53 71 6c 50 72 6f 63 5f  .SELECT SqlProc_
65e0: 47 65 74 4c 6f 67 66 69 6c 65 28 29 3b 0d 0a 2d  GetLogfile();..-
65f0: 2d 2d 2d 2d 0d 0a 4e 55 4c 4c 0d 0a 3c 2f 76 65  ----..NULL..</ve
6600: 72 62 61 74 69 6d 3e 0d 0a 59 6f 75 20 63 61 6e  rbatim>..You can
6610: 20 75 73 65 20 3c 62 3e 53 71 6c 50 72 6f 63 5f   use <b>SqlProc_
6620: 47 65 74 4c 6f 67 66 69 6c 65 28 29 3c 2f 62 3e  GetLogfile()</b>
6630: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 68 65   in order to che
6640: 63 6b 20 69 66 20 74 68 65 20 63 75 72 72 65 6e  ck if the curren
6650: 74 20 44 42 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20  t DB-connection 
6660: 69 73 20 75 73 69 6e 67 20 61 20 4c 6f 67 66 69  is using a Logfi
6670: 6c 65 20 6f 72 20 6e 6f 74 2e 3c 62 72 3e 3c 62  le or not.<br><b
6680: 72 3e 0d 0a 3c 74 61 62 6c 65 20 62 67 63 6f 6c  r>..<table bgcol
6690: 6f 72 3d 22 23 66 38 66 38 64 38 22 20 63 65 6c  or="#f8f8d8" cel
66a0: 6c 70 61 64 64 69 6e 67 3d 22 36 22 20 63 65 6c  lpadding="6" cel
66b0: 6c 73 70 61 63 69 6e 67 3d 22 38 22 3e 3c 74 72  lspacing="8"><tr
66c0: 3e 3c 74 64 3e 0d 0a 3c 75 3e 4e 6f 74 65 3c 2f  ><td>..<u>Note</
66d0: 75 3e 3a 20 74 68 65 20 4c 6f 67 66 69 6c 65 20  u>: the Logfile 
66e0: 73 65 74 74 69 6e 67 20 69 73 20 70 65 72 6d 61  setting is perma
66f0: 6e 65 6e 74 20 6f 6e 20 61 20 70 65 72 2d 63 6f  nent on a per-co
6700: 6e 6e 65 63 74 69 6f 6e 20 62 61 73 69 73 2e 0d  nnection basis..
6710: 0a 3c 75 6c 3e 0d 0a 3c 6c 69 3e 61 6e 79 20 6e  .<ul>..<li>any n
6720: 65 77 20 44 42 2d 63 6f 6e 6e 65 63 74 69 6f 6e  ew DB-connection
6730: 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 74 61   will always sta
6740: 72 74 20 62 79 20 6b 65 65 70 69 6e 67 20 74 68  rt by keeping th
6750: 65 20 4c 6f 67 66 69 6c 65 20 64 69 73 61 62 6c  e Logfile disabl
6760: 65 64 2e 3c 62 72 3e 0d 0a 59 6f 75 20 61 72 65  ed.<br>..You are
6770: 20 61 6c 77 61 79 73 20 72 65 71 75 69 72 65 64   always required
6780: 20 74 6f 20 70 65 72 66 6f 72 6d 20 61 6e 20 65   to perform an e
6790: 78 70 6c 69 63 69 74 20 63 61 6c 6c 20 74 6f 20  xplicit call to 
67a0: 3c 62 3e 53 71 6c 50 72 6f 63 5f 53 65 74 4c 6f  <b>SqlProc_SetLo
67b0: 67 66 69 6c 65 28 29 3c 2f 62 3e 20 69 6e 20 6f  gfile()</b> in o
67c0: 72 64 65 72 20 74 6f 20 65 66 66 65 63 74 69 76  rder to effectiv
67d0: 65 6c 79 20 65 6e 61 62 6c 65 20 61 20 4c 6f 67  ely enable a Log
67e0: 66 69 6c 65 2e 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e  file.</li>..<li>
67f0: 6f 6e 63 65 20 61 20 4c 6f 67 66 69 6c 65 20 68  once a Logfile h
6800: 61 73 20 62 65 65 6e 20 65 6e 61 62 6c 65 64 20  as been enabled 
6810: 69 74 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65  it will continue
6820: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
6830: 63 75 72 72 65 6e 74 20 44 42 2d 63 6f 6e 6e 65  current DB-conne
6840: 63 74 69 6f 6e 20 64 75 72 69 6e 67 20 69 74 73  ction during its
6850: 20 6c 69 66 65 73 70 61 6e 2c 20 69 66 20 6e 6f   lifespan, if no
6860: 74 20 62 65 65 6e 20 65 78 70 6c 69 63 69 74 6c  t been explicitl
6870: 79 20 64 69 73 61 62 6c 65 64 2e 3c 2f 6c 69 3e  y disabled.</li>
6880: 0d 0a 3c 6c 69 3e 4c 6f 67 66 69 6c 65 20 73 65  ..<li>Logfile se
6890: 74 74 69 6e 67 73 20 61 72 65 20 73 74 72 69 63  ttings are stric
68a0: 74 6c 79 20 63 6f 6e 66 69 6e 65 64 20 77 69 74  tly confined wit
68b0: 68 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74  hing the current
68c0: 20 44 42 2d 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20   DB-connection, 
68d0: 61 6e 64 20 77 69 6c 6c 20 6e 65 76 65 72 20 61  and will never a
68e0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 65 20  utomatically be 
68f0: 63 6f 6e 74 69 6e 75 65 64 20 69 6e 20 61 6e 79  continued in any
6900: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 6e 65   following conne
6910: 63 74 69 6f 6e 73 2e 3c 2f 6c 69 3e 0d 0a 3c 2f  ctions.</li>..</
6920: 75 6c 3e 0d 0a 3c 2f 74 64 3e 3c 2f 74 72 3e 3c  ul>..</td></tr><
6930: 2f 74 61 62 6c 65 3e 0d 0a 3c 2f 6c 69 3e 0d 0a  /table>..</li>..
6940: 3c 2f 6f 6c 3e 0d 0a 3c 62 72 3e 3c 68 72 3e 0d  </ol>..<br><hr>.
6950: 0a 3c 68 32 3e 54 75 74 6f 72 69 61 6c 20 23 31  .<h2>Tutorial #1
6960: 3c 2f 68 32 3e 0d 0a 3c 74 61 62 6c 65 20 62 67  </h2>..<table bg
6970: 63 6f 6c 6f 72 3d 22 23 66 38 66 38 64 38 22 20  color="#f8f8d8" 
6980: 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 36 22 20  cellpadding="6" 
6990: 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 38 22 3e  cellspacing="8">
69a0: 3c 74 72 3e 3c 74 64 3e 0d 0a 41 6c 6c 20 74 68  <tr><td>..All th
69b0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 75 74 6f  e following tuto
69c0: 72 69 61 6c 73 20 61 72 65 20 62 61 73 65 64 20  rials are based 
69d0: 6f 6e 20 74 68 65 20 73 61 6d 65 20 73 61 6d 70  on the same samp
69e0: 6c 65 20 64 61 74 61 62 61 73 65 2c 20 77 68 69  le database, whi
69f0: 63 68 20 73 68 6f 75 6c 64 20 62 65 20 3c 61 20  ch should be <a 
6a00: 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77  href="http://www
6a10: 2e 67 61 69 61 2d 67 69 73 2e 69 74 2f 67 61 69  .gaia-gis.it/gai
6a20: 61 2d 73 69 6e 73 2f 73 70 5f 73 61 6d 70 6c 65  a-sins/sp_sample
6a30: 5f 64 62 2e 37 7a 22 3e 64 6f 77 6e 6c 6f 61 64  _db.7z">download
6a40: 65 64 3c 2f 61 3e 20 62 65 66 6f 72 65 20 63 6f  ed</a> before co
6a50: 6e 74 69 6e 75 69 6e 67 2e 0d 0a 3c 2f 74 64 3e  ntinuing...</td>
6a60: 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c 62 72  </tr></table><br
6a70: 3e 0d 0a 41 73 20 79 6f 75 20 63 61 6e 20 73 65  >..As you can se
6a80: 65 2c 20 74 68 69 73 20 64 61 74 61 62 61 73 65  e, this database
6a90: 20 63 6f 6e 74 61 69 6e 73 20 74 68 72 65 65 20   contains three 
6aa0: 53 70 61 74 69 61 6c 20 54 61 62 6c 65 73 20 72  Spatial Tables r
6ab0: 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
6ac0: 3c 62 3e 3c 69 3e 41 64 6d 69 6e 69 73 74 72 61  <b><i>Administra
6ad0: 74 69 76 65 20 42 6f 75 6e 64 61 72 69 65 73 3c  tive Boundaries<
6ae0: 2f 69 3e 3c 2f 62 3e 20 6f 66 20 61 6c 6c 20 49  /i></b> of all I
6af0: 74 61 6c 69 61 6e 20 4d 75 6e 69 63 69 70 61 6c  talian Municipal
6b00: 69 74 69 65 73 20 61 73 20 6f 66 66 69 63 69 61  ities as officia
6b10: 6c 6c 79 20 64 65 74 65 72 6d 69 6e 65 64 20 62  lly determined b
6b20: 79 20 3c 61 20 68 72 65 66 3d 22 68 74 74 70 73  y <a href="https
6b30: 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
6b40: 6f 72 67 2f 77 69 6b 69 2f 4e 61 74 69 6f 6e 61  org/wiki/Nationa
6b50: 6c 5f 49 6e 73 74 69 74 75 74 65 5f 6f 66 5f 53  l_Institute_of_S
6b60: 74 61 74 69 73 74 69 63 73 5f 28 49 74 61 6c 79  tatistics_(Italy
6b70: 29 22 3e 49 53 54 41 54 3c 2f 61 3e 3a 0d 0a 3c  )">ISTAT</a>:..<
6b80: 75 6c 3e 0d 0a 3c 6c 69 3e 74 68 65 72 65 20 61  ul>..<li>there a
6b90: 72 65 20 74 68 72 65 65 20 64 69 66 66 65 72 65  re three differe
6ba0: 6e 74 20 74 61 62 6c 65 73 2c 20 65 61 63 68 20  nt tables, each 
6bb0: 6f 6e 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  one correspondin
6bc0: 67 20 74 6f 20 61 20 73 70 65 63 69 66 69 63 20  g to a specific 
6bd0: 4e 61 74 69 6f 6e 61 6c 20 43 65 6e 73 75 73 20  National Census 
6be0: 28 79 65 61 72 73 20 31 39 39 31 2c 20 32 30 30  (years 1991, 200
6bf0: 31 20 61 6e 64 20 32 30 31 31 20 61 72 65 20 61  1 and 2011 are a
6c00: 76 61 69 6c 61 62 6c 65 29 2e 3c 2f 6c 69 3e 0d  vailable).</li>.
6c10: 0a 3c 6c 69 3e 61 6c 6c 20 74 68 72 65 65 20 74  .<li>all three t
6c20: 61 62 6c 65 73 20 68 61 76 65 20 65 78 61 63 74  ables have exact
6c30: 6c 79 20 74 68 65 20 73 61 6d 65 20 6c 61 79 6f  ly the same layo
6c40: 75 74 2e 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e 41 64  ut.</li>..<li>Ad
6c50: 6d 69 6e 69 73 74 72 61 74 69 76 65 20 42 6f 75  ministrative Bou
6c60: 6e 64 61 72 69 65 73 20 61 72 65 20 61 6c 77 61  ndaries are alwa
6c70: 79 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 61  ys represented a
6c80: 73 20 4d 75 6c 74 69 50 6f 6c 79 67 6f 6e 73 20  s MultiPolygons 
6c90: 28 53 72 69 64 3d 33 32 36 33 32 29 2e 0d 0a 3c  (Srid=32632)...<
6ca0: 2f 75 6c 3e 3c 62 72 3e 0d 0a 3c 74 61 62 6c 65  /ul><br>..<table
6cb0: 20 62 67 63 6f 6c 6f 72 3d 22 23 66 38 66 38 64   bgcolor="#f8f8d
6cc0: 38 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  8" cellpadding="
6cd0: 36 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22  6" cellspacing="
6ce0: 38 22 3e 3c 74 72 3e 3c 74 64 3e 0d 0a 3c 68 34  8"><tr><td>..<h4
6cf0: 3e 54 68 65 20 50 72 6f 62 6c 65 6d 3c 2f 68 34  >The Problem</h4
6d00: 3e 0d 0a 57 65 27 6c 6c 20 69 6d 70 6c 65 6d 65  >..We'll impleme
6d10: 6e 74 20 61 20 3c 62 3e 50 72 6f 63 65 64 75 72  nt a <b>Procedur
6d20: 65 3c 2f 62 3e 20 69 6e 74 65 6e 64 65 64 20 74  e</b> intended t
6d30: 6f 20 65 78 70 6f 72 74 20 73 65 6c 65 63 74 65  o export selecte
6d40: 64 20 53 68 61 70 65 66 69 6c 65 73 2e 0d 0a 3c  d Shapefiles...<
6d50: 75 6c 3e 0d 0a 3c 6c 69 3e 54 68 65 20 43 65 6e  ul>..<li>The Cen
6d60: 73 75 73 20 59 65 61 72 20 6d 75 73 74 20 62 65  sus Year must be
6d70: 20 66 72 65 65 6c 79 20 73 65 6c 65 63 74 61 62   freely selectab
6d80: 6c 65 2e 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e 41 20  le.</li>..<li>A 
6d90: 72 65 71 75 69 72 65 64 20 66 65 61 74 75 72 65  required feature
6da0: 20 69 73 20 61 6c 6c 6f 77 69 6e 67 20 65 69 74   is allowing eit
6db0: 68 65 72 20 66 69 6c 74 65 72 69 6e 67 20 61 20  her filtering a 
6dc0: 73 69 6e 67 6c 65 20 4d 75 6e 69 63 69 70 61 6c  single Municipal
6dd0: 69 74 79 20 6f 72 20 6c 69 73 74 69 6e 67 20 61  ity or listing a
6de0: 6c 6c 20 4d 75 6e 69 63 69 70 61 6c 69 74 69 65  ll Municipalitie
6df0: 73 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74  s belonging to t
6e00: 68 65 20 61 20 50 72 6f 76 69 6e 63 65 20 6f 72  he a Province or
6e10: 20 52 65 67 69 6f 6e 2e 3c 2f 6c 69 3e 0d 0a 3c   Region.</li>..<
6e20: 6c 69 3e 52 65 70 72 6f 6a 65 63 74 69 6e 67 20  li>Reprojecting 
6e30: 74 6f 20 73 6f 6d 65 20 61 6c 74 65 72 6e 61 74  to some alternat
6e40: 69 76 65 20 53 52 49 44 20 77 69 6c 6c 20 62 65  ive SRID will be
6e50: 20 61 20 73 75 70 70 6f 72 74 65 64 20 66 65 61   a supported fea
6e60: 74 75 72 65 2e 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e  ture.</li>..<li>
6e70: 57 68 69 6c 65 20 64 6f 69 6e 67 20 61 6c 6c 20  While doing all 
6e80: 74 68 69 73 20 77 65 27 6c 6c 20 6f 62 76 69 6f  this we'll obvio
6e90: 75 73 6c 79 20 74 72 79 20 74 6f 20 74 61 6b 65  usly try to take
6ea0: 20 66 75 6c 6c 20 61 64 76 61 6e 74 61 67 65 20   full advantage 
6eb0: 6f 66 20 75 73 69 6e 67 20 3c 62 3e 56 61 72 69  of using <b>Vari
6ec0: 61 62 6c 65 73 3c 2f 62 3e 20 74 6f 20 6d 61 6b  ables</b> to mak
6ed0: 65 20 74 68 65 20 50 72 6f 63 65 64 75 72 65 20  e the Procedure 
6ee0: 61 73 20 67 65 6e 65 72 69 63 20 61 6e 64 20 66  as generic and f
6ef0: 6c 65 78 69 62 6c 65 20 61 73 20 70 6f 73 73 69  lexible as possi
6f00: 62 6c 65 2e 3c 2f 6c 69 3e 0d 0a 3c 2f 75 6c 3e  ble.</li>..</ul>
6f10: 0d 0a 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61  ..</td></tr></ta
6f20: 62 6c 65 3e 3c 62 72 3e 0d 0a 3c 76 65 72 62 61  ble><br>..<verba
6f30: 74 69 6d 3e 0d 0a 2d 2d 0d 0a 2d 2d 20 72 65 6d  tim>..--..-- rem
6f40: 6f 76 69 6e 67 20 74 68 65 20 77 6f 72 6b 20 74  oving the work t
6f50: 61 62 6c 65 20 28 6a 75 73 74 20 69 6e 20 63 61  able (just in ca
6f60: 73 65 20 69 74 20 61 6c 72 65 61 64 79 20 65 78  se it already ex
6f70: 69 73 74 73 29 0d 0a 2d 2d 0d 0a 53 45 4c 45 43  ists)..--..SELEC
6f80: 54 20 44 72 6f 70 47 65 6f 54 61 62 6c 65 28 27  T DropGeoTable('
6f90: 74 72 61 6e 73 69 65 6e 74 5f 74 61 62 6c 65 27  transient_table'
6fa0: 29 3b 0d 0a 0d 0a 2d 2d 0d 0a 2d 2d 20 69 6e 73  );....--..-- ins
6fb0: 65 72 74 69 6e 67 20 73 65 6c 65 63 74 65 64 20  erting selected 
6fc0: 64 61 74 61 20 69 6e 74 6f 20 74 68 65 20 77 6f  data into the wo
6fd0: 72 6b 20 74 61 62 6c 65 0d 0a 2d 2d 0d 0a 43 52  rk table..--..CR
6fe0: 45 41 54 45 20 54 41 42 4c 45 20 74 72 61 6e 73  EATE TABLE trans
6ff0: 69 65 6e 74 5f 74 61 62 6c 65 20 41 53 0d 0a 53  ient_table AS..S
7000: 45 4c 45 43 54 20 69 64 2c 20 69 73 74 61 74 2c  ELECT id, istat,
7010: 20 6e 61 6d 65 2c 20 70 72 6f 76 69 6e 63 65 2c   name, province,
7020: 20 72 65 67 69 6f 6e 2c 20 53 54 5f 54 72 61 6e   region, ST_Tran
7030: 73 66 6f 72 6d 28 67 65 6f 6d 2c 20 40 73 72 69  sform(geom, @sri
7040: 64 40 29 20 41 53 20 67 65 6f 6d 0d 0a 46 52 4f  d@) AS geom..FRO
7050: 4d 20 6d 75 6e 69 63 69 70 61 6c 69 74 69 65 73  M municipalities
7060: 5f 40 79 65 61 72 40 0d 0a 57 48 45 52 45 20 28  _@year@..WHERE (
7070: 55 70 70 65 72 28 6e 61 6d 65 29 20 3d 20 55 70  Upper(name) = Up
7080: 70 65 72 28 27 40 6d 75 6e 69 63 69 70 61 6c 69  per('@municipali
7090: 74 79 40 27 29 20 4f 52 20 55 70 70 65 72 28 70  ty@') OR Upper(p
70a0: 72 6f 76 69 6e 63 65 29 20 3d 20 55 70 70 65 72  rovince) = Upper
70b0: 28 27 40 70 72 6f 76 69 6e 63 65 40 27 29 20 4f  ('@province@') O
70c0: 52 20 55 70 70 65 72 28 72 65 67 69 6f 6e 29 20  R Upper(region) 
70d0: 3d 20 55 70 70 65 72 28 27 40 72 65 67 69 6f 6e  = Upper('@region
70e0: 40 27 29 29 3b 0d 0a 0d 0a 2d 2d 0d 0a 2d 2d 20  @'));....--..-- 
70f0: 70 72 6f 70 65 72 6c 79 20 72 65 63 6f 76 65 72  properly recover
7100: 69 6e 67 20 74 68 65 20 77 6f 72 6b 20 74 61 62  ing the work tab
7110: 6c 65 0d 0a 2d 2d 0d 0a 53 45 4c 45 43 54 20 52  le..--..SELECT R
7120: 65 63 6f 76 65 72 47 65 6f 6d 65 74 72 79 43 6f  ecoverGeometryCo
7130: 6c 75 6d 6e 28 27 74 72 61 6e 73 69 65 6e 74 5f  lumn('transient_
7140: 74 61 62 6c 65 27 2c 20 27 67 65 6f 6d 27 2c 20  table', 'geom', 
7150: 40 73 72 69 64 40 2c 20 27 4d 55 4c 54 49 50 4f  @srid@, 'MULTIPO
7160: 4c 59 47 4f 4e 27 2c 20 27 58 59 27 29 3b 0d 0a  LYGON', 'XY');..
7170: 0d 0a 2d 2d 0d 0a 2d 2d 20 65 78 70 6f 72 74 69  ..--..-- exporti
7180: 6e 67 20 66 72 6f 6d 20 74 68 65 20 77 6f 72 6b  ng from the work
7190: 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20   table into the 
71a0: 53 68 61 70 65 66 69 6c 65 0d 0a 2d 2d 0d 0a 53  Shapefile..--..S
71b0: 45 4c 45 43 54 20 45 78 70 6f 72 74 53 68 70 28  ELECT ExportShp(
71c0: 27 74 72 61 6e 73 69 65 6e 74 5f 74 61 62 6c 65  'transient_table
71d0: 27 2c 20 27 67 65 6f 6d 27 2c 20 27 40 73 68 70  ', 'geom', '@shp
71e0: 5f 70 61 74 68 40 27 2c 20 27 43 50 31 32 35 32  _path@', 'CP1252
71f0: 27 29 3b 0d 0a 0d 0a 2d 2d 0d 0a 2d 2d 20 72 65  ');....--..-- re
7200: 6d 6f 76 69 6e 67 20 74 68 65 20 77 6f 72 6b 20  moving the work 
7210: 74 61 62 6c 65 0d 0a 2d 2d 0d 0a 53 45 4c 45 43  table..--..SELEC
7220: 54 20 44 72 6f 70 47 65 6f 54 61 62 6c 65 28 27  T DropGeoTable('
7230: 74 72 61 6e 73 69 65 6e 74 5f 74 61 62 6c 65 27  transient_table'
7240: 29 3b 0d 0a 3c 2f 76 65 72 62 61 74 69 6d 3e 0d  );..</verbatim>.
7250: 0a 41 73 20 79 6f 75 20 63 61 6e 20 73 65 65 20  .As you can see 
7260: 74 68 65 20 70 72 6f 70 6f 73 65 64 20 69 6d 70  the proposed imp
7270: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 62  lementation is b
7280: 61 73 69 63 61 6c 6c 79 20 73 69 6d 70 6c 65 2e  asically simple.
7290: 20 4e 6f 77 20 79 6f 75 20 73 69 6d 70 6c 79 20   Now you simply 
72a0: 68 61 76 65 20 74 6f 20 3c 62 3e 63 75 74 26 70  have to <b>cut&p
72b0: 61 73 74 65 3c 2f 62 3e 20 74 68 65 20 61 62 6f  aste</b> the abo
72c0: 76 65 20 53 51 4c 20 62 6f 64 79 20 73 61 76 69  ve SQL body savi
72d0: 6e 67 20 69 74 20 69 6e 74 6f 20 61 20 66 69 6c  ng it into a fil
72e0: 65 20 6e 61 6d 65 64 20 3c 62 3e 74 65 73 74 5f  e named <b>test_
72f0: 73 70 2e 74 78 74 3c 2f 62 3e 20 66 6f 72 20 66  sp.txt</b> for f
7300: 75 72 74 68 65 72 20 75 73 61 67 65 2e 3c 62 72  urther usage.<br
7310: 3e 3c 62 72 3e 0d 0a 46 65 77 20 69 6e 74 65 72  ><br>..Few inter
7320: 65 73 74 69 6e 67 20 64 65 74 61 69 6c 73 20 77  esting details w
7330: 6f 72 74 68 20 62 65 69 6e 67 20 65 78 70 6c 61  orth being expla
7340: 69 6e 65 64 3a 0d 0a 3c 75 6c 3e 0d 0a 3c 6c 69  ined:..<ul>..<li
7350: 3e 56 61 72 69 61 62 6c 65 20 3c 62 3e 40 79 65  >Variable <b>@ye
7360: 61 72 40 3c 2f 62 3e 20 69 73 20 69 6e 74 65 6e  ar@</b> is inten
7370: 64 65 64 20 74 6f 20 73 65 6c 65 63 74 20 77 68  ded to select wh
7380: 69 63 68 20 73 70 65 63 69 66 69 63 20 53 70 61  ich specific Spa
7390: 74 69 61 6c 20 54 61 62 6c 65 20 77 69 6c 6c 20  tial Table will 
73a0: 62 65 20 71 75 65 72 69 65 64 2e 3c 2f 6c 69 3e  be queried.</li>
73b0: 0d 0a 3c 6c 69 3e 56 61 72 69 61 62 6c 65 20 3c  ..<li>Variable <
73c0: 62 3e 40 73 72 69 64 40 3c 2f 62 3e 20 69 73 20  b>@srid@</b> is 
73d0: 69 6e 74 65 6e 64 65 64 20 74 6f 20 73 70 65 63  intended to spec
73e0: 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20 53  ify the output S
73f0: 52 49 44 2e 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e 56  RID.</li>..<li>V
7400: 61 72 69 61 62 6c 65 20 3c 62 3e 40 73 68 70 5f  ariable <b>@shp_
7410: 70 61 74 68 40 3c 2f 62 3e 20 69 73 20 69 6e 74  path@</b> is int
7420: 65 6e 64 65 64 20 74 6f 20 73 70 65 63 69 66 79  ended to specify
7430: 20 74 68 65 20 70 61 74 68 6e 61 6d 65 20 6f 66   the pathname of
7440: 20 74 68 65 20 6f 75 74 70 75 74 20 53 68 61 70   the output Shap
7450: 65 66 69 6c 65 2e 3c 2f 6c 69 3e 0d 0a 3c 6c 69  efile.</li>..<li
7460: 3e 56 61 72 69 61 62 6c 65 73 20 3c 62 3e 40 6d  >Variables <b>@m
7470: 75 6e 69 63 69 70 61 6c 69 74 79 40 3c 2f 62 3e  unicipality@</b>
7480: 2c 20 3c 62 3e 40 70 72 6f 76 69 6e 63 65 40 3c  , <b>@province@<
7490: 2f 62 3e 20 61 6e 64 20 3c 62 3e 40 72 65 67 69  /b> and <b>@regi
74a0: 6f 6e 40 3c 2f 62 3e 20 61 72 65 20 69 6e 74 65  on@</b> are inte
74b0: 6e 64 65 64 20 74 6f 20 73 70 65 63 69 66 79 20  nded to specify 
74c0: 74 68 65 20 69 6e 74 65 6e 64 65 64 20 66 69 6c  the intended fil
74d0: 74 65 72 69 6e 67 20 63 72 69 74 65 72 69 61 2e  tering criteria.
74e0: 3c 62 72 3e 0d 0a 54 68 69 73 20 69 73 20 61 20  <br>..This is a 
74f0: 6c 69 74 74 6c 65 20 62 69 74 20 74 72 69 63 6b  little bit trick
7500: 79 2c 20 73 6f 20 77 65 27 6c 6c 20 67 6f 20 69  y, so we'll go i
7510: 6e 20 66 75 72 74 68 65 72 20 64 65 70 74 68 3a  n further depth:
7520: 0d 0a 3c 75 6c 3e 0d 0a 3c 6c 69 3e 54 68 65 73  ..<ul>..<li>Thes
7530: 65 20 56 61 72 69 61 62 6c 65 73 20 61 72 65 20  e Variables are 
7540: 65 78 70 65 63 74 65 64 20 74 6f 20 62 65 20 61  expected to be a
7550: 63 74 75 61 6c 6c 79 20 72 65 70 6c 61 63 65 64  ctually replaced
7560: 20 62 79 20 3c 62 3e 74 65 78 74 20 73 74 72 69   by <b>text stri
7570: 6e 67 20 76 61 6c 75 65 73 3c 2f 62 3e 3b 20 73  ng values</b>; s
7580: 6f 20 77 65 27 76 65 20 63 6f 6e 73 69 73 74 65  o we've consiste
7590: 6e 74 6c 79 20 3c 62 3e 73 69 6e 67 6c 65 2d 71  ntly <b>single-q
75a0: 75 6f 74 65 64 3c 2f 62 3e 20 74 68 65 20 76 61  uoted</b> the va
75b0: 72 69 61 62 6c 65 20 73 79 6d 62 6f 6c 2c 20 73  riable symbol, s
75c0: 6f 20 74 6f 20 61 6c 6c 6f 77 20 66 6f 72 20 61  o to allow for a
75d0: 6e 20 65 61 73 69 65 72 20 76 61 6c 75 65 20 72  n easier value r
75e0: 65 70 6c 61 63 65 6d 65 6e 74 2e 3c 2f 6c 69 3e  eplacement.</li>
75f0: 0d 0a 3c 6c 69 3e 57 65 20 61 72 65 20 73 79 73  ..<li>We are sys
7600: 74 65 6d 61 74 69 63 61 6c 6c 79 20 75 73 69 6e  tematically usin
7610: 67 20 74 68 65 20 3c 62 3e 55 70 70 65 72 28 29  g the <b>Upper()
7620: 3c 2f 62 3e 20 66 75 6e 63 74 69 6f 6e 20 73 69  </b> function si
7630: 6d 70 6c 79 20 62 65 63 61 75 73 65 20 50 72 6f  mply because Pro
7640: 76 69 6e 63 65 20 61 6e 64 20 52 65 67 69 6f 6e  vince and Region
7650: 20 6e 61 6d 65 73 20 61 72 65 20 61 6c 6c 2d 75   names are all-u
7660: 70 70 65 72 63 61 73 65 20 69 6e 20 79 65 61 72  ppercase in year
7670: 73 20 31 39 39 31 20 61 6e 64 20 32 30 30 31 20  s 1991 and 2001 
7680: 62 75 74 20 6e 6f 74 20 66 6f 72 20 74 68 65 20  but not for the 
7690: 79 65 61 72 20 32 30 31 31 2e 3c 62 72 3e 0d 0a  year 2011.<br>..
76a0: 53 79 73 74 65 6d 61 74 69 63 61 6c 6c 79 20 75  Systematically u
76b0: 73 69 6e 67 20 55 70 70 65 72 28 29 20 77 69 6c  sing Upper() wil
76c0: 6c 20 69 6e 73 75 72 65 20 63 6f 6e 73 69 73 74  l insure consist
76d0: 65 6e 74 65 6e 63 79 20 6f 66 20 61 6c 6c 20 6e  entency of all n
76e0: 61 6d 65 73 2e 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e  ames.</li>..<li>
76f0: 57 65 20 61 72 65 20 75 73 69 6e 67 20 74 68 72  We are using thr
7700: 65 65 20 73 65 70 61 72 61 74 65 20 63 6f 6d 70  ee separate comp
7710: 61 72 69 73 6f 6e 73 20 28 6f 6e 65 20 66 6f 72  arisons (one for
7720: 20 4d 75 6e 69 63 69 70 61 6c 69 74 79 2c 20 6f   Municipality, o
7730: 6e 65 20 66 6f 72 20 50 72 6f 76 69 6e 63 65 20  ne for Province 
7740: 61 6e 64 20 6f 6e 65 20 66 6f 72 20 52 65 67 69  and one for Regi
7750: 6f 6e 29 20 63 6f 6e 6e 65 63 74 65 64 20 62 79  on) connected by
7760: 20 3c 62 3e 4f 52 3c 2f 62 3e 20 6c 6f 67 69 63   <b>OR</b> logic
7770: 61 6c 20 6f 70 65 72 61 74 6f 72 73 20 73 6f 20  al operators so 
7780: 74 6f 20 6d 61 6b 65 20 69 74 20 70 6f 73 73 69  to make it possi
7790: 62 6c 65 20 62 79 20 73 70 65 63 69 66 79 69 6e  ble by specifyin
77a0: 67 20 6a 75 73 74 20 61 20 73 69 6e 67 6c 65 20  g just a single 
77b0: 6f 72 20 6d 6f 72 65 20 66 69 6c 74 65 72 20 63  or more filter c
77c0: 6c 61 75 73 65 73 2e 3c 62 72 3e 0d 0a 3c 75 3e  lauses.<br>..<u>
77d0: 52 65 63 61 6c 6c 3c 2f 75 3e 3a 20 75 6e 61 73  Recall</u>: unas
77e0: 73 69 67 6e 65 64 20 56 61 72 69 61 62 6c 65 73  signed Variables
77f0: 20 77 69 6c 6c 20 64 65 66 61 75 6c 74 20 74 6f   will default to
7800: 20 4e 55 4c 4c 3b 20 73 6f 20 62 79 20 6a 75 73   NULL; so by jus
7810: 74 20 64 65 63 6c 61 72 69 6e 67 20 0d 0a 3c 62  t declaring ..<b
7820: 3e 40 70 72 6f 76 69 6e 63 65 40 3d 41 72 65 7a  >@province@=Arez
7830: 7a 6f 3c 2f 62 3e 20 77 65 27 6c 6c 20 74 68 65  zo</b> we'll the
7840: 6e 20 67 65 74 20 61 20 3c 62 3e 3c 69 3e 63 6f  n get a <b><i>co
7850: 6f 6b 65 64 3c 2f 69 3e 3c 2f 62 3e 20 57 48 45  oked</i></b> WHE
7860: 52 45 20 63 6c 61 75 73 65 20 6c 69 6b 65 20 74  RE clause like t
7870: 68 69 73 3a 0d 0a 3c 76 65 72 62 61 74 69 6d 3e  his:..<verbatim>
7880: 0d 0a 57 48 45 52 45 20 28 55 70 70 65 72 28 6e  ..WHERE (Upper(n
7890: 61 6d 65 29 20 3d 20 55 70 70 65 72 28 27 4e 55  ame) = Upper('NU
78a0: 4c 4c 27 29 20 4f 52 20 55 70 70 65 72 28 70 72  LL') OR Upper(pr
78b0: 6f 76 69 6e 63 65 29 20 3d 20 55 70 70 65 72 28  ovince) = Upper(
78c0: 27 41 72 65 7a 7a 6f 27 29 20 4f 52 20 55 70 70  'Arezzo') OR Upp
78d0: 65 72 28 72 65 67 69 6f 6e 29 20 3d 20 55 70 70  er(region) = Upp
78e0: 65 72 28 27 4e 55 4c 4c 27 29 29 0d 0a 3c 2f 76  er('NULL'))..</v
78f0: 65 72 62 61 74 69 6d 3e 0d 0a 3c 2f 6c 69 3e 0d  erbatim>..</li>.
7900: 0a 3c 2f 75 6c 3e 0d 0a 3c 2f 6c 69 3e 0d 0a 3c  .</ul>..</li>..<
7910: 2f 75 6c 3e 0d 0a 3c 62 72 3e 0d 0a 3c 76 65 72  /ul>..<br>..<ver
7920: 62 61 74 69 6d 3e 0d 0a 53 45 4c 45 43 54 20 53  batim>..SELECT S
7930: 71 6c 50 72 6f 63 5f 45 78 65 63 75 74 65 28 20  qlProc_Execute( 
7940: 53 71 6c 50 72 6f 63 5f 46 72 6f 6d 46 69 6c 65  SqlProc_FromFile
7950: 20 28 27 43 3a 2f 75 73 65 72 73 2f 6a 6f 65 2f   ('C:/users/joe/
7960: 73 74 6f 72 65 64 5f 70 72 6f 63 5f 74 65 73 74  stored_proc_test
7970: 2f 74 65 73 74 5f 73 70 2e 74 78 74 27 29 2c 0d  /test_sp.txt'),.
7980: 0a 20 20 27 40 73 72 69 64 40 3d 33 30 30 34 27  .  '@srid@=3004'
7990: 2c 20 27 40 79 65 61 72 40 3d 32 30 30 31 27 2c  , '@year@=2001',
79a0: 20 27 40 72 65 67 69 6f 6e 40 3d 4c 61 7a 69 6f   '@region@=Lazio
79b0: 27 2c 20 27 40 73 68 70 5f 70 61 74 68 40 3d 43  ', '@shp_path@=C
79c0: 3a 2f 75 73 65 72 73 2f 6a 6f 65 2f 73 74 6f 72  :/users/joe/stor
79d0: 65 64 5f 70 72 6f 63 5f 74 65 73 74 2f 6c 61 7a  ed_proc_test/laz
79e0: 69 6f 5f 32 30 30 31 5f 33 30 30 34 27 29 3b 0d  io_2001_3004');.
79f0: 0a 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 0d 0a 53 45 4c  .-----..1....SEL
7a00: 45 43 54 20 53 71 6c 50 72 6f 63 5f 45 78 65 63  ECT SqlProc_Exec
7a10: 75 74 65 28 20 53 71 6c 50 72 6f 63 5f 46 72 6f  ute( SqlProc_Fro
7a20: 6d 46 69 6c 65 20 28 27 43 3a 2f 75 73 65 72 73  mFile ('C:/users
7a30: 2f 6a 6f 65 2f 73 74 6f 72 65 64 5f 70 72 6f 63  /joe/stored_proc
7a40: 5f 74 65 73 74 2f 74 65 73 74 5f 73 70 2e 74 78  _test/test_sp.tx
7a50: 74 27 29 2c 0d 0a 20 20 27 40 73 72 69 64 40 3d  t'),..  '@srid@=
7a60: 34 33 32 36 27 2c 20 27 40 79 65 61 72 40 3d 31  4326', '@year@=1
7a70: 39 39 31 27 2c 20 27 40 72 65 67 69 6f 6e 40 3d  991', '@region@=
7a80: 70 75 67 6c 69 61 27 2c 20 27 40 73 68 70 5f 70  puglia', '@shp_p
7a90: 61 74 68 40 3d 43 3a 2f 75 73 65 72 73 2f 6a 6f  ath@=C:/users/jo
7aa0: 65 2f 73 74 6f 72 65 64 5f 70 72 6f 63 5f 74 65  e/stored_proc_te
7ab0: 73 74 2f 70 75 67 6c 69 61 5f 31 39 39 31 5f 34  st/puglia_1991_4
7ac0: 33 32 36 27 29 3b 0d 0a 2d 2d 2d 2d 2d 0d 0a 31  326');..-----..1
7ad0: 0d 0a 0d 0a 53 45 4c 45 43 54 20 53 71 6c 50 72  ....SELECT SqlPr
7ae0: 6f 63 5f 45 78 65 63 75 74 65 28 20 53 71 6c 50  oc_Execute( SqlP
7af0: 72 6f 63 5f 46 72 6f 6d 46 69 6c 65 20 28 27 43  roc_FromFile ('C
7b00: 3a 2f 75 73 65 72 73 2f 6a 6f 65 2f 73 74 6f 72  :/users/joe/stor
7b10: 65 64 5f 70 72 6f 63 5f 74 65 73 74 2f 74 65 73  ed_proc_test/tes
7b20: 74 5f 73 70 2e 74 78 74 27 29 2c 0d 0a 20 20 27  t_sp.txt'),..  '
7b30: 40 73 72 69 64 40 3d 33 30 30 33 27 2c 20 27 40  @srid@=3003', '@
7b40: 79 65 61 72 40 3d 32 30 31 31 27 2c 20 27 40 70  year@=2011', '@p
7b50: 72 6f 76 69 6e 63 65 40 3d 41 52 45 5a 5a 4f 27  rovince@=AREZZO'
7b60: 2c 20 27 40 73 68 70 5f 70 61 74 68 40 3d 43 3a  , '@shp_path@=C:
7b70: 2f 75 73 65 72 73 2f 6a 6f 65 2f 73 74 6f 72 65  /users/joe/store
7b80: 64 5f 70 72 6f 63 5f 74 65 73 74 2f 61 72 65 7a  d_proc_test/arez
7b90: 7a 6f 5f 32 30 31 31 5f 33 30 30 33 27 29 3b 0d  zo_2011_3003');.
7ba0: 0a 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 0d 0a 53 45 4c  .-----..1....SEL
7bb0: 45 43 54 20 53 71 6c 50 72 6f 63 5f 45 78 65 63  ECT SqlProc_Exec
7bc0: 75 74 65 28 20 53 71 6c 50 72 6f 63 5f 46 72 6f  ute( SqlProc_Fro
7bd0: 6d 46 69 6c 65 20 28 27 43 3a 2f 75 73 65 72 73  mFile ('C:/users
7be0: 2f 6a 6f 65 2f 73 74 6f 72 65 64 5f 70 72 6f 63  /joe/stored_proc
7bf0: 5f 74 65 73 74 2f 74 65 73 74 5f 73 70 2e 74 78  _test/test_sp.tx
7c00: 74 27 29 2c 0d 0a 20 20 27 40 73 72 69 64 40 3d  t'),..  '@srid@=
7c10: 33 30 30 33 27 2c 20 27 40 79 65 61 72 40 3d 32  3003', '@year@=2
7c20: 30 30 31 27 2c 20 27 40 6d 75 6e 69 63 69 70 61  001', '@municipa
7c30: 6c 69 74 79 40 3d 41 52 45 5a 5a 4f 27 2c 20 27  lity@=AREZZO', '
7c40: 40 73 68 70 5f 70 61 74 68 40 3d 43 3a 2f 75 73  @shp_path@=C:/us
7c50: 65 72 73 2f 6a 6f 65 2f 73 74 6f 72 65 64 5f 70  ers/joe/stored_p
7c60: 72 6f 63 5f 74 65 73 74 2f 63 6f 6d 5f 61 72 65  roc_test/com_are
7c70: 7a 7a 6f 5f 32 30 30 31 5f 33 30 30 33 27 29 3b  zzo_2001_3003');
7c80: 0d 0a 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 3c 2f 76 65  ..-----..1..</ve
7c90: 72 62 61 74 69 6d 3e 0d 0a 49 6e 20 74 68 69 73  rbatim>..In this
7ca0: 20 66 69 72 73 74 20 74 75 74 6f 72 69 61 6c 20   first tutorial 
7cb0: 77 65 20 68 61 76 65 20 61 6c 77 61 79 73 20 3c  we have always <
7cc0: 62 3e 65 78 65 63 75 74 65 64 3c 2f 62 3e 20 61  b>executed</b> a
7cd0: 20 50 72 6f 63 65 64 75 72 65 20 6c 6f 61 64 65   Procedure loade
7ce0: 64 20 66 72 6f 6d 20 61 6e 20 65 78 74 65 72 6e  d from an extern
7cf0: 61 6c 20 66 69 6c 65 2e 3c 62 72 3e 0d 0a 41 73  al file.<br>..As
7d00: 20 79 6f 75 20 63 61 6e 20 73 65 65 20 65 78 65   you can see exe
7d10: 63 75 74 69 6e 67 20 61 20 50 72 6f 63 65 64 75  cuting a Procedu
7d20: 72 65 20 69 73 20 61 20 73 74 72 61 69 67 68 74  re is a straight
7d30: 66 6f 72 77 61 72 64 20 74 61 73 6b 3b 20 79 6f  forward task; yo
7d40: 75 20 73 69 6d 70 6c 79 20 68 61 76 65 20 74 6f  u simply have to
7d50: 20 73 70 65 63 69 66 79 20 61 6e 20 61 70 70 72   specify an appr
7d60: 6f 70 72 69 61 74 65 20 6c 69 73 74 20 6f 66 20  opriate list of 
7d70: 3c 62 3e 56 61 72 69 61 62 6c 65 20 56 61 6c 75  <b>Variable Valu
7d80: 65 73 3c 2f 62 3e 20 61 6e 64 20 74 68 61 74 27  es</b> and that'
7d90: 73 20 61 6c 6c 2e 0d 0a 3c 68 72 3e 0d 0a 3c 68  s all...<hr>..<h
7da0: 32 3e 54 75 74 6f 72 69 61 6c 20 23 32 3c 2f 68  2>Tutorial #2</h
7db0: 32 3e 0d 0a 3c 76 65 72 62 61 74 69 6d 3e 0d 0a  2>..<verbatim>..
7dc0: 53 45 4c 45 43 54 20 53 74 6f 72 65 64 50 72 6f  SELECT StoredPro
7dd0: 63 5f 52 65 67 69 73 74 65 72 28 20 27 6d 79 5f  c_Register( 'my_
7de0: 70 72 6f 63 27 2c 20 27 61 20 53 74 6f 72 65 64  proc', 'a Stored
7df0: 20 50 72 6f 63 65 64 75 72 65 20 66 6f 72 20 65   Procedure for e
7e00: 78 70 6f 72 74 69 6e 67 20 73 65 6c 65 63 74 65  xporting selecte
7e10: 64 20 53 68 61 70 65 66 69 6c 65 73 27 2c 20 53  d Shapefiles', S
7e20: 71 6c 50 72 6f 63 5f 46 72 6f 6d 46 69 6c 65 20  qlProc_FromFile 
7e30: 28 27 43 3a 2f 75 73 65 72 73 2f 6a 6f 65 2f 73  ('C:/users/joe/s
7e40: 74 6f 72 65 64 5f 70 72 6f 63 5f 74 65 73 74 2f  tored_proc_test/
7e50: 74 65 73 74 5f 73 70 2e 74 78 74 27 29 20 29 3b  test_sp.txt') );
7e60: 0d 0a 3c 2f 76 65 72 62 61 74 69 6d 3e 0d 0a 54  ..</verbatim>..T
7e70: 68 69 73 20 73 65 63 6f 6e 64 20 74 75 74 6f 72  his second tutor
7e80: 69 61 6c 20 69 73 20 20 62 61 73 69 63 61 6c 6c  ial is  basicall
7e90: 79 20 74 68 65 20 73 61 6d 65 20 6f 66 20 74 68  y the same of th
7ea0: 65 20 66 69 72 73 74 20 6f 6e 65 2e 3c 62 72 3e  e first one.<br>
7eb0: 0d 0a 54 68 65 20 6f 6e 6c 79 20 64 69 66 66 65  ..The only diffe
7ec0: 72 65 6e 63 65 20 69 73 20 74 68 61 74 20 77 65  rence is that we
7ed0: 27 6c 6c 20 6e 6f 77 20 75 73 65 20 61 20 70 65  'll now use a pe
7ee0: 72 6d 61 6e 65 6e 74 6c 79 20 72 65 67 69 73 74  rmanently regist
7ef0: 65 72 65 64 20 3c 62 3e 53 74 6f 72 65 64 20 50  ered <b>Stored P
7f00: 72 6f 63 65 64 75 72 65 3c 2f 62 3e 2e 0d 0a 3c  rocedure</b>...<
7f10: 76 65 72 62 61 74 69 6d 3e 0d 0a 53 45 4c 45 43  verbatim>..SELEC
7f20: 54 20 53 74 6f 72 65 64 50 72 6f 63 5f 45 78 65  T StoredProc_Exe
7f30: 63 75 74 65 28 20 27 6d 79 5f 70 72 6f 63 27 2c  cute( 'my_proc',
7f40: 20 27 40 73 72 69 64 40 3d 33 30 30 34 27 2c 20   '@srid@=3004', 
7f50: 27 40 79 65 61 72 40 3d 32 30 30 31 27 2c 20 27  '@year@=2001', '
7f60: 40 72 65 67 69 6f 6e 40 3d 4c 61 7a 69 6f 27 2c  @region@=Lazio',
7f70: 20 27 40 73 68 70 5f 70 61 74 68 40 3d 43 3a 2f   '@shp_path@=C:/
7f80: 75 73 65 72 73 2f 6a 6f 65 2f 73 74 6f 72 65 64  users/joe/stored
7f90: 5f 70 72 6f 63 5f 74 65 73 74 2f 6c 61 7a 69 6f  _proc_test/lazio
7fa0: 5f 32 30 30 31 5f 33 30 30 34 27 29 3b 0d 0a 2d  _2001_3004');..-
7fb0: 2d 2d 2d 2d 0d 0a 31 0d 0a 0d 0a 53 45 4c 45 43  ----..1....SELEC
7fc0: 54 20 53 74 6f 72 65 64 50 72 6f 63 5f 45 78 65  T StoredProc_Exe
7fd0: 63 75 74 65 28 20 27 6d 79 5f 70 72 6f 63 27 2c  cute( 'my_proc',
7fe0: 20 27 40 73 72 69 64 40 3d 34 33 32 36 27 2c 20   '@srid@=4326', 
7ff0: 27 40 79 65 61 72 40 3d 31 39 39 31 27 2c 20 27  '@year@=1991', '
8000: 40 72 65 67 69 6f 6e 40 3d 70 75 67 6c 69 61 27  @region@=puglia'
8010: 2c 20 27 40 73 68 70 5f 70 61 74 68 40 3d 43 3a  , '@shp_path@=C:
8020: 2f 75 73 65 72 73 2f 6a 6f 65 2f 73 74 6f 72 65  /users/joe/store
8030: 64 5f 70 72 6f 63 5f 74 65 73 74 2f 70 75 67 6c  d_proc_test/pugl
8040: 69 61 5f 31 39 39 31 5f 34 33 32 36 27 29 3b 0d  ia_1991_4326');.
8050: 0a 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 0d 0a 53 45 4c  .-----..1....SEL
8060: 45 43 54 20 53 74 6f 72 65 64 50 72 6f 63 5f 45  ECT StoredProc_E
8070: 78 65 63 75 74 65 28 20 27 6d 79 5f 70 72 6f 63  xecute( 'my_proc
8080: 27 2c 20 27 40 73 72 69 64 40 3d 33 30 30 33 27  ', '@srid@=3003'
8090: 2c 20 27 40 79 65 61 72 40 3d 32 30 31 31 27 2c  , '@year@=2011',
80a0: 20 27 40 70 72 6f 76 69 6e 63 65 40 3d 41 52 45   '@province@=ARE
80b0: 5a 5a 4f 27 2c 20 27 40 73 68 70 5f 70 61 74 68  ZZO', '@shp_path
80c0: 40 3d 43 3a 2f 75 73 65 72 73 2f 6a 6f 65 2f 73  @=C:/users/joe/s
80d0: 74 6f 72 65 64 5f 70 72 6f 63 5f 74 65 73 74 2f  tored_proc_test/
80e0: 61 72 65 7a 7a 6f 5f 32 30 31 31 5f 33 30 30 33  arezzo_2011_3003
80f0: 27 29 3b 0d 0a 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 0d  ');..-----..1...
8100: 0a 53 45 4c 45 43 54 20 53 74 6f 72 65 64 50 72  .SELECT StoredPr
8110: 6f 63 5f 45 78 65 63 75 74 65 28 20 27 6d 79 5f  oc_Execute( 'my_
8120: 70 72 6f 63 27 2c 20 27 40 73 72 69 64 40 3d 33  proc', '@srid@=3
8130: 30 30 33 27 2c 20 27 40 79 65 61 72 40 3d 32 30  003', '@year@=20
8140: 30 31 27 2c 20 27 40 6d 75 6e 69 63 69 70 61 6c  01', '@municipal
8150: 69 74 79 40 3d 41 52 45 5a 5a 4f 27 2c 20 27 40  ity@=AREZZO', '@
8160: 73 68 70 5f 70 61 74 68 40 3d 43 3a 2f 75 73 65  shp_path@=C:/use
8170: 72 73 2f 6a 6f 65 2f 73 74 6f 72 65 64 5f 70 72  rs/joe/stored_pr
8180: 6f 63 5f 74 65 73 74 2f 63 6f 6d 5f 61 72 65 7a  oc_test/com_arez
8190: 7a 6f 5f 32 30 30 31 5f 33 30 30 33 27 29 3b 0d  zo_2001_3003');.
81a0: 0a 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 3c 2f 76 65 72  .-----..1..</ver
81b0: 62 61 74 69 6d 3e 0d 0a 45 78 65 63 75 74 69 6e  batim>..Executin
81c0: 67 20 61 20 53 74 6f 72 65 64 20 50 72 6f 63 65  g a Stored Proce
81d0: 64 75 72 65 20 69 73 6e 27 74 20 76 65 72 79 20  dure isn't very 
81e0: 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 65  different from e
81f0: 78 65 63 75 74 69 6e 67 20 61 20 50 72 6f 63 65  xecuting a Proce
8200: 64 75 72 65 20 73 74 6f 72 65 64 20 69 6e 74 6f  dure stored into
8210: 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 66 69 6c   an external fil
8220: 65 2e 3c 62 72 3e 0d 0a 3c 74 61 62 6c 65 20 62  e.<br>..<table b
8230: 67 63 6f 6c 6f 72 3d 22 23 66 38 66 38 64 38 22  gcolor="#f8f8d8"
8240: 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 36 22   cellpadding="6"
8250: 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 38 22   cellspacing="8"
8260: 3e 3c 74 72 3e 3c 74 64 3e 0d 0a 45 78 65 63 75  ><tr><td>..Execu
8270: 74 69 6e 67 20 79 6f 75 72 20 50 72 6f 63 65 64  ting your Proced
8280: 75 72 65 73 20 66 72 6f 6d 20 65 78 74 65 72 6e  ures from extern
8290: 61 6c 20 66 69 6c 65 73 20 6f 72 20 70 65 72 6d  al files or perm
82a0: 61 6e 65 6e 74 6c 79 20 72 65 67 69 73 74 65 72  anently register
82b0: 69 6e 67 20 53 74 6f 72 65 64 20 50 72 6f 63 65  ing Stored Proce
82c0: 64 75 72 65 73 20 64 69 72 65 63 74 6c 79 20 77  dures directly w
82d0: 69 74 68 69 6e 20 61 20 64 61 74 61 62 61 73 65  ithin a database
82e0: 20 69 73 20 61 20 6d 61 74 74 65 72 20 6f 66 20   is a matter of 
82f0: 66 72 65 65 20 63 68 6f 69 63 65 2e 3c 62 72 3e  free choice.<br>
8300: 0d 0a 49 66 20 79 6f 75 20 61 72 65 20 70 6c 61  ..If you are pla
8310: 6e 6e 69 6e 67 20 74 6f 20 64 65 70 6c 6f 79 20  nning to deploy 
8320: 61 20 50 72 6f 63 65 64 75 72 65 20 69 6e 74 65  a Procedure inte
8330: 6e 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20  nded to support 
8340: 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 64  many different d
8350: 61 74 61 62 61 73 65 73 2c 20 74 68 65 6e 20 75  atabases, then u
8360: 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61 6c  sing an external
8370: 20 66 69 6c 65 20 63 6f 75 6c 64 20 70 72 6f 62   file could prob
8380: 61 62 6c 79 20 73 69 6d 70 6c 69 66 79 20 79 6f  ably simplify yo
8390: 75 72 20 77 6f 72 6b 2e 3c 62 72 3e 0d 0a 42 75  ur work.<br>..Bu
83a0: 74 20 69 66 20 79 6f 75 20 61 72 65 20 70 6c 61  t if you are pla
83b0: 6e 6e 69 6e 67 20 74 6f 20 64 65 70 6c 6f 79 20  nning to deploy 
83c0: 61 20 50 72 6f 63 65 64 75 72 65 20 69 6e 74 65  a Procedure inte
83d0: 6e 64 65 64 20 74 6f 20 61 75 74 6f 6d 61 74 65  nded to automate
83e0: 20 6d 61 6e 79 20 72 6f 75 74 69 6e 65 6c 79 20   many routinely 
83f0: 74 61 73 6b 20 74 6f 20 62 65 20 65 78 65 63 75  task to be execu
8400: 74 65 64 20 6f 66 74 65 6e 20 6f 6e 20 74 68 65  ted often on the
8410: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 2c 20   same database, 
8420: 74 68 65 6e 20 70 65 72 6d 61 6e 65 6e 74 6c 79  then permanently
8430: 20 72 65 67 69 73 74 65 72 69 6e 67 20 61 20 53   registering a S
8440: 74 6f 72 65 64 20 50 72 6f 63 65 64 75 72 65 20  tored Procedure 
8450: 77 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 62  would probably b
8460: 65 20 62 65 74 74 65 72 20 61 6e 64 20 66 61 73  e better and fas
8470: 74 65 72 2e 0d 0a 3c 2f 74 64 3e 3c 2f 74 72 3e  ter...</td></tr>
8480: 3c 2f 74 61 62 6c 65 3e 0d 0a 3c 62 72 3e 3c 68  </table>..<br><h
8490: 72 3e 0d 0a 3c 68 32 3e 54 75 74 6f 72 69 61 6c  r>..<h2>Tutorial
84a0: 20 23 33 3c 2f 68 32 3e 0d 0a 54 68 69 73 20 74   #3</h2>..This t
84b0: 68 69 72 64 20 74 75 74 6f 72 69 61 6c 20 69 73  hird tutorial is
84c0: 20 6a 75 73 74 20 61 20 73 6d 61 6c 6c 20 76 61   just a small va
84d0: 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 74  riation on the t
84e0: 68 65 6d 65 20 69 6e 74 65 6e 64 65 64 20 74 6f  heme intended to
84f0: 20 68 69 67 68 6c 69 67 68 74 20 73 6f 6d 65 20   highlight some 
8500: 70 6f 74 65 6e 74 69 61 6c 6c 79 20 64 61 6e 67  potentially dang
8510: 65 72 6f 75 73 20 70 69 74 66 61 6c 6c 73 20 72  erous pitfalls r
8520: 65 6c 61 74 65 64 20 74 6f 20 3c 62 3e 73 69 6e  elated to <b>sin
8530: 67 6c 65 2d 71 75 6f 74 69 6e 67 3c 2f 62 3e 2e  gle-quoting</b>.
8540: 20 0d 0a 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 53   ..<verbatim>..S
8550: 45 4c 45 43 54 20 53 74 6f 72 65 64 50 72 6f 63  ELECT StoredProc
8560: 5f 45 78 65 63 75 74 65 28 20 27 6d 79 5f 70 72  _Execute( 'my_pr
8570: 6f 63 27 29 2c 20 27 40 73 72 69 64 40 3d 33 30  oc'), '@srid@=30
8580: 30 33 27 2c 20 27 40 79 65 61 72 40 3d 32 30 31  03', '@year@=201
8590: 31 27 2c 20 27 40 6d 75 6e 69 63 69 70 61 6c 69  1', '@municipali
85a0: 74 79 40 3d 72 69 6f 20 6e 65 6c 6c 27 27 65 6c  ty@=rio nell''el
85b0: 62 61 27 2c 20 27 40 73 68 70 5f 70 61 74 68 40  ba', '@shp_path@
85c0: 3d 43 3a 2f 75 73 65 72 73 2f 6a 6f 65 2f 73 74  =C:/users/joe/st
85d0: 6f 72 65 64 5f 70 72 6f 63 5f 74 65 73 74 2f 72  ored_proc_test/r
85e0: 69 6f 5f 65 6c 62 61 5f 32 30 31 31 5f 33 30 30  io_elba_2011_300
85f0: 33 27 29 3b 0d 0a 2d 2d 2d 2d 2d 0d 0a 53 74 6f  3');..-----..Sto
8600: 72 65 64 50 72 6f 63 20 65 78 63 65 70 74 69 6f  redProc exceptio
8610: 6e 20 2d 20 61 20 66 61 74 61 6c 20 53 51 4c 20  n - a fatal SQL 
8620: 65 72 72 6f 72 20 77 61 73 20 65 6e 63 6f 75 6e  error was encoun
8630: 74 65 72 65 64 2e 0d 0a 0d 0a 53 45 4c 45 43 54  tered.....SELECT
8640: 20 53 71 6c 50 72 6f 63 5f 47 65 74 4c 61 73 74   SqlProc_GetLast
8650: 45 72 72 6f 72 28 29 3b 0d 0a 2d 2d 2d 2d 2d 0d  Error();..-----.
8660: 0a 67 61 69 61 5f 73 71 6c 5f 70 72 6f 63 5f 65  .gaia_sql_proc_e
8670: 78 65 63 75 74 65 3a 20 6e 65 61 72 20 22 65 6c  xecute: near "el
8680: 62 61 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f  ba": syntax erro
8690: 72 0d 0a 3c 2f 76 65 72 62 61 74 69 6d 3e 0d 0a  r..</verbatim>..
86a0: 54 68 69 73 20 66 69 72 73 74 20 61 74 74 65 6d  This first attem
86b0: 70 74 20 77 69 6c 6c 20 66 61 69 6c 2c 20 61 6e  pt will fail, an
86c0: 64 20 75 73 69 6e 67 20 3c 62 3e 53 71 6c 50 72  d using <b>SqlPr
86d0: 6f 63 5f 47 65 74 4c 61 73 74 45 72 72 6f 72 3c  oc_GetLastError<
86e0: 2f 62 3e 20 77 69 6c 6c 20 65 78 70 6c 61 69 6e  /b> will explain
86f0: 20 77 68 79 20 69 74 20 66 61 69 6c 65 64 3c 62   why it failed<b
8700: 72 3e 0d 0a 57 65 27 76 65 20 70 61 73 73 65 64  r>..We've passed
8710: 20 61 20 3c 62 3e 27 40 6d 75 6e 69 63 69 70 61   a <b>'@municipa
8720: 6c 69 74 79 40 3d 72 69 6f 20 6e 65 6c 6c 27 27  lity@=rio nell''
8730: 65 6c 62 61 27 3c 2f 62 3e 20 56 61 72 69 61 62  elba'</b> Variab
8740: 6c 65 20 77 69 74 68 20 56 61 6c 75 65 2c 20 74  le with Value, t
8750: 68 61 74 20 77 69 6c 6c 20 6c 65 61 64 20 74 6f  hat will lead to
8760: 20 61 20 3c 62 3e 63 6f 6f 6b 65 64 3c 2f 62 3e   a <b>cooked</b>
8770: 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6c 69   WHERE clause li
8780: 6b 65 20 74 68 69 73 3a 0d 0a 3c 76 65 72 62 61  ke this:..<verba
8790: 74 69 6d 3e 0d 0a 57 48 45 52 45 20 28 55 70 70  tim>..WHERE (Upp
87a0: 65 72 28 6e 61 6d 65 29 20 3d 20 55 70 70 65 72  er(name) = Upper
87b0: 28 27 72 69 6f 20 6e 65 6c 6c 27 65 6c 62 61 27  ('rio nell'elba'
87c0: 29 20 4f 52 20 55 70 70 65 72 28 70 72 6f 76 69  ) OR Upper(provi
87d0: 6e 63 65 29 20 3d 20 55 70 70 65 72 28 27 4e 55  nce) = Upper('NU
87e0: 4c 4c 27 29 20 4f 52 20 55 70 70 65 72 28 72 65  LL') OR Upper(re
87f0: 67 69 6f 6e 29 20 3d 20 55 70 70 65 72 28 27 4e  gion) = Upper('N
8800: 55 4c 4c 27 29 29 0d 0a 3c 2f 76 65 72 62 61 74  ULL'))..</verbat
8810: 69 6d 3e 0d 0a 54 68 65 2c 20 6e 6f 74 20 61 6c  im>..The, not al
8820: 77 61 79 73 20 6f 62 76 69 6f 75 73 20 63 61 75  ways obvious cau
8830: 73 65 2c 20 69 73 20 74 68 61 74 20 3c 62 3e 27  se, is that <b>'
8840: 72 69 6f 20 6e 65 6c 6c 27 65 6c 62 61 27 3c 2f  rio nell'elba'</
8850: 62 3e 20 69 73 20 61 6e 20 69 6c 6c 65 67 61 6c  b> is an illegal
8860: 20 53 51 4c 20 74 65 78 74 20 73 74 72 69 6e 67   SQL text string
8870: 3b 20 74 68 65 20 63 6f 72 72 65 63 74 20 73 79  ; the correct sy
8880: 6e 74 61 78 20 73 68 6f 75 6c 64 20 62 65 20 69  ntax should be i
8890: 6e 73 74 65 61 64 20 3c 62 3e 27 72 69 6f 20 6e  nstead <b>'rio n
88a0: 65 6c 6c 27 27 65 6c 62 61 27 3c 2f 62 3e 2e 0d  ell''elba'</b>..
88b0: 0a 3c 62 72 3e 3c 62 72 3e 0d 0a 3c 76 65 72 62  .<br><br>..<verb
88c0: 61 74 69 6d 3e 0d 0a 53 45 4c 45 43 54 20 53 74  atim>..SELECT St
88d0: 6f 72 65 64 50 72 6f 63 5f 45 78 65 63 75 74 65  oredProc_Execute
88e0: 28 20 27 6d 79 5f 70 72 6f 63 27 29 2c 20 27 40  ( 'my_proc'), '@
88f0: 73 72 69 64 40 3d 33 30 30 33 27 2c 20 27 40 79  srid@=3003', '@y
8900: 65 61 72 40 3d 32 30 31 31 27 2c 20 27 40 6d 75  ear@=2011', '@mu
8910: 6e 69 63 69 70 61 6c 69 74 79 40 3d 72 69 6f 20  nicipality@=rio 
8920: 6e 65 6c 6c 27 27 27 27 65 6c 62 61 27 2c 20 27  nell''''elba', '
8930: 40 73 68 70 5f 70 61 74 68 40 3d 43 3a 2f 75 73  @shp_path@=C:/us
8940: 65 72 73 2f 6a 6f 65 2f 73 74 6f 72 65 64 5f 70  ers/joe/stored_p
8950: 72 6f 63 5f 74 65 73 74 2f 72 69 6f 5f 65 6c 62  roc_test/rio_elb
8960: 61 5f 32 30 31 31 5f 33 30 30 33 27 29 3b 0d 0a  a_2011_3003');..
8970: 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 3c 2f 76 65 72 62  -----..1..</verb
8980: 61 74 69 6d 3e 0d 0a 52 65 73 6f 6c 76 69 6e 67  atim>..Resolving
8990: 20 73 75 63 68 20 61 6e 20 69 73 73 75 65 20 69   such an issue i
89a0: 73 20 72 61 74 68 65 72 20 74 72 69 76 69 61 6c  s rather trivial
89b0: 3b 20 77 65 20 6a 75 73 74 20 68 61 76 65 20 74  ; we just have t
89c0: 6f 20 75 73 65 20 3c 62 3e 66 6f 75 72 3c 2f 62  o use <b>four</b
89d0: 3e 20 63 6f 6e 73 65 63 75 74 69 76 65 20 73 69  > consecutive si
89e0: 6e 67 6c 65 2d 71 75 6f 74 65 73 20 73 6f 20 74  ngle-quotes so t
89f0: 6f 20 63 6f 72 72 65 63 74 6c 79 20 65 73 63 61  o correctly esca
8a00: 70 65 20 74 68 65 20 73 74 72 69 6e 67 20 76 61  pe the string va
8a10: 6c 75 65 20 6f 72 3c 62 72 3e 20 75 73 65 20 64  lue or<br> use d
8a20: 6f 75 62 6c 65 20 71 75 6f 74 65 73 20 66 6f 72  ouble quotes for
8a30: 20 66 69 65 6c 64 73 20 77 68 65 72 65 20 73 69   fields where si
8a40: 6e 67 6c 65 20 71 75 6f 74 65 73 20 6f 66 74 65  ngle quotes ofte
8a50: 6e 20 6f 63 63 75 72 20 69 6e 20 6e 61 6d 65 73  n occur in names
8a60: 20 28 3c 62 3e 22 40 6d 75 6e 69 63 69 70 61 6c   (<b>"@municipal
8a70: 69 74 79 40 3d 72 69 6f 20 6e 65 6c 6c 27 65 6c  ity@=rio nell'el
8a80: 62 61 22 3c 2f 62 3e 29 2e 0d 0a 3c 62 72 3e 3c  ba"</b>)...<br><
8a90: 68 72 3e 0d 0a 3c 68 32 3e 54 75 74 6f 72 69 61  hr>..<h2>Tutoria
8aa0: 6c 20 23 34 3c 2f 68 32 3e 0d 0a 54 68 69 73 20  l #4</h2>..This 
8ab0: 6c 61 73 74 20 74 75 74 6f 72 69 61 6c 20 69 73  last tutorial is
8ac0: 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d   exactly the sam
8ad0: 65 20 6f 66 20 3c 62 3e 54 75 74 6f 72 69 61 6c  e of <b>Tutorial
8ae0: 20 23 32 3c 2f 62 3e 2c 20 62 75 74 20 74 68 69   #2</b>, but thi
8af0: 73 20 74 69 6d 65 20 77 65 27 6c 6c 20 65 6e 61  s time we'll ena
8b00: 62 6c 65 20 61 20 3c 62 3e 6c 6f 67 66 69 6c 65  ble a <b>logfile
8b10: 3c 2f 62 3e 2e 20 0d 0a 3c 76 65 72 62 61 74 69  </b>. ..<verbati
8b20: 6d 3e 0d 0a 53 45 4c 45 43 54 20 53 71 6c 50 72  m>..SELECT SqlPr
8b30: 6f 63 5f 53 65 74 4c 6f 67 66 69 6c 65 28 20 27  oc_SetLogfile( '
8b40: 43 3a 2f 75 73 65 72 73 2f 6a 6f 65 2f 73 74 6f  C:/users/joe/sto
8b50: 72 65 64 5f 70 72 6f 63 5f 74 65 73 74 2f 6c 6f  red_proc_test/lo
8b60: 67 66 69 6c 65 2e 74 78 74 27 2c 20 31 29 3b 0d  gfile.txt', 1);.
8b70: 0a 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 0d 0a 53 45 4c  .-----..1....SEL
8b80: 45 43 54 20 53 74 6f 72 65 64 50 72 6f 63 5f 45  ECT StoredProc_E
8b90: 78 65 63 75 74 65 28 20 27 6d 79 5f 70 72 6f 63  xecute( 'my_proc
8ba0: 27 2c 20 27 40 73 72 69 64 40 3d 34 33 32 36 27  ', '@srid@=4326'
8bb0: 2c 20 27 40 79 65 61 72 40 3d 31 39 39 31 27 2c  , '@year@=1991',
8bc0: 20 27 40 72 65 67 69 6f 6e 40 3d 70 75 67 6c 69   '@region@=pugli
8bd0: 61 27 2c 20 27 40 73 68 70 5f 70 61 74 68 40 3d  a', '@shp_path@=
8be0: 43 3a 2f 75 73 65 72 73 2f 6a 6f 65 2f 73 74 6f  C:/users/joe/sto
8bf0: 72 65 64 5f 70 72 6f 63 5f 74 65 73 74 2f 70 75  red_proc_test/pu
8c00: 67 6c 69 61 5f 31 39 39 31 5f 34 33 32 36 27 29  glia_1991_4326')
8c10: 3b 29 3b 0d 0a 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 0d  ;);..-----..1...
8c20: 0a 53 45 4c 45 43 54 20 53 74 6f 72 65 64 50 72  .SELECT StoredPr
8c30: 6f 63 5f 45 78 65 63 75 74 65 28 20 27 6d 79 5f  oc_Execute( 'my_
8c40: 70 72 6f 63 27 2c 20 27 40 73 72 69 64 40 3d 33  proc', '@srid@=3
8c50: 30 30 33 27 2c 20 27 40 79 65 61 72 40 3d 32 30  003', '@year@=20
8c60: 30 31 27 2c 20 27 40 6d 75 6e 69 63 69 70 61 6c  01', '@municipal
8c70: 69 74 79 40 3d 41 52 45 5a 5a 4f 27 2c 20 27 40  ity@=AREZZO', '@
8c80: 73 68 70 5f 70 61 74 68 40 3d 43 3a 2f 75 73 65  shp_path@=C:/use
8c90: 72 73 2f 6a 6f 65 2f 73 74 6f 72 65 64 5f 70 72  rs/joe/stored_pr
8ca0: 6f 63 5f 74 65 73 74 2f 63 6f 6d 5f 61 72 65 7a  oc_test/com_arez
8cb0: 7a 6f 5f 32 30 30 31 5f 33 30 30 33 27 29 3b 0d  zo_2001_3003');.
8cc0: 0a 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 0d 0a 53 45 4c  .-----..1....SEL
8cd0: 45 43 54 20 53 71 6c 50 72 6f 63 5f 53 65 74 4c  ECT SqlProc_SetL
8ce0: 6f 67 66 69 6c 65 28 20 4e 55 4c 4c 20 29 3b 0d  ogfile( NULL );.
8cf0: 0a 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 3c 2f 76 65 72  .-----..1..</ver
8d00: 62 61 74 69 6d 3e 0d 0a 57 65 27 6c 6c 20 73 74  batim>..We'll st
8d10: 61 72 74 20 62 79 20 63 61 6c 6c 69 6e 67 20 3c  art by calling <
8d20: 62 3e 53 71 6c 50 72 6f 63 5f 53 65 74 4c 6f 67  b>SqlProc_SetLog
8d30: 66 69 6c 65 28 29 3c 2f 62 3e 20 73 6f 20 74 6f  file()</b> so to
8d40: 20 65 6e 61 62 6c 65 20 74 68 65 20 6c 6f 67 67   enable the logg
8d50: 69 6e 67 20 66 61 63 69 6c 69 74 79 3b 20 74 68  ing facility; th
8d60: 65 20 6c 6f 67 66 69 6c 65 20 77 69 6c 6c 20 62  e logfile will b
8d70: 65 20 3c 62 3e 43 3a 2f 75 73 65 72 73 2f 6a 6f  e <b>C:/users/jo
8d80: 65 2f 73 74 6f 72 65 64 5f 70 72 6f 63 5f 74 65  e/stored_proc_te
8d90: 73 74 2f 6c 6f 67 66 69 6c 65 2e 74 78 74 3c 2f  st/logfile.txt</
8da0: 62 3e 20 61 6e 64 20 69 74 20 77 69 6c 6c 20 62  b> and it will b
8db0: 65 20 6f 70 65 6e 65 64 20 69 6e 20 3c 62 3e 61  e opened in <b>a
8dc0: 70 70 65 6e 64 20 6d 6f 64 65 3c 2f 62 3e 2e 0d  ppend mode</b>..
8dd0: 0a 57 65 27 6c 6c 20 65 6e 64 20 66 69 6e 61 6c  .We'll end final
8de0: 6c 79 20 62 79 20 63 61 6c 6c 69 6e 67 20 6f 6e  ly by calling on
8df0: 63 65 20 61 67 61 69 6e 20 3c 62 3e 53 71 6c 50  ce again <b>SqlP
8e00: 72 6f 63 5f 53 65 74 4c 6f 67 66 69 6c 65 28 29  roc_SetLogfile()
8e10: 3c 2f 62 3e 20 62 79 20 70 61 73 73 69 6e 67 20  </b> by passing 
8e20: 61 20 3c 62 3e 4e 55 4c 4c 3c 2f 62 3e 20 70 61  a <b>NULL</b> pa
8e30: 74 68 6e 61 6d 65 20 73 6f 20 74 6f 20 64 69 73  thname so to dis
8e40: 61 62 6c 65 20 74 68 65 20 6c 6f 67 67 69 6e 67  able the logging
8e50: 20 66 61 63 69 6c 69 74 79 2e 3c 62 72 3e 3c 62   facility.<br><b
8e60: 72 3e 0d 0a 54 68 65 20 6c 6f 67 66 69 6c 65 20  r>..The logfile 
8e70: 69 73 20 6a 75 73 74 20 61 20 70 6c 61 69 6e 20  is just a plain 
8e80: 74 65 78 74 20 66 69 6c 65 3b 20 79 6f 75 20 63  text file; you c
8e90: 61 6e 20 6f 70 65 6e 20 69 74 20 62 79 20 75 73  an open it by us
8ea0: 69 6e 67 20 61 6e 79 20 74 65 78 74 20 65 64 69  ing any text edi
8eb0: 74 6f 72 20 73 6f 20 74 6f 20 63 68 65 63 6b 20  tor so to check 
8ec0: 74 68 61 74 20 69 74 20 77 69 6c 6c 20 6c 6f 6f  that it will loo
8ed0: 6b 20 6c 69 6b 65 20 74 68 69 73 3a 0d 0a 3c 76  k like this:..<v
8ee0: 65 72 62 61 74 69 6d 3e 0d 0a 3d 3d 3d 3d 3d 3d  erbatim>..======
8ef0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8f00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8f10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8f20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8f30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8f40: 3d 3d 3d 0d 0a 3d 3d 20 20 20 20 20 53 51 4c 20  ===..==     SQL 
8f50: 73 65 73 73 69 6f 6e 20 73 74 61 72 74 20 20 20  session start   
8f60: 3d 20 20 20 32 30 31 37 2d 31 32 2d 32 31 20 31  =   2017-12-21 1
8f70: 32 3a 35 30 3a 30 39 0d 0a 3d 3d 3d 3d 3d 3d 3d  2:50:09..=======
8f80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8f90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8fa0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8fb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8fc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8fd0: 3d 3d 0d 0a 53 45 4c 45 43 54 20 44 72 6f 70 47  ==..SELECT DropG
8fe0: 65 6f 54 61 62 6c 65 28 27 74 72 61 6e 73 69 65  eoTable('transie
8ff0: 6e 74 5f 74 61 62 6c 65 27 29 3b 0d 0a 2d 2d 2d  nt_table');..---
9000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 44 72  ------------..Dr
9020: 6f 70 47 65 6f 54 61 62 6c 65 28 27 74 72 61 6e  opGeoTable('tran
9030: 73 69 65 6e 74 5f 74 61 62 6c 65 27 29 0d 0a 2d  sient_table')..-
9040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a  --------------..
9060: 30 0d 0a 3d 3d 3d 20 31 20 72 6f 77 20 3d 3d 3d  0..=== 1 row ===
9070: 20 45 78 65 63 75 74 69 6f 6e 20 74 69 6d 65 3a   Execution time:
9080: 20 30 2e 30 30 33 0d 0a 0d 0a 43 52 45 41 54 45   0.003....CREATE
9090: 20 54 41 42 4c 45 20 74 72 61 6e 73 69 65 6e 74   TABLE transient
90a0: 5f 74 61 62 6c 65 20 41 53 0d 0a 53 45 4c 45 43  _table AS..SELEC
90b0: 54 20 69 64 2c 20 69 73 74 61 74 2c 20 6e 61 6d  T id, istat, nam
90c0: 65 2c 20 70 72 6f 76 69 6e 63 65 2c 20 72 65 67  e, province, reg
90d0: 69 6f 6e 2c 20 53 54 5f 54 72 61 6e 73 66 6f 72  ion, ST_Transfor
90e0: 6d 28 67 65 6f 6d 2c 20 34 33 32 36 29 20 41 53  m(geom, 4326) AS
90f0: 20 67 65 6f 6d 0d 0a 46 52 4f 4d 20 6d 75 6e 69   geom..FROM muni
9100: 63 69 70 61 6c 69 74 69 65 73 5f 31 39 39 31 0d  cipalities_1991.
9110: 0a 57 48 45 52 45 20 28 55 70 70 65 72 28 6e 61  .WHERE (Upper(na
9120: 6d 65 29 20 3d 20 55 70 70 65 72 28 27 4e 55 4c  me) = Upper('NUL
9130: 4c 27 29 20 4f 52 20 55 70 70 65 72 28 70 72 6f  L') OR Upper(pro
9140: 76 69 6e 63 65 29 20 3d 20 55 70 70 65 72 28 27  vince) = Upper('
9150: 4e 55 4c 4c 27 29 20 4f 52 20 55 70 70 65 72 28  NULL') OR Upper(
9160: 72 65 67 69 6f 6e 29 20 3d 20 55 70 70 65 72 28  region) = Upper(
9170: 27 70 75 67 6c 69 61 27 29 29 3b 0d 0a 3d 3d 3d  'puglia'));..===
9180: 20 45 78 65 63 75 74 69 6f 6e 20 74 69 6d 65 3a   Execution time:
9190: 20 30 2e 31 31 31 0d 0a 0d 0a 53 45 4c 45 43 54   0.111....SELECT
91a0: 20 52 65 63 6f 76 65 72 47 65 6f 6d 65 74 72 79   RecoverGeometry
91b0: 43 6f 6c 75 6d 6e 28 27 74 72 61 6e 73 69 65 6e  Column('transien
91c0: 74 5f 74 61 62 6c 65 27 2c 20 27 67 65 6f 6d 27  t_table', 'geom'
91d0: 2c 20 34 33 32 36 2c 20 27 4d 55 4c 54 49 50 4f  , 4326, 'MULTIPO
91e0: 4c 59 47 4f 4e 27 2c 20 27 58 59 27 29 3b 0d 0a  LYGON', 'XY');..
91f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 52 65  ------------..Re
9240: 63 6f 76 65 72 47 65 6f 6d 65 74 72 79 43 6f 6c  coverGeometryCol
9250: 75 6d 6e 28 27 74 72 61 6e 73 69 65 6e 74 5f 74  umn('transient_t
9260: 61 62 6c 65 27 2c 20 27 67 65 6f 6d 27 2c 20 34  able', 'geom', 4
9270: 33 32 36 2c 20 27 4d 55 4c 54 49 50 4f 4c 59 47  326, 'MULTIPOLYG
9280: 4f 4e 27 2c 20 27 58 59 27 29 0d 0a 2d 2d 2d 2d  ON', 'XY')..----
9290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
92a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
92b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
92c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
92d0: 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 3d 3d 3d  --------..1..===
92e0: 20 31 20 72 6f 77 20 3d 3d 3d 20 45 78 65 63 75   1 row === Execu
92f0: 74 69 6f 6e 20 74 69 6d 65 3a 20 30 2e 30 33 31  tion time: 0.031
9300: 0d 0a 0d 0a 53 45 4c 45 43 54 20 45 78 70 6f 72  ....SELECT Expor
9310: 74 53 68 70 28 27 74 72 61 6e 73 69 65 6e 74 5f  tShp('transient_
9320: 74 61 62 6c 65 27 2c 20 27 67 65 6f 6d 27 2c 20  table', 'geom', 
9330: 27 43 3a 2f 75 73 65 72 73 2f 6a 6f 65 2f 73 74  'C:/users/joe/st
9340: 6f 72 65 64 5f 70 72 6f 63 5f 74 65 73 74 2f 70  ored_proc_test/p
9350: 75 67 6c 69 61 5f 31 39 39 31 5f 34 33 32 36 27  uglia_1991_4326'
9360: 2c 20 27 43 50 31 32 35 32 27 29 3b 0d 0a 2d 2d  , 'CP1252');..--
9370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
93a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
93b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 45  -------------..E
93c0: 78 70 6f 72 74 53 68 70 28 27 74 72 61 6e 73 69  xportShp('transi
93d0: 65 6e 74 5f 74 61 62 6c 65 27 2c 20 27 67 65 6f  ent_table', 'geo
93e0: 6d 27 2c 20 27 43 3a 2f 75 73 65 72 73 2f 6a 6f  m', 'C:/users/jo
93f0: 65 2f 73 74 6f 72 65 64 5f 70 72 6f 63 5f 74 65  e/stored_proc_te
9400: 73 74 2f 70 75 67 6c 69 61 5f 31 39 39 31 5f 34  st/puglia_1991_4
9410: 33 32 36 27 2c 20 27 43 50 31 32 35 32 27 29 0d  326', 'CP1252').
9420: 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .---------------
9430: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9470: 0d 0a 32 35 37 0d 0a 3d 3d 3d 20 31 20 72 6f 77  ..257..=== 1 row
9480: 20 3d 3d 3d 20 45 78 65 63 75 74 69 6f 6e 20 74   === Execution t
9490: 69 6d 65 3a 20 30 2e 30 37 37 0d 0a 0d 0a 53 45  ime: 0.077....SE
94a0: 4c 45 43 54 20 44 72 6f 70 47 65 6f 54 61 62 6c  LECT DropGeoTabl
94b0: 65 28 27 74 72 61 6e 73 69 65 6e 74 5f 74 61 62  e('transient_tab
94c0: 6c 65 27 29 3b 0d 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d  le');..---------
94d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
94e0: 2d 2d 2d 2d 2d 2d 0d 0a 44 72 6f 70 47 65 6f 54  ------..DropGeoT
94f0: 61 62 6c 65 28 27 74 72 61 6e 73 69 65 6e 74 5f  able('transient_
9500: 74 61 62 6c 65 27 29 0d 0a 2d 2d 2d 2d 2d 2d 2d  table')..-------
9510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9520: 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 3d 3d 3d  --------..1..===
9530: 20 31 20 72 6f 77 20 3d 3d 3d 20 45 78 65 63 75   1 row === Execu
9540: 74 69 6f 6e 20 74 69 6d 65 3a 20 30 2e 30 30 32  tion time: 0.002
9550: 0d 0a 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ....============
9560: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9570: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9580: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9590: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
95a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 3d  =============..=
95b0: 3d 20 20 20 20 20 53 51 4c 20 73 65 73 73 69 6f  =     SQL sessio
95c0: 6e 20 65 6e 64 20 20 20 3d 20 20 20 32 30 31 37  n end   =   2017
95d0: 2d 31 32 2d 32 31 20 31 32 3a 35 30 3a 30 39 20  -12-21 12:50:09 
95e0: 20 20 3d 20 20 20 35 20 73 74 61 74 65 6d 65 6e    =   5 statemen
95f0: 74 73 20 77 65 72 65 20 65 78 65 63 75 74 65 64  ts were executed
9600: 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ..==============
9610: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9620: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9630: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9640: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9650: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a 0d  ===========.....
9660: 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  .===============
9670: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9680: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9690: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
96a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
96b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 3d 3d 20 20  ==========..==  
96c0: 20 20 20 53 51 4c 20 73 65 73 73 69 6f 6e 20 73     SQL session s
96d0: 74 61 72 74 20 20 20 3d 20 20 20 32 30 31 37 2d  tart   =   2017-
96e0: 31 32 2d 32 31 20 31 32 3a 35 33 3a 30 31 0d 0a  12-21 12:53:01..
96f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9700: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9710: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9720: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9730: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9740: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 53 45 4c 45 43  =========..SELEC
9750: 54 20 44 72 6f 70 47 65 6f 54 61 62 6c 65 28 27  T DropGeoTable('
9760: 74 72 61 6e 73 69 65 6e 74 5f 74 61 62 6c 65 27  transient_table'
9770: 29 3b 0d 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  );..------------
9780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9790: 2d 2d 2d 0d 0a 44 72 6f 70 47 65 6f 54 61 62 6c  ---..DropGeoTabl
97a0: 65 28 27 74 72 61 6e 73 69 65 6e 74 5f 74 61 62  e('transient_tab
97b0: 6c 65 27 29 0d 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  le')..----------
97c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
97d0: 2d 2d 2d 2d 2d 0d 0a 30 0d 0a 3d 3d 3d 20 31 20  -----..0..=== 1 
97e0: 72 6f 77 20 3d 3d 3d 20 45 78 65 63 75 74 69 6f  row === Executio
97f0: 6e 20 74 69 6d 65 3a 20 30 2e 30 30 32 0d 0a 0d  n time: 0.002...
9800: 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 72  .CREATE TABLE tr
9810: 61 6e 73 69 65 6e 74 5f 74 61 62 6c 65 20 41 53  ansient_table AS
9820: 0d 0a 53 45 4c 45 43 54 20 69 64 2c 20 69 73 74  ..SELECT id, ist
9830: 61 74 2c 20 6e 61 6d 65 2c 20 70 72 6f 76 69 6e  at, name, provin
9840: 63 65 2c 20 72 65 67 69 6f 6e 2c 20 53 54 5f 54  ce, region, ST_T
9850: 72 61 6e 73 66 6f 72 6d 28 67 65 6f 6d 2c 20 33  ransform(geom, 3
9860: 30 30 33 29 20 41 53 20 67 65 6f 6d 0d 0a 46 52  003) AS geom..FR
9870: 4f 4d 20 6d 75 6e 69 63 69 70 61 6c 69 74 69 65  OM municipalitie
9880: 73 5f 32 30 30 31 0d 0a 57 48 45 52 45 20 28 55  s_2001..WHERE (U
9890: 70 70 65 72 28 6e 61 6d 65 29 20 3d 20 55 70 70  pper(name) = Upp
98a0: 65 72 28 27 41 52 45 5a 5a 4f 27 29 20 4f 52 20  er('AREZZO') OR 
98b0: 55 70 70 65 72 28 70 72 6f 76 69 6e 63 65 29 20  Upper(province) 
98c0: 3d 20 55 70 70 65 72 28 27 4e 55 4c 4c 27 29 20  = Upper('NULL') 
98d0: 4f 52 20 55 70 70 65 72 28 72 65 67 69 6f 6e 29  OR Upper(region)
98e0: 20 3d 20 55 70 70 65 72 28 27 4e 55 4c 4c 27 29   = Upper('NULL')
98f0: 29 3b 0d 0a 3d 3d 3d 20 45 78 65 63 75 74 69 6f  );..=== Executio
9900: 6e 20 74 69 6d 65 3a 20 30 2e 30 33 32 0d 0a 0d  n time: 0.032...
9910: 0a 53 45 4c 45 43 54 20 52 65 63 6f 76 65 72 47  .SELECT RecoverG
9920: 65 6f 6d 65 74 72 79 43 6f 6c 75 6d 6e 28 27 74  eometryColumn('t
9930: 72 61 6e 73 69 65 6e 74 5f 74 61 62 6c 65 27 2c  ransient_table',
9940: 20 27 67 65 6f 6d 27 2c 20 33 30 30 33 2c 20 27   'geom', 3003, '
9950: 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 27 2c 20 27  MULTIPOLYGON', '
9960: 58 59 27 29 3b 0d 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d  XY');..---------
9970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9990: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
99a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
99b0: 2d 2d 2d 0d 0a 52 65 63 6f 76 65 72 47 65 6f 6d  ---..RecoverGeom
99c0: 65 74 72 79 43 6f 6c 75 6d 6e 28 27 74 72 61 6e  etryColumn('tran
99d0: 73 69 65 6e 74 5f 74 61 62 6c 65 27 2c 20 27 67  sient_table', 'g
99e0: 65 6f 6d 27 2c 20 33 30 30 33 2c 20 27 4d 55 4c  eom', 3003, 'MUL
99f0: 54 49 50 4f 4c 59 47 4f 4e 27 2c 20 27 58 59 27  TIPOLYGON', 'XY'
9a00: 29 0d 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  )..-------------
9a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d  ---------------.
9a50: 0a 31 0d 0a 3d 3d 3d 20 31 20 72 6f 77 20 3d 3d  .1..=== 1 row ==
9a60: 3d 20 45 78 65 63 75 74 69 6f 6e 20 74 69 6d 65  = Execution time
9a70: 3a 20 30 2e 30 31 33 0d 0a 0d 0a 53 45 4c 45 43  : 0.013....SELEC
9a80: 54 20 45 78 70 6f 72 74 53 68 70 28 27 74 72 61  T ExportShp('tra
9a90: 6e 73 69 65 6e 74 5f 74 61 62 6c 65 27 2c 20 27  nsient_table', '
9aa0: 67 65 6f 6d 27 2c 20 27 43 3a 2f 75 73 65 72 73  geom', 'C:/users
9ab0: 2f 6a 6f 65 2f 73 74 6f 72 65 64 5f 70 72 6f 63  /joe/stored_proc
9ac0: 5f 74 65 73 74 2f 63 6f 6d 5f 61 72 65 7a 7a 6f  _test/com_arezzo
9ad0: 5f 32 30 30 31 5f 33 30 30 33 27 2c 20 27 43 50  _2001_3003', 'CP
9ae0: 31 32 35 32 27 29 3b 0d 0a 2d 2d 2d 2d 2d 2d 2d  1252');..-------
9af0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9b00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 45 78  ------------..Ex
9b40: 70 6f 72 74 53 68 70 28 27 74 72 61 6e 73 69 65  portShp('transie
9b50: 6e 74 5f 74 61 62 6c 65 27 2c 20 27 67 65 6f 6d  nt_table', 'geom
9b60: 27 2c 20 27 43 3a 2f 75 73 65 72 73 2f 6a 6f 65  ', 'C:/users/joe
9b70: 2f 73 74 6f 72 65 64 5f 70 72 6f 63 5f 74 65 73  /stored_proc_tes
9b80: 74 2f 63 6f 6d 5f 61 72 65 7a 7a 6f 5f 32 30 30  t/com_arezzo_200
9b90: 31 5f 33 30 30 33 27 2c 20 27 43 50 31 32 35 32  1_3003', 'CP1252
9ba0: 27 29 0d 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ')..------------
9bb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9bc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9bd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9be0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9bf0: 2d 2d 2d 2d 2d 2d 2d 0d 0a 31 0d 0a 3d 3d 3d 20  -------..1..=== 
9c00: 31 20 72 6f 77 20 3d 3d 3d 20 45 78 65 63 75 74  1 row === Execut
9c10: 69 6f 6e 20 74 69 6d 65 3a 20 30 2e 30 30 38 0d  ion time: 0.008.
9c20: 0a 0d 0a 53 45 4c 45 43 54 20 44 72 6f 70 47 65  ...SELECT DropGe
9c30: 6f 54 61 62 6c 65 28 27 74 72 61 6e 73 69 65 6e  oTable('transien
9c40: 74 5f 74 61 62 6c 65 27 29 3b 0d 0a 2d 2d 2d 2d  t_table');..----
9c50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9c60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 44 72 6f  -----------..Dro
9c70: 70 47 65 6f 54 61 62 6c 65 28 27 74 72 61 6e 73  pGeoTable('trans
9c80: 69 65 6e 74 5f 74 61 62 6c 65 27 29 0d 0a 2d 2d  ient_table')..--
9c90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9ca0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 31  -------------..1
9cb0: 0d 0a 3d 3d 3d 20 31 20 72 6f 77 20 3d 3d 3d 20  ..=== 1 row === 
9cc0: 45 78 65 63 75 74 69 6f 6e 20 74 69 6d 65 3a 20  Execution time: 
9cd0: 30 2e 30 30 37 0d 0a 0d 0a 3d 3d 3d 3d 3d 3d 3d  0.007....=======
9ce0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9cf0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9d00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9d10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9d20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9d30: 3d 3d 0d 0a 3d 3d 20 20 20 20 20 53 51 4c 20 73  ==..==     SQL s
9d40: 65 73 73 69 6f 6e 20 65 6e 64 20 20 20 3d 20 20  ession end   =  
9d50: 20 32 30 31 37 2d 31 32 2d 32 31 20 31 32 3a 35   2017-12-21 12:5
9d60: 33 3a 30 31 20 20 20 3d 20 20 20 35 20 73 74 61  3:01   =   5 sta
9d70: 74 65 6d 65 6e 74 73 20 77 65 72 65 20 65 78 65  tements were exe
9d80: 63 75 74 65 64 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d  cuted..=========
9d90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9da0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9db0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9dc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9dd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
9de0: 0d 0a 3c 2f 76 65 72 62 61 74 69 6d 3e 0d 0a 3c  ..</verbatim>..<
9df0: 62 72 3e 3c 68 72 3e 0d 0a 3c 68 32 3e 54 75 74  br><hr>..<h2>Tut
9e00: 6f 72 69 61 6c 20 23 35 20 28 61 64 76 61 6e 63  orial #5 (advanc
9e10: 65 64 29 3c 2f 68 32 3e 0d 0a 3c 68 33 3e 35 2e  ed)</h2>..<h3>5.
9e20: 31 20 41 64 61 70 74 65 64 20 53 74 6f 72 65 64  1 Adapted Stored
9e30: 20 50 72 6f 63 65 64 75 72 65 20 66 6f 72 20 69   Procedure for i
9e40: 73 74 61 74 5f 69 74 3c 2f 68 33 3e 0d 0a 42 61  stat_it</h3>..Ba
9e50: 73 65 64 20 6f 6e 20 3c 62 3e 54 75 74 6f 72 69  sed on <b>Tutori
9e60: 61 6c 20 23 32 3c 2f 62 3e 2c 20 62 75 74 20 61  al #2</b>, but a
9e70: 64 61 70 74 65 64 20 73 6f 20 74 68 61 74 20 74  dapted so that t
9e80: 68 65 20 53 74 6f 72 65 64 20 50 72 6f 63 65 64  he Stored Proced
9e90: 75 72 65 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  ures are contain
9ea0: 65 64 20 69 6e 20 61 6e 20 65 78 74 65 72 6e 61  ed in an externa
9eb0: 6c 20 3c 62 3e 3c 69 3e 61 74 74 61 63 68 3c 2f  l <b><i>attach</
9ec0: 69 3e 3c 2f 62 3e 65 64 20 44 61 74 61 62 61 73  i></b>ed Databas
9ed0: 65 20 77 68 65 72 65 20 74 68 65 20 73 6f 75 72  e where the sour
9ee0: 63 65 20 44 61 74 61 62 61 73 65 20 73 68 6f 75  ce Database shou
9ef0: 6c 64 20 6f 6e 6c 79 20 62 65 20 72 65 61 64 20  ld only be read 
9f00: 62 75 74 20 6e 6f 74 20 63 68 61 6e 67 65 64 2e  but not changed.
9f10: 0d 0a 3c 62 72 3e 3c 62 72 3e 0d 0a 54 68 65 20  ..<br><br>..The 
9f20: 53 74 6f 72 65 64 20 50 72 6f 63 65 64 75 72 65  Stored Procedure
9f30: 20 68 61 73 20 62 65 65 6e 20 61 64 61 70 74 65   has been adapte
9f40: 64 20 74 6f 20 73 75 70 70 6f 72 74 20 61 6e 20  d to support an 
9f50: 3c 62 3e 3c 69 3e 61 74 74 61 63 68 3c 2f 69 3e  <b><i>attach</i>
9f60: 3c 2f 62 3e 65 64 20 44 61 74 61 62 61 73 65 2e  </b>ed Database.
9f70: 3c 62 72 3e 0d 0a 49 74 20 69 73 20 73 70 65 63  <br>..It is spec
9f80: 69 66 69 63 20 66 6f 72 20 74 68 65 20 53 6f 75  ific for the Sou
9f90: 72 63 65 20 3c 62 3e 69 73 74 61 74 5f 69 74 3c  rce <b>istat_it<
9fa0: 2f 62 3e 20 44 61 74 61 62 61 73 65 2e 3c 62 72  /b> Database.<br
9fb0: 3e 0d 0a 3c 62 3e 40 61 74 74 61 63 68 5f 73 63  >..<b>@attach_sc
9fc0: 68 65 6d 61 5f 6e 61 6d 65 40 3c 2f 62 3e 20 77  hema_name@</b> w
9fd0: 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ill contain the 
9fe0: 73 63 68 65 6d 61 2d 6e 61 6d 65 20 75 73 65 64  schema-name used
9ff0: 20 69 6e 20 74 68 65 20 63 61 6c 6c 69 6e 67 20   in the calling 
a000: 73 63 72 69 70 74 3a 20 0d 0a 3c 76 65 72 62 61  script: ..<verba
a010: 74 69 6d 3e 0d 0a 2d 2d 20 2d 2d 20 2d 2d 2d 2d  tim>..-- -- ----
a020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 2d  -------------- -
a040: 2d 0d 0a 2d 2d 20 41 54 54 41 43 48 20 73 6f 75  -..-- ATTACH sou
a050: 72 63 65 20 44 61 74 61 62 61 73 65 20 41 53 20  rce Database AS 
a060: 27 64 62 5f 73 6f 75 72 63 65 27 0d 0a 2d 2d 20  'db_source'..-- 
a070: 2d 2d 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  -- -------------
a080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a090: 2d 2d 2d 2d 2d 20 2d 2d 0d 0a 2d 2d 20 4e 6f 74  ----- --..-- Not
a0a0: 65 3a 20 53 6f 75 72 63 65 20 44 61 74 61 62 61  e: Source Databa
a0b0: 73 65 20 6d 75 73 74 20 62 65 20 61 74 74 61 63  se must be attac
a0c0: 68 65 64 20 62 65 66 6f 72 65 20 74 68 69 73 20  hed before this 
a0d0: 69 73 20 63 61 6c 6c 65 64 0d 0a 2d 2d 20 20 49  is called..--  I
a0e0: 66 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 69 6e  f called from in
a0f0: 73 69 64 65 20 61 20 53 74 6f 72 65 64 20 50 72  side a Stored Pr
a100: 6f 63 65 64 75 72 65 73 20 77 69 6c 6c 20 77 6f  ocedures will wo
a110: 72 6b 20 74 68 65 20 66 69 72 73 74 20 74 69 6d  rk the first tim
a120: 65 2c 0d 0a 2d 2d 20 20 20 74 68 65 6e 20 66 61  e,..--   then fa
a130: 69 6c 20 77 69 74 68 20 27 67 61 69 61 5f 73 71  il with 'gaia_sq
a140: 6c 5f 70 72 6f 63 5f 65 78 65 63 75 74 65 3a 20  l_proc_execute: 
a150: 64 61 74 61 62 61 73 65 20 64 62 5f 73 6f 75 72  database db_sour
a160: 63 65 20 69 73 20 61 6c 72 65 61 64 79 20 69 6e  ce is already in
a170: 20 75 73 65 27 0d 0a 2d 2d 20 2d 2d 20 2d 2d 2d   use'..-- -- ---
a180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a190: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20  --------------- 
a1a0: 2d 2d 0d 0a 2d 2d 20 72 65 6d 6f 76 69 6e 67 20  --..-- removing 
a1b0: 74 68 65 20 77 6f 72 6b 20 74 61 62 6c 65 20 28  the work table (
a1c0: 6a 75 73 74 20 69 6e 20 63 61 73 65 20 69 74 20  just in case it 
a1d0: 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 29 0d  already exists).
a1e0: 0a 2d 2d 20 2d 2d 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  .-- -- ---------
a1f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 2d 2d 0d 0a 53 45  --------- --..SE
a210: 4c 45 43 54 20 44 72 6f 70 47 65 6f 54 61 62 6c  LECT DropGeoTabl
a220: 65 28 27 74 72 61 6e 73 69 65 6e 74 5f 74 61 62  e('transient_tab
a230: 6c 65 27 29 3b 0d 0a 2d 2d 20 2d 2d 20 2d 2d 2d  le');..-- -- ---
a240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20  --------------- 
a260: 2d 2d 0d 0a 2d 2d 20 69 6e 73 65 72 74 69 6e 67  --..-- inserting
a270: 20 73 65 6c 65 63 74 65 64 20 69 73 74 61 74 5f   selected istat_
a280: 69 74 20 64 61 74 61 20 69 6e 74 6f 20 74 68 65  it data into the
a290: 20 77 6f 72 6b 20 74 61 62 6c 65 0d 0a 2d 2d 20   work table..-- 
a2a0: 2d 2d 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  -- -------------
a2b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a2c0: 2d 2d 2d 2d 2d 20 2d 2d 0d 0a 2d 2d 20 53 45 4c  ----- --..-- SEL
a2d0: 45 43 54 20 44 61 74 65 54 69 6d 65 28 27 6e 6f  ECT DateTime('no
a2e0: 77 27 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 29 2c  w','localtime'),
a2f0: 27 63 61 6c 6c 69 6e 67 3a 20 43 52 45 41 54 45  'calling: CREATE
a300: 20 54 41 42 4c 45 27 3b 0d 0a 43 52 45 41 54 45   TABLE';..CREATE
a310: 20 54 41 42 4c 45 20 74 72 61 6e 73 69 65 6e 74   TABLE transient
a320: 5f 74 61 62 6c 65 20 41 53 0d 0a 53 45 4c 45 43  _table AS..SELEC
a330: 54 20 69 64 2c 0d 0a 20 69 73 74 61 74 2c 0d 0a  T id,.. istat,..
a340: 20 6e 61 6d 65 2c 0d 0a 20 70 72 6f 76 69 6e 63   name,.. provinc
a350: 65 2c 0d 0a 20 72 65 67 69 6f 6e 2c 0d 0a 20 53  e,.. region,.. S
a360: 54 5f 54 72 61 6e 73 66 6f 72 6d 28 67 65 6f 6d  T_Transform(geom
a370: 2c 20 40 73 72 69 64 40 29 20 41 53 20 67 65 6f  , @srid@) AS geo
a380: 6d 0d 0a 46 52 4f 4d 20 27 40 61 74 74 61 63 68  m..FROM '@attach
a390: 5f 73 63 68 65 6d 61 5f 6e 61 6d 65 40 27 2e 6d  _schema_name@'.m
a3a0: 75 6e 69 63 69 70 61 6c 69 74 69 65 73 5f 40 79  unicipalities_@y
a3b0: 65 61 72 40 0d 0a 57 48 45 52 45 0d 0a 28 0d 0a  ear@..WHERE..(..
a3c0: 20 55 70 70 65 72 28 6e 61 6d 65 29 20 3d 20 55   Upper(name) = U
a3d0: 70 70 65 72 28 27 40 6d 75 6e 69 63 69 70 61 6c  pper('@municipal
a3e0: 69 74 79 40 27 29 20 4f 52 20 55 70 70 65 72 28  ity@') OR Upper(
a3f0: 70 72 6f 76 69 6e 63 65 29 20 3d 20 55 70 70 65  province) = Uppe
a400: 72 28 27 40 70 72 6f 76 69 6e 63 65 40 27 29 20  r('@province@') 
a410: 4f 52 20 55 70 70 65 72 28 72 65 67 69 6f 6e 29  OR Upper(region)
a420: 20 3d 20 55 70 70 65 72 28 27 40 72 65 67 69 6f   = Upper('@regio
a430: 6e 40 27 29 0d 0a 29 3b 0d 0a 2d 2d 20 2d 2d 20  n@')..);..-- -- 
a440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a460: 2d 2d 20 2d 2d 0d 0a 2d 2d 20 70 72 6f 70 65 72  -- --..-- proper
a470: 6c 79 20 72 65 63 6f 76 65 72 69 6e 67 20 74 68  ly recovering th
a480: 65 20 77 6f 72 6b 20 74 61 62 6c 65 0d 0a 2d 2d  e work table..--
a490: 20 2d 2d 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   -- ------------
a4a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a4b0: 2d 2d 2d 2d 2d 2d 20 2d 2d 0d 0a 2d 2d 20 53 45  ------ --..-- SE
a4c0: 4c 45 43 54 20 44 61 74 65 54 69 6d 65 28 27 6e  LECT DateTime('n
a4d0: 6f 77 27 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 29  ow','localtime')
a4e0: 2c 27 63 61 6c 6c 69 6e 67 3a 20 52 65 63 6f 76  ,'calling: Recov
a4f0: 65 72 47 65 6f 6d 65 74 72 79 43 6f 6c 75 6d 6e  erGeometryColumn
a500: 27 3b 0d 0a 53 45 4c 45 43 54 20 52 65 63 6f 76  ';..SELECT Recov
a510: 65 72 47 65 6f 6d 65 74 72 79 43 6f 6c 75 6d 6e  erGeometryColumn
a520: 28 27 74 72 61 6e 73 69 65 6e 74 5f 74 61 62 6c  ('transient_tabl
a530: 65 27 2c 20 27 67 65 6f 6d 27 2c 20 40 73 72 69  e', 'geom', @sri
a540: 64 40 2c 20 27 4d 55 4c 54 49 50 4f 4c 59 47 4f  d@, 'MULTIPOLYGO
a550: 4e 27 2c 20 27 58 59 27 29 3b 0d 0a 2d 2d 20 2d  N', 'XY');..-- -
a560: 2d 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  - --------------
a570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a580: 2d 2d 2d 2d 20 2d 2d 0d 0a 2d 2d 20 65 78 70 6f  ---- --..-- expo
a590: 72 74 69 6e 67 20 66 72 6f 6d 20 74 68 65 20 77  rting from the w
a5a0: 6f 72 6b 20 74 61 62 6c 65 20 69 6e 74 6f 20 74  ork table into t
a5b0: 68 65 20 53 68 61 70 65 66 69 6c 65 0d 0a 2d 2d  he Shapefile..--
a5c0: 20 2d 2d 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   -- ------------
a5d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a5e0: 2d 2d 2d 2d 2d 2d 20 2d 2d 0d 0a 2d 2d 20 53 45  ------ --..-- SE
a5f0: 4c 45 43 54 20 44 61 74 65 54 69 6d 65 28 27 6e  LECT DateTime('n
a600: 6f 77 27 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 29  ow','localtime')
a610: 2c 27 63 61 6c 6c 69 6e 67 3a 20 45 78 70 6f 72  ,'calling: Expor
a620: 74 53 68 70 27 3b 0d 0a 53 45 4c 45 43 54 20 45  tShp';..SELECT E
a630: 78 70 6f 72 74 53 68 70 28 27 74 72 61 6e 73 69  xportShp('transi
a640: 65 6e 74 5f 74 61 62 6c 65 27 2c 20 27 67 65 6f  ent_table', 'geo
a650: 6d 27 2c 20 27 40 73 68 70 5f 64 69 72 65 63 74  m', '@shp_direct
a660: 6f 72 79 40 2f 40 73 68 70 5f 66 69 6c 65 40 27  ory@/@shp_file@'
a670: 2c 20 27 43 50 31 32 35 32 27 29 3b 0d 0a 2d 2d  , 'CP1252');..--
a680: 20 2d 2d 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   -- ------------
a690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a6a0: 2d 2d 2d 2d 2d 2d 20 2d 2d 0d 0a 2d 2d 20 72 65  ------ --..-- re
a6b0: 6d 6f 76 69 6e 67 20 74 68 65 20 77 6f 72 6b 20  moving the work 
a6c0: 74 61 62 6c 65 0d 0a 2d 2d 20 2d 2d 20 2d 2d 2d  table..-- -- ---
a6d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a6e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20  --------------- 
a6f0: 2d 2d 0d 0a 2d 2d 20 53 45 4c 45 43 54 20 44 61  --..-- SELECT Da
a700: 74 65 54 69 6d 65 28 27 6e 6f 77 27 2c 27 6c 6f  teTime('now','lo
a710: 63 61 6c 74 69 6d 65 27 29 2c 27 63 61 6c 6c 69  caltime'),'calli
a720: 6e 67 3a 20 44 72 6f 70 47 65 6f 54 61 62 6c 65  ng: DropGeoTable
a730: 27 3b 0d 0a 53 45 4c 45 43 54 20 44 72 6f 70 47  ';..SELECT DropG
a740: 65 6f 54 61 62 6c 65 28 27 74 72 61 6e 73 69 65  eoTable('transie
a750: 6e 74 5f 74 61 62 6c 65 27 29 3b 0d 0a 2d 2d 20  nt_table');..-- 
a760: 2d 2d 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  -- -------------
a770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a780: 2d 2d 2d 2d 2d 20 2d 2d 0d 0a 3c 2f 76 65 72 62  ----- --..</verb
a790: 61 74 69 6d 3e 0d 0a 3c 74 61 62 6c 65 20 62 67  atim>..<table bg
a7a0: 63 6f 6c 6f 72 3d 22 23 66 38 66 38 64 38 22 20  color="#f8f8d8" 
a7b0: 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 36 22 20  cellpadding="6" 
a7c0: 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 38 22 3e  cellspacing="8">
a7d0: 3c 74 72 3e 3c 74 64 3e 0d 0a 3c 75 3e 4e 6f 74  <tr><td>..<u>Not
a7e0: 65 73 3c 2f 75 3e 3a 20 44 69 66 66 65 72 65 6e  es</u>: Differen
a7f0: 63 65 20 66 72 6f 6d 20 6d 61 69 6e 20 53 61 6d  ce from main Sam
a800: 70 6c 65 3a 3c 62 72 3e 0d 0a 54 68 65 20 63 61  ple:<br>..The ca
a810: 6c 6c 69 6e 67 20 73 63 72 69 70 74 20 77 69 6c  lling script wil
a820: 6c 20 72 75 6e 20 61 67 61 69 6e 73 74 20 74 68  l run against th
a830: 65 20 44 61 74 61 62 61 73 65 20 74 68 61 74 20  e Database that 
a840: 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 53 74  contains this St
a850: 6f 72 65 64 20 50 72 6f 63 65 64 75 72 65 20 61  ored Procedure a
a860: 6e 64 20 41 54 54 41 43 48 20 74 68 65 20 73 6f  nd ATTACH the so
a870: 75 72 63 65 20 44 61 74 61 62 61 73 65 20 75 73  urce Database us
a880: 69 6e 67 20 61 20 3c 62 3e 73 63 68 65 6d 61 2d  ing a <b>schema-
a890: 6e 61 6d 65 3c 2f 62 3e 2e 0d 0a 3c 75 6c 3e 0d  name</b>...<ul>.
a8a0: 0a 3c 6c 69 3e 55 73 65 20 6f 66 20 41 54 54 41  .<li>Use of ATTA
a8b0: 43 48 2f 44 45 54 41 43 48 20 66 72 6f 6d 20 69  CH/DETACH from i
a8c0: 6e 73 69 64 65 20 61 20 53 74 6f 72 65 64 20 50  nside a Stored P
a8d0: 72 6f 63 65 64 75 72 65 73 20 77 69 6c 6c 20 77  rocedures will w
a8e0: 6f 72 6b 20 74 68 65 20 66 69 72 73 74 20 74 69  ork the first ti
a8f0: 6d 65 2c 62 75 74 20 66 61 69 6c 20 77 68 65 6e  me,but fail when
a900: 20 63 61 6c 6c 65 64 20 61 67 61 69 6e 20 77 69   called again wi
a910: 74 68 0d 0a 3c 75 6c 3e 0d 0a 3c 6c 69 3e 27 67  th..<ul>..<li>'g
a920: 61 69 61 5f 73 71 6c 5f 70 72 6f 63 5f 65 78 65  aia_sql_proc_exe
a930: 63 75 74 65 3a 20 3c 62 3e 64 61 74 61 62 61 73  cute: <b>databas
a940: 65 20 64 62 5f 73 6f 75 72 63 65 20 69 73 20 61  e db_source is a
a950: 6c 72 65 61 64 79 20 69 6e 20 75 73 65 3c 2f 62  lready in use</b
a960: 3e 3c 2f 6c 69 3e 0d 0a 3c 2f 75 6c 3e 3c 2f 6c  ></li>..</ul></l
a970: 69 3e 0d 0a 3c 6c 69 3e 54 65 6d 70 6f 72 61 72  i>..<li>Temporar
a980: 79 20 54 41 42 4c 45 20 63 72 65 61 74 65 64 20  y TABLE created 
a990: 69 6e 20 64 75 72 69 6e 67 20 74 68 65 20 53 74  in during the St
a9a0: 6f 72 65 64 20 50 72 6f 63 65 64 75 72 65 0d 0a  ored Procedure..
a9b0: 3c 75 6c 3e 0d 0a 3c 6c 69 3e 77 69 6c 6c 20 62  <ul>..<li>will b
a9c0: 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  e contained in t
a9d0: 68 65 20 53 74 6f 72 65 64 20 50 72 6f 63 65 64  he Stored Proced
a9e0: 75 72 65 73 20 44 61 74 61 62 61 73 65 20 61 6e  ures Database an
a9f0: 64 20 6e 6f 74 20 69 6e 20 74 68 65 20 73 6f 75  d not in the sou
aa00: 72 63 65 20 44 61 74 61 62 61 73 65 2e 3c 2f 6c  rce Database.</l
aa10: 69 3e 0d 0a 3c 2f 75 6c 3e 3c 2f 6c 69 3e 0d 0a  i>..</ul></li>..
aa20: 3c 6c 69 3e 53 45 4c 45 43 54 20 6d 65 73 73 61  <li>SELECT messa
aa30: 67 65 73 20 63 61 6c 6c 65 64 20 64 75 72 69 6e  ges called durin
aa40: 67 20 74 68 65 20 53 74 6f 72 65 64 20 50 72 6f  g the Stored Pro
aa50: 63 65 64 75 72 65 0d 0a 3c 75 6c 3e 0d 0a 3c 6c  cedure..<ul>..<l
aa60: 69 3e 77 69 6c 6c 20 62 65 20 6e 6f 74 20 62 65  i>will be not be
aa70: 20 73 68 6f 77 6e 20 61 6e 64 20 68 61 76 65 20   shown and have 
aa80: 62 65 65 6e 20 63 6f 6d 6d 65 6e 74 65 64 20 6f  been commented o
aa90: 75 74 2e 3c 2f 6c 69 3e 0d 0a 3c 2f 75 6c 3e 3c  ut.</li>..</ul><
aaa0: 2f 6c 69 3e 0d 0a 3c 6c 69 3e 54 68 65 20 45 78  /li>..<li>The Ex
aab0: 70 6f 72 74 20 53 68 61 70 65 20 64 69 72 65 63  port Shape direc
aac0: 74 6f 72 79 20 61 6e 64 20 66 69 6c 65 20 6e 61  tory and file na
aad0: 6d 65 73 20 61 72 65 20 73 65 70 65 72 61 74 65  mes are seperate
aae0: 0d 0a 3c 75 6c 3e 0d 0a 3c 6c 69 3e 77 61 73 20  ..<ul>..<li>was 
aaf0: 3c 62 3e 73 68 70 5f 70 61 74 68 3c 2f 62 3e 2c  <b>shp_path</b>,
ab00: 20 6e 6f 77 20 3c 62 3e 73 68 70 5f 64 69 72 65   now <b>shp_dire
ab10: 63 74 6f 72 79 3c 2f 62 3e 20 61 6e 64 20 3c 62  ctory</b> and <b
ab20: 3e 73 68 70 5f 66 69 6c 65 3c 2f 62 3e 2e 3c 2f  >shp_file</b>.</
ab30: 6c 69 3e 0d 0a 3c 6c 69 3e 54 68 65 20 6e 65 65  li>..<li>The nee
ab40: 64 65 64 20 64 69 72 65 63 74 6f 72 79 20 22 2f  ded directory "/
ab50: 22 20 62 65 74 77 65 65 6e 20 73 68 70 5f 64 69  " between shp_di
ab60: 72 65 63 74 6f 72 79 20 61 6e 64 20 73 68 70 5f  rectory and shp_
ab70: 66 69 6c 65 20 77 69 6c 6c 20 62 65 20 61 64 64  file will be add
ab80: 65 64 20 68 65 72 65 2e 3c 2f 6c 69 3e 0d 0a 3c  ed here.</li>..<
ab90: 2f 75 6c 3e 3c 2f 6c 69 3e 0d 0a 3c 2f 75 6c 3e  /ul></li>..</ul>
aba0: 0d 0a 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61  ..</td></tr></ta
abb0: 62 6c 65 3e 0d 0a 3c 62 72 3e 3c 68 72 3e 0d 0a  ble>..<br><hr>..
abc0: 3c 68 33 3e 35 2e 32 20 43 72 65 61 74 69 6e 67  <h3>5.2 Creating
abd0: 20 53 74 6f 72 65 64 20 50 72 6f 63 65 64 75 72   Stored Procedur
abe0: 65 20 44 61 74 61 62 61 73 65 3c 2f 68 33 3e 0d  e Database</h3>.
abf0: 0a 54 68 65 20 53 74 6f 72 65 64 20 50 72 6f 63  .The Stored Proc
ac00: 65 64 75 72 65 20 61 6e 64 20 70 6f 73 73 69 62  edure and possib
ac10: 6c 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  le default value
ac20: 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  s will be stored
ac30: 20 69 6e 20 74 68 65 20 63 72 65 61 74 65 64 20   in the created 
ac40: 53 74 6f 72 65 64 20 50 72 6f 63 65 64 75 72 65  Stored Procedure
ac50: 73 20 44 61 74 61 62 61 73 65 2e 3c 62 72 3e 0d  s Database.<br>.
ac60: 0a 3c 62 3e 40 61 74 74 61 63 68 5f 73 63 68 65  .<b>@attach_sche
ac70: 6d 61 5f 6e 61 6d 65 40 3c 2f 62 3e 20 77 69 6c  ma_name@</b> wil
ac80: 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 73 63  l contain the sc
ac90: 68 65 6d 61 2d 6e 61 6d 65 20 75 73 65 64 20 69  hema-name used i
aca0: 6e 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 73 63  n the calling sc
acb0: 72 69 70 74 3a 0d 0a 3c 76 65 72 62 61 74 69 6d  ript:..<verbatim
acc0: 3e 0d 0a 2d 2d 20 2d 2d 20 2d 2d 2d 2d 2d 2d 2d  >..-- -- -------
acd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
ace0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 2d 2d 0d 0a  ----------- --..
acf0: 2d 2d 20 65 78 70 6f 72 74 20 53 50 41 54 49 41  -- export SPATIA
ad00: 4c 49 54 45 5f 53 45 43 55 52 49 54 59 3d 72 65  LITE_SECURITY=re
ad10: 6c 61 78 65 64 0d 0a 2d 2d 20 72 6d 20 73 74 6f  laxed..-- rm sto
ad20: 72 65 64 5f 70 72 6f 63 65 64 75 72 65 5f 64 62  red_procedure_db
ad30: 2e 64 62 0d 0a 2d 2d 20 73 70 61 74 69 61 6c 69  .db..-- spatiali
ad40: 74 65 20 73 74 6f 72 65 64 5f 70 72 6f 63 65 64  te stored_proced
ad50: 75 72 65 5f 64 62 2e 64 62 20 0d 0a 3c 2f 76 65  ure_db.db ..</ve
ad60: 72 62 61 74 69 6d 3e 20 0d 0a 3c 74 61 62 6c 65  rbatim> ..<table
ad70: 20 62 67 63 6f 6c 6f 72 3d 22 23 66 38 66 38 64   bgcolor="#f8f8d
ad80: 38 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  8" cellpadding="
ad90: 36 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22  6" cellspacing="
ada0: 38 22 3e 3c 74 72 3e 3c 74 64 3e 0d 0a 3c 75 3e  8"><tr><td>..<u>
adb0: 4e 6f 74 65 73 3c 2f 75 3e 3a 20 44 69 66 66 65  Notes</u>: Diffe
adc0: 72 65 6e 63 65 20 66 72 6f 6d 20 6d 61 69 6e 20  rence from main 
add0: 53 61 6d 70 6c 65 3a 0d 0a 3c 75 6c 3e 0d 0a 3c  Sample:..<ul>..<
ade0: 6c 69 3e 54 68 65 20 63 61 6c 6c 65 64 20 53 74  li>The called St
adf0: 6f 72 65 64 20 50 72 6f 63 65 64 75 72 65 20 69  ored Procedure i
ae00: 73 20 73 70 65 63 69 66 69 63 20 74 6f 20 74 68  s specific to th
ae10: 65 20 41 54 54 41 43 48 65 64 20 73 6f 75 72 63  e ATTACHed sourc
ae20: 65 20 44 61 74 61 62 61 73 65 2e 0d 0a 3c 75 6c  e Database...<ul
ae30: 3e 0d 0a 3c 6c 69 3e 63 61 72 65 20 6d 75 73 74  >..<li>care must
ae40: 20 62 65 20 74 61 6b 65 6e 20 74 68 61 74 20 74   be taken that t
ae50: 68 65 79 20 62 6f 74 68 20 6d 61 74 63 68 3c 2f  hey both match</
ae60: 6c 69 3e 0d 0a 3c 2f 75 6c 3e 3c 2f 6c 69 3e 0d  li>..</ul></li>.
ae70: 0a 3c 6c 69 3e 41 20 64 69 66 66 65 72 65 6e 74  .<li>A different
ae80: 20 53 6f 75 72 63 65 20 44 61 74 61 62 61 73 65   Source Database
ae90: 20 63 61 6e 20 62 65 20 61 64 64 65 64 20 64 75   can be added du
aea0: 72 69 6e 67 20 74 68 65 20 63 61 6c 6c 69 6e 67  ring the calling
aeb0: 20 73 63 72 69 70 74 0d 0a 3c 75 6c 3e 0d 0a 3c   script..<ul>..<
aec0: 6c 69 3e 74 68 61 74 20 6d 75 73 74 20 63 61 6c  li>that must cal
aed0: 6c 20 61 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  l a correspondin
aee0: 67 20 45 78 70 6f 72 74 20 53 74 6f 72 65 64 20  g Export Stored 
aef0: 50 72 6f 63 65 64 75 72 65 2e 3c 2f 6c 69 3e 0d  Procedure.</li>.
af00: 0a 3c 2f 75 6c 3e 3c 2f 6c 69 3e 0d 0a 3c 6c 69  .</ul></li>..<li
af10: 3e 54 68 65 20 53 68 61 70 65 20 6f 75 74 70 75  >The Shape outpu
af20: 74 20 64 69 72 65 63 74 6f 72 79 0d 0a 3c 75 6c  t directory..<ul
af30: 3e 0d 0a 3c 6c 69 3e 6d 61 79 20 62 65 2c 20 62  >..<li>may be, b
af40: 75 74 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 74  ut must not be t
af50: 68 65 20 73 61 6d 65 20 66 6f 72 20 61 6c 6c 20  he same for all 
af60: 65 78 70 6f 72 74 65 64 20 53 68 61 70 65 73 2e  exported Shapes.
af70: 3c 2f 6c 69 3e 0d 0a 3c 2f 75 6c 3e 3c 2f 6c 69  </li>..</ul></li
af80: 3e 0d 0a 3c 2f 75 6c 3e 0d 0a 3c 2f 74 64 3e 3c  >..</ul>..</td><
af90: 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0d 0a 3c 62  /tr></table>..<b
afa0: 72 3e 3c 68 72 3e 0d 0a 3c 68 33 3e 35 2e 33 20  r><hr>..<h3>5.3 
afb0: 54 68 65 20 63 61 6c 6c 69 6e 67 20 73 63 72 69  The calling scri
afc0: 70 74 2c 20 70 6f 73 73 69 62 6c 79 20 63 61 6c  pt, possibly cal
afd0: 6c 69 6e 67 20 64 69 66 66 65 72 65 6e 63 65 20  ling difference 
afe0: 53 74 6f 72 65 64 20 50 72 6f 63 65 64 75 72 65  Stored Procedure
aff0: 73 20 61 6e 64 20 73 6f 75 72 63 65 20 44 61 74  s and source Dat
b000: 61 62 61 73 65 73 3c 2f 68 33 3e 0d 0a 54 68 65  abases</h3>..The
b010: 20 53 74 6f 72 65 64 20 50 72 6f 63 65 64 75 72   Stored Procedur
b020: 65 20 61 6e 64 20 70 6f 73 73 69 62 6c 65 20 64  e and possible d
b030: 65 66 61 75 6c 74 20 76 61 6c 75 65 73 20 77 69  efault values wi
b040: 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ll be stored in 
b050: 74 68 65 20 63 72 65 61 74 65 64 20 53 74 6f 72  the created Stor
b060: 65 64 20 50 72 6f 63 65 64 75 72 65 73 20 44 61  ed Procedures Da
b070: 74 61 62 61 73 65 2e 3c 62 72 3e 0d 0a 44 69 66  tabase.<br>..Dif
b080: 66 65 72 65 6e 74 20 53 6f 75 72 63 65 20 44 61  ferent Source Da
b090: 74 61 62 61 73 65 73 2c 20 75 73 69 6e 67 20 64  tabases, using d
b0a0: 69 66 66 65 72 65 6e 74 20 53 74 6f 72 65 64 20  ifferent Stored 
b0b0: 50 72 6f 63 65 64 75 72 65 2c 20 63 6f 75 6c 64  Procedure, could
b0c0: 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20   be used within 
b0d0: 6f 6e 65 20 73 63 72 69 70 74 3a 20 0d 0a 3c 76  one script: ..<v
b0e0: 65 72 62 61 74 69 6d 3e 2d 2d 20 2d 2d 20 2d 2d  erbatim>-- -- --
b0f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b110: 20 2d 2d 0d 0a 2d 2d 20 65 78 70 6f 72 74 20 53   --..-- export S
b120: 50 41 54 49 41 4c 49 54 45 5f 53 45 43 55 52 49  PATIALITE_SECURI
b130: 54 59 3d 72 65 6c 61 78 65 64 0d 0a 2d 2d 20 73  TY=relaxed..-- s
b140: 70 61 74 69 61 6c 69 74 65 20 73 74 6f 72 65 64  patialite stored
b150: 5f 70 72 6f 63 65 64 75 72 65 5f 64 62 2e 64 62  _procedure_db.db
b160: 20 20 63 72 65 61 74 65 64 20 77 69 74 68 20 27    created with '
b170: 73 74 6f 72 65 2e 65 78 70 6f 72 74 5f 73 68 61  store.export_sha
b180: 70 65 2e 73 70 2e 73 71 6c 27 0d 0a 2d 2d 20 54  pe.sp.sql'..-- T
b190: 65 6d 70 6f 72 61 72 79 20 54 41 42 4c 45 53 20  emporary TABLES 
b1a0: 63 72 65 61 74 65 64 20 69 6e 20 64 75 72 69 6e  created in durin
b1b0: 67 20 74 68 65 20 53 74 6f 72 65 64 20 50 72 6f  g the Stored Pro
b1c0: 63 65 64 75 72 65 0d 0a 2d 2d 20 20 77 69 6c 6c  cedure..--  will
b1d0: 20 62 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e   be contained in
b1e0: 20 74 68 65 20 53 74 6f 72 65 64 20 50 72 6f 63   the Stored Proc
b1f0: 65 64 75 72 65 73 20 44 61 74 61 62 61 73 65 20  edures Database 
b200: 61 6e 64 20 6e 6f 74 20 69 6e 20 74 68 65 20 73  and not in the s
b210: 6f 75 72 63 65 20 44 61 74 61 62 61 73 65 2e 0d  ource Database..
b220: 0a 2d 2d 20 2d 2d 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  .-- -- ---------
b230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 2d 2d 0d 0a 2d 2d  --------- --..--
b250: 20 55 73 65 20 61 20 4c 6f 67 2d 66 69 6c 65 20   Use a Log-file 
b260: 66 6f 72 20 64 65 62 75 67 67 69 6e 67 0d 0a 2d  for debugging..-
b270: 2d 20 2d 3e 20 77 69 6c 6c 20 62 65 20 77 72 69  - -> will be wri
b280: 74 74 65 6e 20 69 6e 20 74 68 65 20 73 61 6d 65  tten in the same
b290: 20 64 69 72 65 63 74 6f 72 79 20 61 73 20 74 68   directory as th
b2a0: 65 20 73 63 72 69 70 74 0d 0a 2d 2d 20 2d 2d 20  e script..-- -- 
b2b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b2c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b2d0: 2d 2d 20 2d 2d 0d 0a 53 45 4c 45 43 54 20 53 71  -- --..SELECT Sq
b2e0: 6c 50 72 6f 63 5f 53 65 74 4c 6f 67 66 69 6c 65  lProc_SetLogfile
b2f0: 20 28 20 27 6c 6f 67 2e 73 65 6c 65 63 74 2e 65   ( 'log.select.e
b300: 78 70 6f 72 74 5f 73 68 61 70 65 5f 66 72 6f 6d  xport_shape_from
b310: 5f 64 62 2e 74 78 74 27 20 29 3b 0d 0a 2d 2d 20  _db.txt' );..-- 
b320: 2d 2d 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  -- -------------
b330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b340: 2d 2d 2d 2d 2d 20 2d 2d 0d 0a 2d 2d 20 41 74 74  ----- --..-- Att
b350: 61 63 68 20 73 6f 75 72 63 65 20 44 61 74 61 62  ach source Datab
b360: 61 73 65 20 66 6f 72 20 75 73 65 20 66 72 6f 6d  ase for use from
b370: 20 74 68 69 73 20 73 63 72 69 70 74 0d 0a 2d 2d   this script..--
b380: 20 4e 6f 74 65 3a 20 75 73 65 20 6f 66 20 41 54   Note: use of AT
b390: 54 41 43 48 2f 44 45 54 41 43 48 20 66 72 6f 6d  TACH/DETACH from
b3a0: 20 69 6e 73 69 64 65 20 61 0d 0a 2d 2d 20 20 53   inside a..--  S
b3b0: 74 6f 72 65 64 20 50 72 6f 63 65 64 75 72 65 73  tored Procedures
b3c0: 20 77 69 6c 6c 20 77 6f 72 6b 20 74 68 65 20 66   will work the f
b3d0: 69 72 73 74 20 74 69 6d 65 2c 0d 0a 2d 2d 20 20  irst time,..--  
b3e0: 20 74 68 65 6e 20 66 61 69 6c 20 77 69 74 68 20   then fail with 
b3f0: 27 67 61 69 61 5f 73 71 6c 5f 70 72 6f 63 5f 65  'gaia_sql_proc_e
b400: 78 65 63 75 74 65 3a 20 64 61 74 61 62 61 73 65  xecute: database
b410: 20 64 62 5f 73 6f 75 72 63 65 20 69 73 20 61 6c   db_source is al
b420: 72 65 61 64 79 20 69 6e 20 75 73 65 27 0d 0a 2d  ready in use'..-
b430: 2d 20 2d 2d 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  - -- -----------
b440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b450: 2d 2d 2d 2d 2d 2d 2d 20 2d 2d 0d 0a 2d 2d 20 53  ------- --..-- S
b460: 45 4c 45 43 54 20 44 61 74 65 54 69 6d 65 28 27  ELECT DateTime('
b470: 6e 6f 77 27 2c 27 6c 6f 63 61 6c 74 69 6d 65 27  now','localtime'
b480: 29 2c 27 63 61 6c 6c 69 6e 67 3a 20 41 54 54 41  ),'calling: ATTA
b490: 43 48 20 44 41 54 41 42 41 53 45 27 3b 0d 0a 2d  CH DATABASE';..-
b4a0: 2d 20 2d 2d 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  - -- -----------
b4b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b4c0: 2d 2d 2d 2d 2d 2d 2d 20 2d 2d 0d 0a 2d 2d 20 54  ------- --..-- T
b4d0: 68 65 20 75 73 65 64 20 73 63 68 65 6d 61 2d 6e  he used schema-n
b4e0: 61 6d 65 20 6d 75 73 74 20 62 65 20 70 61 73 73  ame must be pass
b4f0: 65 64 20 6f 6e 20 74 6f 20 74 68 65 20 63 61 6c  ed on to the cal
b500: 6c 65 64 20 53 74 6f 72 65 64 20 50 72 6f 63 65  led Stored Proce
b510: 64 75 72 65 0d 0a 2d 2d 20 2d 3e 20 27 64 62 5f  dure..-- -> 'db_
b520: 73 6f 75 72 63 65 27 0d 0a 2d 2d 20 2d 2d 20 2d  source'..-- -- -
b530: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b540: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b550: 2d 20 2d 2d 0d 0a 41 54 54 41 43 48 20 44 41 54  - --..ATTACH DAT
b560: 41 42 41 53 45 20 27 73 6f 75 72 63 65 5f 64 62  ABASE 'source_db
b570: 2f 73 70 5f 73 61 6d 70 6c 65 5f 64 62 2e 64 62  /sp_sample_db.db
b580: 27 20 41 53 20 64 62 5f 73 6f 75 72 63 65 3b 0d  ' AS db_source;.
b590: 0a 2d 2d 20 2d 2d 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  .-- -- ---------
b5a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b5b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 2d 2d 0d 0a 2d 2d  --------- --..--
b5c0: 20 53 45 4c 45 43 54 20 44 61 74 65 54 69 6d 65   SELECT DateTime
b5d0: 28 27 6e 6f 77 27 2c 27 6c 6f 63 61 6c 74 69 6d  ('now','localtim
b5e0: 65 27 29 2c 22 63 61 6c 6c 69 6e 67 3a 20 27 65  e'),"calling: 'e
b5f0: 78 70 6f 72 74 5f 73 68 61 70 65 27 20 66 6f 72  xport_shape' for
b600: 20 4c 61 7a 69 6f 22 3b 0d 0a 53 45 4c 45 43 54   Lazio";..SELECT
b610: 20 53 74 6f 72 65 64 50 72 6f 63 5f 45 78 65 63   StoredProc_Exec
b620: 75 74 65 28 20 27 65 78 70 6f 72 74 5f 73 68 61  ute( 'export_sha
b630: 70 65 27 2c 0d 0a 20 20 20 20 27 40 61 74 74 61  pe',..    '@atta
b640: 63 68 5f 73 63 68 65 6d 61 5f 6e 61 6d 65 40 3d  ch_schema_name@=
b650: 64 62 5f 73 6f 75 72 63 65 27 2c 0d 0a 20 20 20  db_source',..   
b660: 20 27 40 79 65 61 72 40 3d 32 30 30 31 27 2c 0d   '@year@=2001',.
b670: 0a 20 20 20 20 27 40 73 72 69 64 40 3d 33 30 30  .    '@srid@=300
b680: 34 27 2c 0d 0a 20 20 20 20 27 40 72 65 67 69 6f  4',..    '@regio
b690: 6e 40 3d 4c 61 7a 69 6f 27 2c 0d 0a 20 20 20 20  n@=Lazio',..    
b6a0: 27 40 73 68 70 5f 66 69 6c 65 40 3d 6c 61 7a 69  '@shp_file@=lazi
b6b0: 6f 5f 32 30 30 31 5f 33 30 30 34 27 20 29 3b 0d  o_2001_3004' );.
b6c0: 0a 2d 2d 20 2d 2d 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  .-- -- ---------
b6d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b6e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 2d 2d 0d 0a 2d 2d  --------- --..--
b6f0: 20 53 45 4c 45 43 54 20 44 61 74 65 54 69 6d 65   SELECT DateTime
b700: 28 27 6e 6f 77 27 2c 27 6c 6f 63 61 6c 74 69 6d  ('now','localtim
b710: 65 27 29 2c 22 63 61 6c 6c 69 6e 67 3a 20 27 65  e'),"calling: 'e
b720: 78 70 6f 72 74 5f 73 68 61 70 65 27 20 66 6f 72  xport_shape' for
b730: 20 50 75 67 6c 69 61 22 3b 0d 0a 53 45 4c 45 43   Puglia";..SELEC
b740: 54 20 53 74 6f 72 65 64 50 72 6f 63 5f 45 78 65  T StoredProc_Exe
b750: 63 75 74 65 28 20 27 65 78 70 6f 72 74 5f 73 68  cute( 'export_sh
b760: 61 70 65 27 2c 0d 0a 20 20 20 20 27 40 61 74 74  ape',..    '@att
b770: 61 63 68 5f 73 63 68 65 6d 61 5f 6e 61 6d 65 40  ach_schema_name@
b780: 3d 64 62 5f 73 6f 75 72 63 65 27 2c 0d 0a 20 20  =db_source',..  
b790: 20 20 27 40 79 65 61 72 40 3d 31 39 39 31 27 2c    '@year@=1991',
b7a0: 0d 0a 20 20 20 20 27 40 73 72 69 64 40 3d 34 33  ..    '@srid@=43
b7b0: 32 36 27 2c 0d 0a 20 20 20 20 27 40 72 65 67 69  26',..    '@regi
b7c0: 6f 6e 40 3d 70 75 67 6c 69 61 27 2c 0d 0a 20 20  on@=puglia',..  
b7d0: 20 20 27 40 73 68 70 5f 66 69 6c 65 40 3d 70 75    '@shp_file@=pu
b7e0: 67 6c 69 61 5f 31 39 39 31 5f 34 33 32 36 27 20  glia_1991_4326' 
b7f0: 29 3b 0d 0a 2d 2d 20 2d 2d 20 2d 2d 2d 2d 2d 2d  );..-- -- ------
b800: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b810: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 2d 2d 0d  ------------ --.
b820: 0a 2d 2d 20 53 45 4c 45 43 54 20 44 61 74 65 54  .-- SELECT DateT
b830: 69 6d 65 28 27 6e 6f 77 27 2c 27 6c 6f 63 61 6c  ime('now','local
b840: 74 69 6d 65 27 29 2c 22 63 61 6c 6c 69 6e 67 3a  time'),"calling:
b850: 20 27 65 78 70 6f 72 74 5f 73 68 61 70 65 27 20   'export_shape' 
b860: 66 6f 72 20 41 72 65 7a 7a 6f 22 3b 0d 0a 53 45  for Arezzo";..SE
b870: 4c 45 43 54 20 53 74 6f 72 65 64 50 72 6f 63 5f  LECT StoredProc_
b880: 45 78 65 63 75 74 65 28 20 27 65 78 70 6f 72 74  Execute( 'export
b890: 5f 73 68 61 70 65 27 2c 0d 0a 20 20 20 20 27 40  _shape',..    '@
b8a0: 61 74 74 61 63 68 5f 73 63 68 65 6d 61 5f 6e 61  attach_schema_na
b8b0: 6d 65 40 3d 64 62 5f 73 6f 75 72 63 65 27 2c 0d  me@=db_source',.
b8c0: 0a 20 20 20 20 27 40 79 65 61 72 40 3d 32 30 31  .    '@year@=201
b8d0: 31 27 2c 0d 0a 20 20 20 20 27 40 73 72 69 64 40  1',..    '@srid@
b8e0: 3d 33 30 30 33 27 2c 0d 0a 20 20 20 20 27 40 70  =3003',..    '@p
b8f0: 72 6f 76 69 6e 63 65 40 3d 41 52 45 5a 5a 4f 27  rovince@=AREZZO'
b900: 2c 0d 0a 20 20 20 20 27 40 73 68 70 5f 66 69 6c  ,..    '@shp_fil
b910: 65 40 3d 70 72 6f 76 69 6e 63 65 5f 61 72 65 7a  e@=province_arez
b920: 7a 6f 5f 32 30 31 31 5f 33 30 30 33 27 20 29 3b  zo_2011_3003' );
b930: 0d 0a 2d 2d 20 2d 2d 20 2d 2d 2d 2d 2d 2d 2d 2d  ..-- -- --------
b940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 2d 2d 0d 0a 2d  ---------- --..-
b960: 2d 20 53 45 4c 45 43 54 20 44 61 74 65 54 69 6d  - SELECT DateTim
b970: 65 28 27 6e 6f 77 27 2c 27 6c 6f 63 61 6c 74 69  e('now','localti
b980: 6d 65 27 29 2c 22 63 61 6c 6c 69 6e 67 3a 20 27  me'),"calling: '
b990: 65 78 70 6f 72 74 5f 73 68 61 70 65 27 20 66 6f  export_shape' fo
b9a0: 72 20 41 72 65 7a 7a 6f 22 3b 0d 0a 53 45 4c 45  r Arezzo";..SELE
b9b0: 43 54 20 53 74 6f 72 65 64 50 72 6f 63 5f 45 78  CT StoredProc_Ex
b9c0: 65 63 75 74 65 28 20 27 65 78 70 6f 72 74 5f 73  ecute( 'export_s
b9d0: 68 61 70 65 27 2c 0d 0a 20 20 20 20 27 40 61 74  hape',..    '@at
b9e0: 74 61 63 68 5f 73 63 68 65 6d 61 5f 6e 61 6d 65  tach_schema_name
b9f0: 40 3d 64 62 5f 73 6f 75 72 63 65 27 2c 0d 0a 20  @=db_source',.. 
ba00: 20 20 20 27 40 79 65 61 72 40 3d 32 30 30 31 27     '@year@=2001'
ba10: 2c 0d 0a 20 20 20 20 27 40 73 72 69 64 40 3d 33  ,..    '@srid@=3
ba20: 30 30 33 27 2c 0d 0a 20 20 20 20 27 40 6d 75 6e  003',..    '@mun
ba30: 69 63 69 70 61 6c 69 74 79 40 3d 41 72 65 7a 7a  icipality@=Arezz
ba40: 6f 27 2c 0d 0a 20 20 20 20 27 40 73 68 70 5f 66  o',..    '@shp_f
ba50: 69 6c 65 40 3d 6d 75 6e 69 63 69 70 61 6c 69 74  ile@=municipalit
ba60: 79 5f 61 72 65 7a 7a 6f 5f 32 30 30 31 5f 33 30  y_arezzo_2001_30
ba70: 30 33 27 20 29 3b 0d 0a 2d 2d 20 2d 2d 20 2d 2d  03' );..-- -- --
ba80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
ba90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
baa0: 20 2d 2d 0d 0a 2d 2d 20 44 45 54 41 43 48 20 73   --..-- DETACH s
bab0: 6f 75 72 63 65 20 44 61 74 61 62 61 73 65 0d 0a  ource Database..
bac0: 2d 2d 20 54 68 65 20 75 73 65 64 20 73 63 68 65  -- The used sche
bad0: 6d 61 2d 6e 61 6d 65 20 6d 75 73 74 20 62 65 20  ma-name must be 
bae0: 75 73 65 64 20 68 65 72 65 0d 0a 2d 2d 20 2d 3e  used here..-- ->
baf0: 20 27 64 62 5f 73 6f 75 72 63 65 27 0d 0a 2d 2d   'db_source'..--
bb00: 20 2d 2d 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   -- ------------
bb10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
bb20: 2d 2d 2d 2d 2d 2d 20 2d 2d 0d 0a 2d 2d 20 53 45  ------ --..-- SE
bb30: 4c 45 43 54 20 44 61 74 65 54 69 6d 65 28 27 6e  LECT DateTime('n
bb40: 6f 77 27 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 29  ow','localtime')
bb50: 2c 27 63 61 6c 6c 69 6e 67 3a 20 44 45 54 41 43  ,'calling: DETAC
bb60: 48 20 44 41 54 41 42 41 53 45 27 3b 0d 0a 44 45  H DATABASE';..DE
bb70: 54 41 43 48 20 44 41 54 41 42 41 53 45 20 64 62  TACH DATABASE db
bb80: 5f 73 6f 75 72 63 65 3b 0d 0a 2d 2d 20 2d 2d 20  _source;..-- -- 
bb90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
bba0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
bbb0: 2d 2d 20 2d 2d 0d 0a 2d 2d 20 53 45 4c 45 43 54  -- --..-- SELECT
bbc0: 20 44 61 74 65 54 69 6d 65 28 27 6e 6f 77 27 2c   DateTime('now',
bbd0: 27 6c 6f 63 61 6c 74 69 6d 65 27 29 2c 22 63 61  'localtime'),"ca
bbe0: 6c 6c 69 6e 67 3a 20 53 71 6c 50 72 6f 63 5f 47  lling: SqlProc_G
bbf0: 65 74 4c 61 73 74 45 72 72 6f 72 22 3b 0d 0a 53  etLastError";..S
bc00: 45 4c 45 43 54 20 53 71 6c 50 72 6f 63 5f 47 65  ELECT SqlProc_Ge
bc10: 74 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a 2d  tLastError();..-
bc20: 2d 20 2d 2d 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  - -- -----------
bc30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
bc40: 2d 2d 2d 2d 2d 2d 2d 20 2d 2d 0d 0a 3c 2f 76 65  ------- --..</ve
bc50: 72 62 61 74 69 6d 3e 0d 0a 3c 74 61 62 6c 65 20  rbatim>..<table 
bc60: 62 67 63 6f 6c 6f 72 3d 22 23 66 38 66 38 64 38  bgcolor="#f8f8d8
bc70: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 36  " cellpadding="6
bc80: 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 38  " cellspacing="8
bc90: 22 3e 3c 74 72 3e 3c 74 64 3e 0d 0a 3c 75 3e 4e  "><tr><td>..<u>N
bca0: 6f 74 65 73 3c 2f 75 3e 3a 20 44 69 66 66 65 72  otes</u>: Differ
bcb0: 65 6e 63 65 20 66 72 6f 6d 20 6d 61 69 6e 20 53  ence from main S
bcc0: 61 6d 70 6c 65 3a 0d 0a 3c 75 6c 3e 0d 0a 3c 6c  ample:..<ul>..<l
bcd0: 69 3e 54 68 65 20 63 61 6c 6c 65 64 20 53 74 6f  i>The called Sto
bce0: 72 65 64 20 50 72 6f 63 65 64 75 72 65 20 61 73  red Procedure as
bcf0: 73 75 6d 65 73 20 74 68 61 74 20 74 68 65 20 73  sumes that the s
bd00: 6f 75 72 63 65 20 44 61 74 61 62 61 73 65 20 68  ource Database h
bd10: 61 73 20 62 65 65 6e 20 41 54 54 41 43 48 65 64  as been ATTACHed
bd20: 2c 20 75 73 69 6e 67 20 74 68 65 20 67 69 76 65  , using the give
bd30: 6e 20 3c 62 3e 61 74 74 61 63 68 5f 73 63 68 65  n <b>attach_sche
bd40: 6d 61 5f 6e 61 6d 65 3c 2f 62 3e 2e 0d 0a 3c 75  ma_name</b>...<u
bd50: 6c 3e 0d 0a 3c 6c 69 3e 69 66 20 74 68 65 20 75  l>..<li>if the u
bd60: 73 65 64 20 73 63 68 65 6d 61 2d 6e 61 6d 65 20  sed schema-name 
bd70: 3c 62 3e 69 73 20 6e 6f 74 3c 2f 62 3e 20 74 68  <b>is not</b> th
bd80: 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 73 65  e same as the se
bd90: 74 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2c  t default value,
bda0: 20 69 74 20 3c 62 3e 6d 75 73 74 3c 2f 62 3e 20   it <b>must</b> 
bdb0: 62 65 20 67 69 76 65 6e 20 61 73 20 61 20 53 74  be given as a St
bdc0: 6f 72 65 64 20 50 72 6f 63 65 64 75 72 65 20 70  ored Procedure p
bdd0: 61 72 61 6d 65 74 65 72 2e 3c 2f 6c 69 3e 0d 0a  arameter.</li>..
bde0: 3c 2f 75 6c 3e 3c 2f 6c 69 3e 0d 0a 3c 6c 69 3e  </ul></li>..<li>
bdf0: 54 68 65 20 53 68 61 70 65 20 6f 75 74 70 75 74  The Shape output
be00: 20 66 69 6e 65 2d 6e 61 6d 65 0d 0a 3c 75 6c 3e   fine-name..<ul>
be10: 0d 0a 3c 6c 69 3e 6d 75 73 74 20 62 65 20 3c 62  ..<li>must be <b
be20: 3e 75 6e 69 71 75 65 3c 2f 62 3e 20 77 69 74 68  >unique</b> with
be30: 69 6e 20 74 68 65 20 53 68 61 70 65 20 6f 75 74  in the Shape out
be40: 70 75 74 20 64 69 72 65 63 74 6f 72 79 2e 3c 2f  put directory.</
be50: 6c 69 3e 0d 0a 3c 2f 75 6c 3e 3c 2f 6c 69 3e 0d  li>..</ul></li>.
be60: 0a 3c 6c 69 3e 54 68 65 20 53 68 61 70 65 20 6f  .<li>The Shape o
be70: 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 0d  utput directory.
be80: 0a 3c 75 6c 3e 0d 0a 3c 6c 69 3e 6d 61 79 20 62  .<ul>..<li>may b
be90: 65 2c 20 62 75 74 20 6d 75 73 74 20 6e 6f 74 20  e, but must not 
bea0: 62 65 20 74 68 65 20 73 61 6d 65 20 66 6f 72 20  be the same for 
beb0: 61 6c 6c 20 65 78 70 6f 72 74 65 64 20 53 68 61  all exported Sha
bec0: 70 65 73 2e 3c 2f 6c 69 3e 0d 0a 3c 2f 75 6c 3e  pes.</li>..</ul>
bed0: 3c 2f 6c 69 3e 0d 0a 3c 2f 75 6c 3e 0d 0a 3c 2f  </li>..</ul>..</
bee0: 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e  td></tr></table>
bef0: 0d 0a 3c 62 72 3e 3c 68 72 3e 0d 0a 3c 74 61 62  ..<br><hr>..<tab
bf00: 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25 22 3e  le width="100%">
bf10: 3c 74 72 3e 0d 0a 3c 74 64 20 77 69 64 74 68 3d  <tr>..<td width=
bf20: 22 33 33 25 22 20 61 6c 69 67 6e 3d 22 6c 65 66  "33%" align="lef
bf30: 74 22 3e 3c 2f 74 64 3e 0d 0a 3c 74 64 20 61 6c  t"></td>..<td al
bf40: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 42 61 63  ign="center">Bac
bf50: 6b 20 74 6f 20 3c 61 20 68 72 65 66 3d 22 68 74  k to <a href="ht
bf60: 74 70 73 3a 2f 2f 77 77 77 2e 67 61 69 61 2d 67  tps://www.gaia-g
bf70: 69 73 2e 69 74 2f 66 6f 73 73 69 6c 2f 6c 69 62  is.it/fossil/lib
bf80: 73 70 61 74 69 61 6c 69 74 65 2f 77 69 6b 69 3f  spatialite/wiki?
bf90: 6e 61 6d 65 3d 35 2e 30 2e 30 2d 64 6f 63 22 3e  name=5.0.0-doc">
bfa0: 35 2e 30 2e 30 2d 64 6f 63 20 6d 61 69 6e 20 70  5.0.0-doc main p
bfb0: 61 67 65 3c 2f 61 3e 3c 2f 74 64 3e 0d 0a 3c 74  age</a></td>..<t
bfc0: 64 20 77 69 64 74 68 3d 22 33 33 25 22 20 61 6c  d width="33%" al
bfd0: 69 67 6e 3d 22 72 69 67 68 74 22 3e 3c 2f 74 64  ign="right"></td
bfe0: 3e 0d 0a 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e  >..</tr></table>
bff0: 0a 5a 20 36 63 31 64 37 31 66 35 34 66 62 61 30  .Z 6c1d71f54fba0
c000: 30 64 66 34 37 66 34 64 31 64 62 61 39 36 33 37  0df47f4d1dba9637
c010: 36 34 61 0a                                      64a.