ࡱ> [ }Kbjbj Sjj}Gl L%rrrrr999c%e%e%e%e%e%e%$& (x%9999%!rr-%!!!9rrc%!9c%!!K$: %,K% rf 0ꖛ,X7% W% %0%A% 2)!2)W%!Stored Procedure Concept Stored procedures are user-written structured query language (SQL) programs that are stored at the data base server and can be invoked by client applications. A stored procedure can contain most statements that an application program usually contains. Stored procedures can execute SQL statements at the server as well as application logic for a specific function. A stored procedure can be written in many different languages, such as COBOL, OO COBOL, C, C++, PL/I, FORTRAN, Assembler, and REXX. The language in which stored procedures are written depends on the platform where the data base server is installed. Local client applications, remote Distributed Relational Database Architecture (DRDA), or remote data services (private protocol) can invoke the stored procedure by issuing the SQL CALL statement. The SQL CALL statement is part of the International Organization for Standardization/American National Standards Institute (ISO/ANSI) proposal for SQL3, an open solution for invoking stored procedures among database management system vendors that support the SQL ISO/ANSI standard. The client program can pass parameters to the stored procedure and receive parameters from the stored procedure. The DRDA architecture allows SQL CALL statements to use static or dynamic SQL. The version of the products used during this project only supports the SQL CALL statement as static SQL. Nevertheless, parameters in the CALL statement, including the stored procedure name, can be supplied at execution time. Thus, you can use the SQL CALL statement to dynamically invoke any procedure supported by the data base. The client program and the stored procedure do not have to be written in the same programming language. For example, a C client program can invoke a COBOL stored procedure. Why Use Stored Procedures? In previous releases of DRDA, the client system performed all application logic. The server was responsible only for SQL processing on behalf of the client. In such an environment, all database accesses must go across the network, resulting in poor performance in some cases. Figure 1 shows an example of the processing for a client/server application without using stored procedures.  Figure 1. Processing without Stored Procedures This is a relatively simple model, which makes the application program easy to design and implement. Because all application code resides at the client, a single application programmer can take responsibility for the entire application. However, there are some disadvantages to using this approach. Because the application logic runs only on the client workstations, additional network input/output (I/O) operations are required for most SQL requests. These additional operations can result in poor performance. This approach also requires the client program to have detailed knowledge of the server's database design. Thus, every change in the database design at the server requires a corresponding change in all client programs accessing the database. Also, because the programs run at the client workstations, it is often complicated to manage and maintain the copies there. Stored procedures enable you to encapsulate many of your application's SQL statements into a program that is stored at the data base server. The client can invoke the stored procedure by using only one SQL statement, thus reducing the network traffic to a single send and receive operation for a series of SQL statements. It is also easier to manage and maintain programs that run at the server than it is to manage and maintain many copies at the client machines. Stored procedures enable you to split the application logic between the client and the server. You can use this technique to prevent the client application from manipulating the contents of sensitive server data. You can also use it to encapsulate business logic into programs at the server. Figure 2 shows an example of the processing for a client/server application with stored procedures.  Figure 2. Processing with Stored Procedures The stored procedure can issue static or dynamic SQL statements. Data definition language (DDL), most data manipulation language (DML), and data control language (DCL) statements can be coded in a stored procedure. Stored procedures also enable access to features that exist only on the database server. These features include commands that run only on the server, software installed only on the server that can be accessed by the stored procedure, and the computing resources of the server, such as memory and disk space. Because stored procedures are defined in DRDA, they also take advantage of DRDA features, such as data transformation between platforms, database security and accounting, and two-phase commit support. Stored Procedure Architecture Figure 1 shows the processing flow of an SQL CALL statement in a DB2 data base. The flow sequence is as follows: 1. A thread must be created for each application that needs DB2 services. If the application is local, the thread is created when the first SQL statement is executed. If the request comes from a remote client, the thread is created when the client application issues the SQL CONNECT statement. After the thread is created, SQL statements can be executed. 2. When a client application issues an SQL CALL statement, the stored procedure name and the I/O parameters are passed to DB2. 3. When DB2 receives the SQL CALL statement, it searches in the SYSIBM.SYSPROCEDURES catalog table for a row associated with the stored procedure name. From this table, DB2 obtains the load module associated with the stored procedure and related information. 4. Stored procedures are executed in address spaces. For DB2 Version 4, only one address space is available, called the DB2-established address space. For DB2 Version 5, in addition to the DB2-established stored procedures address space, you can have several work load manager (WLM) established address spaces. For DB2-established or WLM-established address spaces you can specify a number of task control blocks (TCBs) in this address space available for stored procedures. Each stored procedure is executed under one TCB. After searching the SYSIBM.SYSPROCEDURES table, DB2 searches for an available TCB to be used by the stored procedure and notifies the stored procedure address space to execute the stored procedure. 5. When DB2 notifies the stored procedures address space to execute a stored procedure, the thread that was created for the client application is reused for an execution. This has the following implications: ( CPU cost is low because DB2 does not create a new thread. ( Accounting is on behalf of the client application. ( For static SQL, the OWNER of the client program must have execute privilege on the stored procedure package. For dynamic SQL issued by the stored procedure, security is checked against the user of the client program, unless the DYNAMICRULES(BIND) option was specified when binding the package for the stored procedure. No sign-on or connection processing is required. ( Any processing done by the stored procedure is considered a logical continuation of the client application's unit of work. Thus, locks acquired by the stored procedure are released when the client application commits or rolls back. 6. The stored procedures address space uses the LE/370 product libraries to load and execute the stored procedure. Through the SYSIBM.SYSPROCEDURES, you can pass run-time information for LE/370 when the stored procedure is executed. 7. Control is passed to the stored procedure along with the input and output parameters. The stored procedure can issue most SQL statements. It also has access to non-DB2 resources. 8. Before terminating, the stored procedure assigns values to the output parameters and returns control to DB2. 9. DB2 copies the output parameters received from the stored procedure to the client application parameter area and returns control to the client application. 10. The calling program receives the output parameters and continues the same unit of work. 11. The client application implicitly or explicitly issues the COMMIT statement. With DB2 Version 5, the client application can implicitly commit as soon as the stored procedure returns control to the client application. If the client application and the stored procedures used during this execution update at different sites, the two-phase commit protocol is used.  Figure 1. DB2 Stored Procedure Flow Although stored procedures are supported from DRDA remote clients, they are also supported locally. If a local application issues the SQL CALL statement, the distributed data facility (DDF) is not involved and need not be started. SQL Statements 1. Static SQL The source form of a static SQL statement is embedded within an application program written in a host language such as C or COBOL. The source program must be processed by an SQL precompiler before it is compiled. During precompilation, the SQL statements are converted into host language statements to invoke the database manager. The following is an example of a SELECT INTO static SQL statement in COBOL: .... EXEC SQL SELECT FIRSTNME INTO :firstname FROM employee WHERE LASTNAME = 'JOHNSON'; .... The following is an example of an INSERT INTO static SQL statement in C: .... strcpy (president, data_items[1]); EXEC SQL INSERT INTO PRESIDENTS (NAME) VALUES (:president); .... 2. Dynamic SQL Unlike static SQL statements, dynamic SQL statements are constructed and prepared at run time. The SQL statement text is prepared by using either the PREPARE and EXECUTE statements or the EXECUTE IMMEDIATE statement. Dynamic SQL statements also must be precompiled. The following is an example of a dynamic SQL statement in C: .... char insert_stmt[80] = "INSERT INTO "; strcat(insert_stmt, table_name); strcat(insert_stmt, " VALUES (?)"); EXEC SQL PREPARE S1 FROM :insert_stmt; for (cntr = 0; cntr < num_of_data; cntr++) { strncpy(insert_data, data_items[cntr], data_items_length[cntr]); insert_data[data_items_length[cntr]] = '\0'; EXEC SQL EXECUTE S1 USING :insert_data; } .... 3. Call Level Interface Call level interface (CLI) is a callable SQL interface to the DB2 family of products. CLI, originally defined by Microsoft, the X/OPEN company, and the SQL Access Group, has been adopted as an International Standard (ISO/IEC 9057-3: "SQL, Call Level Interface"). The CLI is a facility within DB2 for processing dynamic SQL statments. In using the CLI, precompilation or binding of the code is not required. CLI uses function calls to pass dynamic SQL statements as function arguments. It does not require host variables or a precompiler. Programs that use CLI must be written in C. The CLI relies on a set of function calls that can be embedded in a C program and compiled by a conventional C compiler. By linking the program to the CLI library, you have access to all the SQL facilities of the system. The CLI functions conform to a standard that is widely implemented, and therefore usable from a variety of database products. The DB2 implementation of CLI is compatible with the widely used Microsoft version called Open Database Connectivity (ODBC). Various levels of DB2 implement different levels of ODBC. For example, DB2 Common Server Version 2 supports ODBC Level 1 and most of the functions in ODBC level 2. DB2 UDB Version 5 supports ODBC Level 3. CLI incorporates both the ODBC and X/Open DB2 CLI functions, both of which are accepted industry standards. The following is an example of an insert statement using CLI: .... SQLCHAR insert_stmt[80] = "INSERT INTO "; .... strncat((char *)insert_stmt, (char *)table_name, table_name_length); strcat((char *)insert_stmt, " VALUES (?)"); rc = SQLPrepare(hstmt, insert_stmt, SQL_NTS); if (rc != SQL_SUCCESS) goto ext; SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 20, 0, insert_data, 21, &insert_data_ind); for (cntr = 0; cntr < num_of_data; cntr++) { strncpy((char *)insert_data, (char *)data_item[cntr], data_item_length[cntr]); insert_data_ind = data_item_length[cntr]; rc = SQLExecute(hstmt); if (rc != SQL_SUCCESS) goto ext; } .... 4. Advantages and disadvantages 4.1 Embedded SQL Advantages Embedded static SQL statements have three advantages over CLI and embedded dynamic SQL--performance, security, and encapsulation: The performance of static SQL is usually better. Dynamic SQL statements are prepared at run time, but static SQL statements are prepared during precompilation. In static SQL, authorizations to objects are associated with a package and validated at package bind time. By encapsulating the access privileges in the package, database administrators need only grant execute on a particular package to a set of users, so there is no need to grant access to each database object. Depending on how your application interfaces with end users, generally with static SQL statements users do not have to know the details of the database objects in order to access them. These details are hidden, encapsulated in the package 4.2 CLI Advantages The advantages of CLI over embedded SQL are: CLI provides function calls that support a consistent way of querying and retrieving database system catalog information across the DB2 family of database management systems. Application programs written with CLI can have multiple concurrent connections to the same database. For DB2 on the workstation platform, only stored procedures called from application programs written with CLI can return result sets to those programs. DB2 CLI increases the portability of applications by removing the dependence on platform-specific precompilers. Individual applications do not have to be bound to each database. Bind files shipped with CLI have to be bound only once for all CLI applications. 4.3 Using Both Interfaces If the application requires the advantages of both interfaces, it is possible to use embedded SQL for stored procedures that are called by CLI client applications. In this way you can combine ease of use for the client application with the performance advantage of static SQL for the stored procedures. For the workstation platform, you also can access result sets in this way because CLI is used as the interface for the client applications. On the MVS platform you can use CLI or a supported host language. Coding Rules for DB2 Stored Procedures Coding a stored procedure is similar to coding any DB2 application. However, there are some differences and some rules that you must follow when coding a stored procedure. Although a stored procedure is invoked through an SQL CALL statement, it is not a subroutine. It can contain or invoke subroutines, but it must be the main program in the DB2-established address space. A stored procedure can contain both static and dynamic SQL statements. It can contain DDL, DML, or DCL SQL statements. DB2 on MVS stored procedures can receive and send back parameters to the client program. When the client program issues an SQL CALL statement, DB2 builds a parameter list based on the parameters coded in the SQL CALL statement and the information coded in the SYSIBM.SYSPROCEDURES table. 1. Client Program in DB2 for Windows or AIX As shown in Figure 1, unlike DB2 on MVS, if your client program is running on the workstation platform using CONNECT TYPE 2, you can connect in the same unit of work to the same remote location that is accessed by the stored procedure.  Figure 1. Client Program Restrictions Note that a thread is created in DB2B when you issue the CONNECT statement to connect to DB2B. When the stored procedure executes the SQL statement with the three-part name specification, another thread is created in DB2B for the same unit of work. In this scenario, be careful when updates are made from the client program and the stored procedure on the same data. You may get into a lock problem situation because the threads are different. 2. The SQL CALL Statement The SQL CALL statement is part of the ISO/ANSI standard for SQL3. It is an open solution to invoke stored procedures between relational database manager systems. Figure 2 shows the client application functions for invoking a stored procedure with the SQL CALL statement. The client application must connect to the DB2 server before issuing the SQL CALL statement. The SQL CALL statement cannot be used dynamically, although in a CLI or ODBC application you can use the SQLPrepare for a CALL statement. The SQL CALL statement must include the stored procedure name and, optionally, the parameters to be passed to the stored procedure through the SQLDA, host variables, or constants (for DB2 on the MVS platform clients only. The SQL CALL statement enables the client application to pass parameters to the stored procedure and receive parameters from the stored procedure. Therefore, the client application must declare, allocate, and initialize the variables to be used as parameters. These variables must have data types compatible with the parameters expected by the stored procedure. Parameters can be used to exchange data in both directions. Indicator variables can be used to nullify parameters. When a parameter is null, only the indicator variable is sent through the network. The client application can nullify parameters that are used only for output, and the stored procedure can nullify parameters that are used only for input, thus reducing the sending and receiving of unnecessary data. For DB2 on the MVS platform, the specification of whether a parameter is used only for input, only for output, or for both is dependent on the information registered in the SYSIBM.SYSPROCEDURES table For DB2 on the workstation, all parameters are considered to be used for input and output, except when using ODBC and CLI. When using ODBC and CLI you can specify which parameters are used for input, for output, or for both.  Figure 2. Basic Client Application Functions  NO+%,%<&K&M&[&M)\)X,p,4444N8a8G;a;e==@@AACCLKMK}K5CJOJQJ 5OJQJ jOJQJjOJQJUmHnHu jUOJQJ5CJOJQJ-abm n   7 8 [\-.$a$}KNO2367  MN^$a$N !!M"N"""^#_###*%+%-%.%R%S%:&;&<&K&L&M&[&]&$a$^]&q'''(1(M(w(((((()A)K)L)M)\)^)*****+0+2+^+`+`++++,E,L,V,W,X,p,q,,,{-}- ..0 01122%2Q2[222223&3(3l3333364e44444444444w5x566U7W7G8H8<`< & FH8I8J8K8L8M8N8a8c888A9B999@:A:::E;F;G;a;c;<<<d=e=<`< & Fe=f=====<>=>????@@@@AAAAAACCCCCaDbD$a$bDDDEEFFHHIIiJjJKKLK{K|K}K. A!"#$n%n1>cԼ_MOLPNG  IHDR>gAMAPLTEٟIDATxnHb>{pe/`.:FMä[楱qp0+%ಶEJ?ULIlO"_$U qp`$R]M!n~Sbi|S­~]q!px nӲ}qM-|zYLgUC?<7rN>/7" GgCxdP5YAfbˉgf´ Vd^p c8cٚ/Wl%9k;l [q}!_7;,|XxP:~pP2kӽqw)ýsp] n/{9+;Kp/ܐ/ݫ{}9q?8@vUɠY 0 l:÷phGi {|Xnr9p ud@Ă M0&R2kjygqf9̅qipctq[!VGF|4 q0*4T÷Gi<*q=:WC#.GWZBc){uG|G /mTI/prG\^|Z+$D%;[X2^Dx)eQX!x*qBb!cVj«ZS<{~<%-^jbs۝8Si_\69n׭-ٶ 5sdR< ܵ5VµS:Ewn{(" 7bjq;D7vG`ߟgqzq~m՞Y>__4KxY/g?YP]doJq7T=Σ ⿘]P v-!pʈTNt*wz'QL! wBuj<@L>TwZLjc u~B΢7h&E=P;q3NB]qN˦6m.x H% 8sjG*?N%RG;7zJq[i ToiW khU34hEJvxS-~g8醗_+8o?n<7*][sj.NJ5{4xӫ YV+Ov8Oq]ZZ~2eKxP~ixE(ܧW2CIS'Y"xE4xmE!# iٲӒ /y_{|UؤY@zg[ H?[xY H zjxnY-~ /]Yd>ԑnP//. GV.*;R|?L ,ݵv@|oϝ<ׂ|cx)3~x.>R0axK2NCFVR`4rL)~0WJ+kJC+k3BWTW~&?%$:rP4S&KQqR@(vy*q@4!//ՁhB^v4?EUᤸ@(#'WeDDq_^S 2e^;B#ӛlZMӪ  1ypz bfz$@7PF,n 4UeJ{Iu M&\kn<!o&G փYlk8jeCx K/CL<-^ʈ)h( g:ޢ>/Dq)^?Z,.8>9My}(# 7Hs97024 kC8w;<8ne?/CF¢m-˵̫aPhB^۫Zoxm'k+kkMx]jJڀnWPVMx%tn](sx]4!_X./B8yx]4!_,^MzϪ!q๺kgwV,wFg0Mdb"LdM2לU:2^}cZ/[T|%pfqȔYY^\(~vM$jxw e1q5ڔc1 6<,pA=Upx?%ÃRC:Ehi>zz)8?o &FO/LR{ Am4\Oc@z *7{R/48p8p8p8p8p_.^3/Ҁ8p_$tڥIENDB`n7Nz.C#낲PNG  IHDRJgAMAPLTEٟIDATxnz`(Xba:/ySt`&(о.^/jXr'U5Ggn 􂊀I9؋%)ΌƞGc; O}RA GJ%|f ]+4K^OP~9_-\^hB OqyD5^Nog-S#6hv9EZ.!NpO|t+69_cORg. qz1=/T?1N]uh˜Wzד <`$l㘟 Z0|C ^뒘 *ǿ0m!%e *!^E0ݎ=Uo[~1ڦ٦qk|8{|:(^ ƿ~h 39x3qgװ1rC4o}⢗xHdO|'no3iC]£'o @l O I1{\m l DRqm/5cSlx08@H6[ć ll }d-^"jxĝhq=*-~Lf?6#lmzylm8k5l݃ih_OK\?CK\?CK\?CK\?CK\?CK\?CK\?CK\?CB?Ska=G'/m{_ 5kz|-<~%-wav/ߠ0"u_W#|o|2(,J*Kݺ5<<2zYD9]Olw}'7C6aو/B@y}o{~e~<]>c^_/zwFm2qyCy~¿]IOt_B2z4U%_UiU=ň~Hn?E'x'J RK(CM]S=kwMZx_ 591cDS@18P"c@ ]4?oǥ>c:EH@Lpx 4i8VsR=dza6؜,,J7>h0!Gcf-X1Bh`ؤ&!ilO|B( 6ohpɔ#r9b?|9*krB=7$KK!Ϣa gK"pZᳩf'D ?4Xʳ}/7C"`Y‹H7xEV*"DUX``Fc^gnq7O? ?yi|J- dD]|Ki_X|VxG /OT/Ahd1c>2}s@]AIi|Kt9χœAjƧ4F` a&汼UW1WxN$5Ot޼5lF_5~ymjrv 8|dZ=1 /yN]+SB*C3XuP~f%iwS&fq\˃D:w/ A-D ΀_}=ä~ҽ`wO,]̰UW<`0;ao;A0㛤z o.WacB6Wm },>ߦ`0;6Q6%z8]N4Lǻ&㛤z o.IN۟J)Oхai$ 4f ]mdOvLF% çy6)$I0)n:V, "H+OHdLS)^}R_`D,o?O ^zϯIidj_i0-+6P4\_ڭ_ՄCc,x~/W25^:|.mϫ(#¯weRծkuXc=UaƼi񐕇&]Ϧzx%鲶oF3nly i\yNׅ^Z`y8-Rl6f_m(LLmc$l⫻V L-0vmO.5JLLa6sæĭ6Pֵ iL-S,O_=,FR{)+Dbt" Б^tB_P:G^wd#W+T|(Rt_ŭ$]x|TwMR=ޅ7I^bx8]+{8]O+F_a}0Ko6>)nݡ.)vh;A0㛤z oޭ.Cǹ"F_޹?+4 jT\zC'h&~|i ~3s_7C۾ls[mwԽL?Rd1h+^ QTO&rqOz1e07 8| ~DŽs/1,!mWx}GS5|@k) kk^wV( <9wR6VOu-Cr;"MukKo |%u^`ws~Ot$mҮW]cb/zVUn6a=&4^o_2I,hyyPB=Xm,.Y>2J'OjjeZC/i,'/:o" VL=>ϫZm>^ Y\5>Yċac2z٨Y{'n6_Ͷ+6mٖFg?l}k߯Ͷ؇/P|ye^N; nZ=:> Rm}[WAfĻMOpa:ۺ'oHS f>Vi> [ym7M{Y}ئ7' vЦdTOUmٻś6mkiM[ZZioڴůś6mkiMǛ mkk݋THxߝg7ITC-$Q }xD5Mg7ITC-$Q }xD5Mg7ITC-$Q }xD5MgO64IRZ%?Qt|)ou o_?J__RuHt|)-~RWV)ɉ2*NHBqIh|FKd>QtlsA_B,>)wrx@>Qtld O {sX9A0F@'nfQ*ՙ|S2刧.cw >49򉢣Y8;iPo q'nf1<  @g%~Z~`LSĻ@A<?)AK|rU#eT6:3*x3+||J(Bytrp[E#k rA igπ8 @)vO 4}<8 Ce bŸwRs=㱉xLiqќB/GU">3ZN|-g'+&FY ?oSş*-Tb1FN?7-x7ao4g GH `8{‘>Ѐ-hpv~$]X@|PԸPDP}pB1gܿ&$ wA@b?=7*}Bߊڄ?S㶴Ն;b![R'ǯJ%xQVqXeq W4J|\P>=X`69^h8ǽ%~:_a{蝔G0_zPPa7/³%[=LfԸNOx>YaQz*8|Hlvq >`$wFH %'\/IENDB`n ptʙ|\PNG  IHDR N5gAMAPLTEٟUIDATxnHba`\i (7UL `.VhC`6# <8EpYIIRERIUۑiR($Π!!,:3 LGg0]8>s̈c6N$A  D5a &FS`!&°>fhD3& F S!Lׄ1 6k"a40E:& 1l1Dkx1$BΎ'2 =!4%T fpL/A MF )8ϣ Ij1I aBl3/Cpo"4[ bp/C'6r@|Cr t=XY 1Y &;֍1^C)Ģ)Ģ)Ģ)Ģ5@!qR\vRDbݏ`g}Y x;8 wLD'j45zYL>? NEgп#|@.: CFuo?b@݊f56走aӽu>o әpH kKviUҁ9qnμug֜T1vtŭĉa-"Dx^|#RjWИ"``"$Q! 0}- ̙3ć 0˦2Hf; f.!-d ~Dчy1| @h{dL`-*zv;Appd0ǀ1h5E/^6; nB>Vĩ'$ 1+9< HK^I'^U4i%kdQ@X̎8T>aʼn}F;1l1DR&^"& F1 ," <@$k̊Rbv/o QfS۬1DAMMғoo?X9'o h h h h h hpj5۾#bPP|o8l _1""8 7˰aG0@a 2NG!wfD"<0,[ q ,F"x,.: tAAD C'#aWyS`]L! ]q0^.CqkD`^#[ !k{;Z;c &:M pβEM_ljvӊƁ*؞1IĈ^+=E|mD!h ^i&l9$a[!DDǮ/ScBX+>!hl| 69!F9PPP[[̾VD|8%Y̎Vۇ(Bg'!2?FDY߉i;|m;)")o`fe~^AiCϩՋ>d !Ii .C@Ԋ!2j{UZ@2?G!I_UMY} C:{wZ ֈx؇0d"gV;B!B!B!B!B!kE8oF];}./UPPu`>u`sGh6`:3ru`h<¯VvV?^Lϟ:V #A#Y} ^6Cfsَb:Ջp;2EXt~E]}@u#b4Yv0jF߽ZO+F:0aNĜ-l"z..F3XAjEٴ&=3$~8i&EVFe@ZH#<> QghzRD񗽝 ~~bmqkFl=m D݈=,aFFĨLKh{E1D"nnl|kA.GWQw;bGQ",sN\Nj5h5эS"8f#ȄbϹDݾNE{Lg$B JD s>> it3=Qp "~t%b>l>#` "cB=gEҧ5n4;6.NV"&ǭަ5!b7m.nSjPl#6$T\[-D'.w`*z yŔhO"w=cbx<#F16 O!l^\ػڎu9C]耸LFsն4b6zw]]Ad.-D8tq/h؍ )"ui#|,BGD{m7(Fe: `q"1-DS8O{"z9q#w G#!P(~;19"9 :'>?c@ȞA'IБcBPrLwbS+|ʏQz#g ;`&w,(pfA42J# z,Ndq?ފ"{6}2Vȷ5#C@s%WJ]F\@PV1%<M/v!A4n5œx|HD7P!& pI0ъ9#upѐZ7z i.0 H9B by4u. k1"vγw!Hqvuq#})?BOpQȨy .h ?xL@WTD\nD'TL aT(DZZ"֊WUЕD'b7 Ծp~IƄ?#f$ A|nTU#K8%'q߃Xv5 <1v1DL׷A+G@x@s Ajs!s7 q Y9\ #HGC"B\'Ï 7KD\ b_F,oV݈eWx֦g g0OX\W夈 ]洈]ۭQݵ QOO(q%Az0ϵ!v,EM<@ʼnFb5p 11.8hQI!Ȣ1 YPx AJ4Lw֌0W=5# ui:ee7"+FvfQ\\W^RtxL`U. j"˄y Tz&(6C<+PgzvPd:ˠ>A(;Ӧ};ޘ< y6Ay YTX`c*d2 2}<JvBPbseQvƷcl?wJ(M_/֛vkZU@U5PUj TUkZU>([;jQV/C׶WZ( zkZU@U}PңDQ6CEp :Y…CԷ"7[%3PpA1 (PP` \ʪ0+(Xr05fT E\ \ݹ!,2aꌠ3(rnmP.cJ^pJER<AMB]-we-;A x3:Aa8k;YJ``]T%Ԅ.8g4/T+xpIPL ;sPljP &(Y?TPl%d ,PPi(;EWylu/j쪯@"xP<^ӽ WA1]DdP#đ謀2 (٩܆1A3JqK p( SyJOw=A/.LҢ<m 8 r>-5S -`f PAM.ڶm:Ŷ%|.8BYԱʒ2;+|Hn 3 Sb~*ʠB' x,%(^ mHiPJ E"Yj/Zm8*;Soy%>1%| @> UAP엻6E շpu򔇼—w)A;<9+s,y"9RAHbu3#fdn_0˒X=YJEHPT%uLN +FP~PXyUMAar"j:+ m*ifZک J zv-B%N*ӢF4POiP%leZGw :QfZW̴'}+:<:O5P>ØQfZ*eu(;*QfZJcZCeϕYgP9?iL@ emj5kwP5q UCJN`蛡M@iLBPl-;Sv8);Hg~*ABmÜN` gPlf*j݃GpleZCPl!%ī_lt U e3T w]>Pdt UnZJcZeuh4uh4uh4uh4uh4uh4uh4ux"Ĭe?vz:e ޽i]W?,C52:SK⬭Fi|a/}XVYk J}ٯ‡L-Oz=?߿|?WhH8=c4݋V!ъ!=|o2el # 'C}zI׋SKZ@gJ>Ⴝ {W_hk7q Iױ|}A }LYw`#ּ?umj_}q^%,/k[aO}{>F}sK~2Py,!?fQ<.oWׁ@zr]K9KۈGd;a//VDC1/\}mN ߲|| mR+|@A P+}W0F(|g{ v_P _ZLoE}ogSD{[T_gd57~w]⬭F K!Ј597{oFЦz`I幫)|]J)=*9+]՗5C+ d0{Yu _^}^MEҾh%( E;gWu C:%!l,1~/F5<#^y[Ix*ЋHhOҠyEҽpsw]N N Q}{{3 ?==uٻ N{q)S& ws 9|`G,g(XJ #M|DMYa?9'MGU_pUs5 ZJ}$pMC8_]WRhZ#> 4LTBvQ5qxj `껔B}//XIK˓'^e˧<`I} +>lR4{&M6z"AN}|}?;No |{/vxX\})V Xiv4U=,|9Sxi?=*OaSۧ߇KGխ TA ԧ  u I3ʍ*:,|'Sڽ>R;}(ބU'][E{} b[}u_u;OPK>ySmF}U4up{qG\/%}#ԗ.iapaS~g`J}`Wߧ&GcAa>GouѰk1h}uFS>rtVYGu#'}o&ENxƬpM{-|%^ޔr=z8d\\^~PmԷvT5DM-|Ԋlvm]嶗}_Zh[Ө] Ѧ'uևlnimJ>˘;i&&|INշ7G-xmXP2 rQBTC2|Q.K~9 (l:> z0Y(8H{ * +\t 7$Z\قF`ho2я;gf %ܖ^Tc_,}o%[ Q:zlgw3n>5_xׅ/F$9i[@Vϳ;"L)|cnMߢ!A5Z5D B}I}QOM}t35x:/؁MzLٙPbA*ɸ.T@tOx%O 켊=Y^$=TlHз2;x|eψ=*,9WH`:cn>G?)ρ鱜\h}js߻p꧁raLiZV]ٱNVs1>ɩEYnptn:ǾZmu;kIr43_y;ʌΉ vkkQ y)8S-fF/vv؉nDK#!}GѱFLP8)KII. }'Ɣ49}=vt" z`?2ؕOj%Rjir,o\TP>Z̺/G_y }:.>g_W>DZe]u[~aX)26$˺|qCGP FZ|Ŵ)I_UkS}_+> v6_UpS1UĴ?ő/ ?!c +c?*]\;j=VLJ<3_U3a ^&苲 =u77VBxM[N3;ݱKg QQ9K.s!/Ҟg%}e.e 96Imwb'nZ#y]jjejѷ,|}ԏC;oa(Vu;MEvrԧ6Nzs e=K,oZC+6q] qȗx*0 TgJݟwqQ:e!>e*BR3f+ V7G#>]g%GΕ濍xt88ؙ>=SJO]5Fϴk8z[{G vVu{vcGuT%At-~-G`-VTOk)Lyt-oDG%PT~w!}3 }\ }KN; |ycw=Oѵ/ѵ  P}bǾH- mS]JY󷨔ņXVz-(D>K'큚l𾨱o)lcۿa'b,>'wYt :*?`ub+|O!sx^|e=0p_4з~ׂy_qcu{̜͗F!*Zu铹n?"%yZu }_{-I"lE|YE98$DזO_4T1])6jf`}+k$6[8D V^F}ۢϫs9LFdv]*ߗGFaO3}t3EԜ|bGAyYwE)!9k_Rߕ>GTɞ[R[;®|բ/Rc }dzZ#?sr"2x?pXm>Ql>or9[vTIFnƶJeo<+Y%X#A_W'2b$ E_T諲E_`[Xk$A<鋔}+k$6jF_**x>(X-h*зIE_՝c_ƾHFIig@56[ <FK8 adRk ԅ/_F />  {)B*n2}:#L0l(Chm/O|j LLS:YԭOPG;-f5T{0/5^E3^ElF3b| Y-**׺kRsJI4Q4Y # n`SKAHy %tx %+JiMkPYO x* )Ha2tIDATH_w\5R?Gq0JoGe0r^i#}osR*Ez~\z5L5k)O5 k}O˂JX >SJ+> ])?zd'ېZR+VjJTZJ+RiV*TR=IENDB` i0@0 Normal_HmHsHtH <`< Heading 1$@&5CJOJQJ<A@< Default Paragraph Font}Gbabmn78  [ \ -.NO2367  MNMN^_*!+!-!.!R!S!:";"<"K"L"M"["]"q###$1$M$w$$$$$$%A%K%L%M%\%^%&&&&&'0'2'^'`''''(E(L(V(W(X(p(q((({)}) **, ,--..%.Q.[..../&/(/l/////60e00000000000w1x122U3W3G4H4I4J4K4L4M4N4a4c444A5B555@6A666E7F7G7a7c7888d9e9G0000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000 00 00 00000000000000 00 00 00 00 00000000000}K&N]&`+2H8e=bD}K')*+,-./0}K(Ob$>cԼ_MOL9bb$Nz.C#낲?W}b$ ptʙ|\b$ɯ~, !_@,(  J  # A" J  # A"J  # A"J  # A"J  # A"B S  ?+!=LG}G#4u$4f#f#4{#4b#4abmn78     [ \ -.NO2367  MPMN^_*!.!R!S!:"<"K"M"["]"#$1$?$M$[$w$$$$%%A%M%\%^%&&&&' '0'7';'<'^'e'''''((E(X(p(q((({)}) **, ,--.'.Q.].....//&/*/l//////60;0e0j000000000w1x122;3<3U3W3G4N4a4c444A5B555@6A666E7G7a7c788d9f999<:=:;;;;<<<<====e?f?????a@b@@@AABBDDEEiFjFKGNG{GG`bln68  Z \ ,.MO1357 LPLN]_)!.!Q!S!9"<"J"M"Z"]"p#q###$$0$?$L$[$v$|$$$$$$$$%@%F%J%M%[%^%&&&&&&' '/'7']'e'''''''((D(J(L(Q(U(X(o(q(((z)}) **, ,--. .$.'.P.V.Z.].....//%/*/k////////50;0d0j0000000000000v1x122T3W3F4N4`4c444@5B555?6A666D7G7`7c78888c9f999;:=:;;~;;<<<<====????`@b@@@AABBDDEEhFjFJGNGzGG|GG 01235BC:\WINDOWS\TEMP\AutoWiederherstellen-Speicherung von Dokument1.asd01235$C:\vorles\es\book\tx\tx\StorPr01.docWilhelm SpruthE:\grx\book\tx\tx\StorPr01.docWilhelm SpruthE:\grx\book\tx\tx\temp.docWilhelm SpruthE:\grx\book\tx\tx\temp.docDNCJTHOM?C:\Documents and Settings\dncjthom\Desktop\Stored Procedure.docr%Frd hh^h`OJQJo( hh^h`OJQJo(Frdr% G@  0  }Gp@UnknownGz Times New Roman5Symbol3& z Arial"7 x: x BW :}!r0dcH;"2What Are Stored Procedures01235DNCJTHOMOh+'0  4 @ L Xdlt|What Are Stored Procedureshat01235re123 Normal.doto DNCJTHOMto3CJMicrosoft Word 9.0c@Ik@l@*,X@0,XW :՜.+,0 hp  UBS Software-Service GmbHr}cH2 What Are Stored Procedures Title  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgijklmnopqrstuvwxyz{|~Root Entry F@{,X1Tableh2)WordDocumentSSummaryInformation(}DocumentSummaryInformation8CompObjjObjectPool@{,X@{,X  FMicrosoft Word Document MSWordDocWord.Document.89q