SQL PL Stored Procedures
Stored Procedures
- Objek database yang biasanya mengandung satu atau banyak perintah SQL sebaik logika procedural(bisnis)
- Dieksekusi dan diatur oleh DB2(objek sisi server), dapat ditulis menggunakan SQL PL, C/C++,Java, Cobol, Bahasa pendukung CLR, dan OLE
- Manfaat untuk menggunakan stored procedures termasuk :
- Logika bisnis yang tersentralisasi yang mempromosikan penggunaan kembali kode
- Meningkatkan keamanan
- Meningkatkan performa
IBM Data Studio
- Berdasarkan pada Eclipse
- IDE yang berkemampuan yang mengizinkan anda untuk :
- Membuat,edit,debug,mengembangkan, test Stored Procedures, UDF
- Mengembangkan aplikasi SQLJ
- Create, alter, and drop objek database DB2 (dengan analisis akibat)
- Memperluas dan edit data –relasional dan XML
- Secara visual membangun perintah SQL dan XQuery
- Optimasi query-query menggunakan Visual Explain
- Mengembangkan query-query dan rutinitas untuk aplikasi pureXML
- Melakukan tugas pemindahan data
- Mengkolaborasi dan membagi proyek dengan anggota team.
- Dengan cepat membangun pelayanan web SOAP dan REST
- Menemukan relasi objek database dengan model data fisik(diagram)
- Memvisualisasi distribusi data lewat tabel
Membuat Stored Procedure
- Dengan Command Editor:
connect to sample
create procedure p1 begin end
- Dengan menggunakan IBM Data Studio
Atribut Stored Procedure yang opsional
- LANGUAGE SQL : Ini mengatakan pada DB2 bahwa anda akan membuat SQL PL stored procedure.Untuk bahasa lain anda dapat menggunakan LANGUAGE JAVA (untuk Java), LANGUAGE C (untuk C), etc
- RESULT SETS <n> (dibutuhkan jika mengembalikan result sets) :Anda harus mengindikasi berapa banyak result set yang akan dikembalikan Stored Procedure.Jika tidak ada result set yang dikembalikan anda tidak memerlukan perintah ini.
- SPECIFIC my_unique_name : Ini menyediakan nama unik dalam kasus dimana anda memperbanyak SP (nama sama untuk stored procedure tapi berbeda angka argumennya).Yang bisa sama sebagai nama prosedur atau disarankan untuk :
– GRANT EXECUTE ON SPECIFIC PROCEDURE ...
– DROP SPECIFIC PROCEDURE ...
Parameters
CREATE PROCEDURE proc(IN p1 INT, OUT p2
INT, INOUT p3 INT)
- IN - Input parameter
- OUT - Output parameter
- INOUT - Input and Output parameter
- All params harus bisa menyediakan dalam perintah CALL Komentar dalam SQL PL Stored Procedures : - -(komentar pada sql) dan /* */(bisa dalam SP)
Deklarasi Variabel
DECLARE var_name <data type> [ DEFAULT value]; Nilai default adalah NULL.
Examples:
DECLARE temp1 SMALLINT DEFAULT 0;
DECLARE temp2 INTEGER DEFAULT 10;
DECLARE temp3 DECIMAL(10,2) DEFAULT 100.10;
DECLARE temp4 REAL DEFAULT 10.1;
DECLARE temp5 DOUBLE DEFAULT 10000.1001;
DECLARE temp6 BIGINT DEFAULT 10000;
DECLARE temp7 CHAR(10) DEFAULT 'yes';
DECLARE temp8 VARCHAR(10) DEFAULT 'hello';
DECLARE temp9 DATE DEFAULT '1998-12-25';
DECLARE temp10 TIME DEFAULT '1:50 PM ';
DECLARE temp11 TIMESTAMP DEFAULT '2001-01-05-12.00.00';
DECLARE temp12 CLOB(2G);
DECLARE temp13 BLOB(2G);
Cursors
- Deklarasi Cursor dan Penggunaannya :
DECLARE <cursor name> CURSOR [WITH RETURN <return target>] FOR
<SELECT statement>;
OPEN <cursor name>;
FETCH <cursor name> INTO <variables>
CLOSE <cursor name>;
- Nilai <return target> bias berupa Klien atau Pemanggil
ƒ CLIENT: result set will be returned to the client application
ƒ CALLER: result set will be returned to the client or stored procedure that made the call
SQLCODE dan SQLSTATE
- Akses membutuhkan deklarasi eksplisit
DECLARE SQLSTATE CHAR(5);
DECLARE SQLCODE INT;
- Can be declared ONLY at outermost scope and automatically set by DB2 after each operation
- SQLCODE
- = 0, successful.
- > 0, successful with warning
- < 0, unsuccessful
- = 100, no data was found.
- i.e. FETCH statement returned no data
Kondisi
- A condition represents a given SQLSTATE
- It can be raised by any SQL statement
- You can provide names to a condition to make your code more readable
- Built-in names for general conditions:
- SQLWARNING, SQLEXCEPTION, NOT FOUND
- These map to the SQLSTATEs mentioned in the previous slide
- Specific conditions:
- SQLSTATE '01004‘
- To assign a user-defined name to a condition:
DECLARE truncation CONDITION FOR SQLSTATE '01004'
Condition Handler
- A condition handler must specify
• handled conditions
• where to resume execution (CONTINUE, EXIT or UNDO)
• action to perform to handle the condition
- Action can be any statement (including control structures)
- Upon SQLEXCEPTION condition,if no handler exists, the procedure terminates and returns to the client with error
Perintah Flow Control
- CASE (selects an execution path (simple / searched))
- IF
- FOR (executes body for each row of table)
- WHILE
- ITERATE (forces next iteration. Similar to CONTINUE in C)
- LEAVE (leaves a block or loop. "Structured Goto")
- LOOP (infinite loop)
- REPEAT
- GOTO
- RETURN
- CALL (procedure call)
SQL Dinamis
- Useful when the final form of SQL is known only at RUN TIME
- Example: if col1 and tabname are variables:
'SELECT ' || col1 || ' FROM ' || tabname;
- Also recommended for DDL to avoid dependency problems and package invalidation, and to implement recursion.
- Keywords:
ƒ EXECUTE IMMEDATE - ideal for single execution SQL
ƒ PREPARE + EXECUTE - ideal for multiple execution SQL
Memanggil Stored Procedure
1. CLI
SQLCHAR *stmt = (SQLCHAR *) "CALL MEDIAN_RESULT_SET( ? )" ;
SQLDOUBLE sal = 20000.0; /* Bound to parameter marker in stmt */
SQLINTEGER salind = 0; /* Indicator variable for sal */
sqlrc = SQLPrepare(hstmt, stmt, SQL_NTS);
sqlrc = SQLBindParameter(hstmt, 1, SQL_PARAM_OUTPUT,
SQL_C_DOUBLE, SQL_DOUBLE, 0, 0, &sal, 0, &salind);
SQLExecute(hstmt);
if (salind == SQL_NULL_DATA)
printf("Median Salary = NULL\n");
else
printf("Median Salary = %.2f\n\n", sal );
sqlrc = StmtResultPrint(hstmt); /* Get first result set */
sqlrc = SQLMoreResults(hstmt); /* Check for another result set */
if (sqlrc == SQL_SUCCESS) { /* There is another result set */
sqlrc = StmtResultPrint(hstmt);
}
2. Aplikasi VB.NET
Try
‘ Create a DB2Command to run the stored procedure
Dim procName As String = “TRUNC_DEMO”
Dim cmd As DB2Command = conn.CreateCommand()
Dim parm As DB2Parameter
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = procName
‘ Register the output parameters for the DB2Command
parm = cmd.Parameters.Add(“v_lastname”, DB2Type.VarChar)
parm.Direction = ParameterDirection.Output
parm = cmd.Parameters.Add(“v_msg”, DB2Type.VarChar)
parm.Direction = ParameterDirection.Output
‘ Call the stored procedure
Dim reader As DB2DataReader = cmd.ExecuteReader
Catch myException As DB2Exception
DB2ExceptionHandler(myException)
Catch
UnhandledExceptionHandler()
End Try
3. Aplikasi Java
try
{
// Connect to sample database
String url = “jdbc:db2:sample”;
con = DriverManager.getConnection(url);
CallableStatement cs = con.prepareCall(“CALL trunc_demo(?, ?)”);
// register the output parameters
callStmt.registerOutParameter(1, Types.VARCHAR);
callStmt.registerOutParameter(2, Types.VARCHAR);
cs.execute();
con.close();
}
catch (Exception e)
{
/* exception handling logic goes here */
}
Comments
Post a Comment