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.