Stored procedures Stored procedures can help improve application performance and reduce database access traffic. All database access must go across the network, which, in some cases, can result in poor performance. For each SQL statement, a database manager application must initiate a separate communication with DB2. To improve application performance, you can create stored procedures that run on your database server. A client application can then simply call the stored procedures to obtain results of the SQL statements that are contained in the procedure. Because the stored procedure runs the SQL statement on the server for you, database performance is improved. In addition, stored procedures can help to centralize business logic. If you make changes to a stored procedure, the changes are immediately available to all client applications that use it. Stored procedures are programs that have the following characteristics: Contain procedural constructs with SQL statements Are stored in databases and run on DB2 servers Can be called by name by an application that is using SQL Allow an application program to run in two parts: the application on the client and the stored procedure on the server The following figures show how two client applications access a database located on a database server. A client application that does not use stored procedures to access a database can require more network traffic. A client application that takes advantage of a stored procedure can help to reduce network traffic and the number of times the database is accessed. A typical stored procedure contains one or more SQL statements and some manipulative or logical processing in a programming language. The client application program uses the SQL CALL statement to start the stored procedure. When the stored procedure runs, it locally accesses the database on the database server and returns requested information to the client application. Figure 1. A client application that does not use a stored procedure Figure 2. A client application that uses a stored procedure To use a stored procedure, you need to write two programs: the stored procedure, which runs on a database server, and a client application, which runs on a client workstation or a middleware server (such as a Web server). The client application calls the stored procedure by using one of the available API methods. A stored procedure follows certain conventions for exchanging data with a client application. A stored procedure does not connect to the database, but relies on the database connection already established by the client. The call across the network includes parameters that are required by the stored procedure. The stored procedure uses the parameters to complete its logic when it runs. It can return a set of values, rows, or modified parameters to the calling client application. The Development Center is designed to give you a full development environment for working with stored procedures, from creating to deploying. Related tasks Building routines Exporting routines Importing routines Editing source code Filtering in the Server View Dropping routines or objects from a database Removing routines or objects from a project Related information Creating stored procedures Running routines Debugging Deploying routines Benefits of using stored procedures Applications that use stored procedures have the following advantages: Reduced network usage between clients and servers A client application passes control to a stored procedure on the database server. The stored procedure performs intermediate processing on the database server, without transmitting unnecessary data across the network. Only the records that are actually required by the client application are transmitted. Using a stored procedure can result in reduced network usage and better overall performance. Applications that execute SQL statements one at a time typically cross the network twice for each SQL statement. A stored procedure can group SQL statements together, making it necessary to only cross the network twice for each group of SQL statements. The more SQL statements that you group together in a stored procedure, the more you reduce network usage and the time that database locks are held. Reducing network usage and the length of database locks improves overall network performance and reduces lock contention problems. Applications that process large amounts of SQL-generated data, but present only a subset of the data to the user, can generate excessive network usage because all of the data is returned to the client before final processing. A stored procedure can do the processing on the server, and transmit only the required data to the client, which reduces network usage. Enhanced hardware and software capabilities Applications that use stored procedures have access to increased memory and disk space on the server computer. These applications also have access to software that is installed only on the database server. You can distribute the executable business logic across machines that have sufficient memory and processors. Improved security By including database privileges with stored procedures that use static SQL, the database administrator (DBA) can improve security. The DBA or developer who builds the stored procedure must have the database privileges that the stored procedure requires. Users of the client applications that call the stored procedure do not need such privileges. This can reduce the number of users who require privileges. Reduced development cost and increased reliability In a database application environment, many tasks are repeated. Repeated tasks might include returning a fixed set of data, or performing the same set of multiple requests to a database. By reusing one common procedure, a stored procedure can provide a highly efficient way to address these recurrent situations. Centralized security, administration, and maintenance for common routines By managing shared logic in one place at the server, you can simplify security, administration, and maintenance . Client applications can call stored procedures that run SQL queries with little or no additional processing. Parent topic: Stored procedures Related concepts Languages for stored procedures SQL stored procedures Java stored procedures Languages for stored procedures Using the Development Center, you can create stored procedures in Java or SQL. Both languages create stored procedures that are highly portable from platform to platform. The language that you choose depends on your development environment. SQL stored procedures SQL provides procedural constructs for writing stored procedures. Writing stored procedures with the SQL procedure language has the following advantages: You can support database modules that are written completely in an SQL language. You can quickly learn to write stored procedures with the SQL procedure language. This ease of learning is especially true if you have experience with other database languages. SQL stored procedures are fast because the SQL routines run as compiled routines. You can debug SQL stored procedures on Windows, AIX, Sun, and Linux on DB2 Universal Database servers and on DB2 for z/OS Version 8 server. With SQL stored procedures, you can call other SQL procedures, nesting calls up to 16 layers. SQL stored procedures have size and parameter limitations, depending on the version of DB2 that you are running: For DB2 for OS/390 and z/OS versions 6 and 7, the maximum size for SQL stored procedures is 32 KB. For DB2 for z/OS version 8, the maximum size for SQL stored procedures is 2MB For DB2 for Windows and UNIX versions 7 and 8.1, the maximum size for SQL stored procedures in is 64 KB. For DB2 version 8.2, the maximum size for SQL stored procedures is 2 MB Java stored procedures Writing stored procedures with Java has the following advantages: You can establish a common development environment and common language. This commonality can be shared by the stored procedures on the database server and the client application that runs on a client workstation or a middleware server (such as a Web server). You can reuse code from Java methods that you have already written. The input/output of files is possible with Java stored procedures, within the security limits of Java. SQL stored procedures do not support the input/output of files. Java stored procedures have size and parameter limitations, depending on the version of DB2 that you are running: For DB2 for z/OS version 7, the maximum size for Java stored procedures is 32 KB. For DB2 for z/OS version 8, the maximum size for Java stored procedures is 10MB Restriction: For iSeries version 5 release 3, the following are not supported for Java stored procedures: PARAMETER STYLE DB2GENERAL BINARY and VARBINARY built-in data types Parent topic: Stored procedures Related concepts Benefits of using stored procedures SQL stored procedures Java stored procedures Related reference Name lengths and restrictions for identifiers and parameters SQL stored procedures An SQL stored procedure is a stored procedure in which the source code is part of the CREATE PROCEDURE statement. The part of the CREATE PROCEDURE statement that contains the code is called the stored procedure body. SQL stored procedure definitions provide the following information: The stored procedure name Parameter attributes The language in which the stored procedure is written. For an SQL stored procedure, the language is SQL Information about the SQL stored procedure that is used when the stored procedure is called. This information can include run-time options and whether the stored procedure returns result sets Unlike a CREATE PROCEDURE statement for an external stored procedure, the CREATE PROCEDURE statement for an SQL stored procedure does not specify the EXTERNAL clause. Instead, an SQL stored procedure has a stored procedure body, which contains the source statements for the stored procedure. The following figures show example CREATE PROCEDURE statements for simple SQL stored procedures. The second example shows a simple SQL stored procedure for z/OS. The stored procedure name, the list of parameters that are passed to or from the stored procedure, and the LANGUAGE parameter are common to all stored procedures. The LANGUAGE value of SQL is particular to an SQL stored procedure. Line numbers are included here for convenience. Figure 1. CREATE PROCEDURE for a simple SQL stored procedure 1 CREATE PROCEDURE SCHEMA.Procedure6 ( INOUT var0 varchar(9) ) 2 LANGUAGE SQL -------------------------------------------------------------3 -- SQL stored procedure SCHEMA.Procedure6 -------------------------------------------------------------4 P1: BEGIN -- Declare cursor DECLARE cursor1 CURSOR WITH RETURN FOR SELECT * FROM STAFF; END P1 Line Description 1 The SQL stored procedure name is SCHEMA.Procedure6. The InOut parameter has data type varchar(9). 2 LANGUAGE SQL indicates that this is an SQL stored procedure. 3 Shows a comment for the SQL stored procedure. 4 Begins the body of the SQL stored procedure. All SQL stored procedure bodies consist of one or more statements nested within a BEGIN and an END keyword. Figure 2. CREATE PROCEDURE for an SQL stored procedure for z/OS 1 CREATE PROCEDURE SCHEMA.Proc1111 ( ) RESULT SETS 1 2 LANGUAGE SQL MODIFIES SQL DATA 3 COLLID TEST 4 WLM ENVIRONMENT WLMENV1 5 ASUTIME NO LIMIT RUN OPTIONS 'NOTEST(NONE,*,*,*)' ---------------------------------------------------------6 -- SQL Stored Procedure ---------------------------------------------------------7 P1: BEGIN -- Declare cursor DECLARE cursor1 CURSOR WITH RETURN FOR SELECT SCHEMA, NAME FROM SYSIBM.SYSROUTINES; -- Cursor left open for client application OPEN cursor1; END P1 Line Description 1 The SQL stored procedure name is SCHEMA.Proc1111. 2 LANGUAGE SQL indicates that this is an SQL stored procedure. 3 Specifies a collection ID of TEST. 4 Specifies a Workload Manager (WLM) environment. 5 Specifies no processor time limit for running the routine. 6 Shows a comment for the SQL stored procedure. 7 Begins the body of the SQL stored procedure. All SQL stored procedure bodies consist of one or more statements nested within a BEGIN and an END keyword. Parent topic: Stored procedures Related concepts Benefits of using stored procedures Languages for stored procedures Java stored procedures Related reference SQL stored procedure Java stored procedures Java stored procedures built by the Development Center conform to the SQLJ (SQL in Java) Routines specification. Java stored procedures must follow these guidelines: The method that is mapped to the stored procedure must be defined as a public static void method. Output and InOut parameters must be set up as single element arrays. Java stored procedures can access DB2 data using either Java Database Connectivity (JDBC) API calls or SQLJ statements. The Development Center can create Java stored procedures that use either format. The Development Center defines Java stored procedures in the catalog table with LANGUAGE JAVA and PARAMETER STYLE JAVA. Restriction: For iSeries version 5 release 3, the following are not supported for Java stored procedures: PARAMETER STYLE DB2GENERAL BINARY and VARBINARY built-in data types Parent topic: Stored procedures Related concepts Benefits of using stored procedures Languages for stored procedures SQL stored procedures Related reference Java stored procedure with dynamic SQL using JDBC database access Java stored procedure with static SQL using SQLJ database access