Stored Procedure - Putra Pandu A (Hikaru Yuuki) のブログ

Download Report

Transcript Stored Procedure - Putra Pandu A (Hikaru Yuuki) のブログ

Computer Science, University of Brawijaya
Putra Pandu Adikara, S.Kom
Stored Procedure
Basis Data 2
Stored Procedure
 Stored procedure  program yang disimpan dalam
database dan dikompilasi bila digunakan
 Dalam Oracle, dapat ditulis dalam PL / SQL atau Java
 Dalam SQL Server, dapat ditulis dalam Transact-SQL atau CLR
 Stored Procedure yang disimpan dapat menerima
parameter input dan dapat mengembalikan hasil
 Stored Procedure yang disimpan dapat dipanggil dari
 Program yang ditulis dalam bahasa standar, misalnya: Java, C #
 Scripting bahasa, misalnya: JavaScript, VBScript
 SQL command prompt, misalnya: sqlcmd, SQL Plus, Query
Analyzer
Stored Procedure vs Procedure
 Persamaan dengan prosedur dlm pemrograman:
 Menerima parameter input dan mengembalikan beberapa
nilai dalam bentuk parameter output ke pemanggil
prosedure atau batch.
 Berisi statement pemrograman utk operasi dlm database,
termasuk memanggil prosedur lainnya.
 Mengembali nilai status ke pemanggil prosedur atau batch
untuk menunjukkan keberhasilan atau kegagalan (dan
alasan untuk kegagalan).
Tipe Stored Procedure
 System Stored Procedure:
 Nama dimulai dengan sp_ atau xp_ (extended stored
procedur akan dihilangkan)
 Dibuat dalam database master
 Tujuannya untuk pengaplikasian dalam database apapun
 Sering digunakan oleh sysadmin
 Local Stored Procedure:
 Ditetapkan di database lokal
 Nama sering dimulai dengan pr_ atau usp
• Dalam prakteknya lebih baik gunakan nama yang mudah:
– Tanpa prefix
– Sesuaikan dengan yang ada di aplikasi (misal menggunakan
object/komponen seperti ORM)
Kelebihan Stored Procedure
 Keamanan lebih
 stored procedure selalu tersimpan pada database server
 Memberikan grant user permission utk menjalankan SP
 Mengurangi lalu lintas jaringan
 SP dapat mengurangi query SQL panjang menjadi satu
baris yang ditransmisikan sehingga mengurangi lalu lintas
client-server.
Kelebihan Stored Procedure
 Waktu Eksekusi lebih cepat
 Bila perlu T-SQL yang banyak dan berulang-ulang, maka
SP bisa lebih cepat drpd batch T-SQL code. SP dicompile
sekali, disimpan dalam memory dan digunakan untuk
pemanggilan berikutnya (tidak perlu dikompilasi ulang).
SQL dapat dioptimasikan oleh DBMS compiler
 Berbagi-pakai kode modular berimbas pada:
 Mengurangi pekerjaan berlebih – penggunaan ulang kode
secara efisien
 Standarisasi pemrosesan
 Spesialisasi antara developer
Dasar Stored Procedure
Membuat Stored Procedure
 Sintaks:
CREATE PROCEDURE NamaProsedur AS
Deklarasi_Variable
.. .. ..
.. .. ..
RETURN
 Contoh:
CREATE PROCEDURE pr_honor AS
SELECT namainstruktur, honor FROM
instruktur
RETURN
Menjalankan Stored Procedure
 dengan EXEC
 EXEC pr_honor
 EXEC sp_help
 dengan EXECUTE
 EXECUTE pr_honor
 EXECUTE sp_help
 langsung nama prosedur
 pr_honor
 sp_help
Mengkoreksi Sebuah Prosedur
 Statement ALTER harus digunakan
ALTER PROCEDURE pr_honor AS
select inisial, namainstruktur, honor
from instruktur
RETURN
Menghapus Stored Procedure
 digunakan statement DROP
 Sintaks:
 DROP PROCEDURE NamaProsedur
 Contoh:
 DROP PROCEDURE pr_honor
 DROP PROCEDURE uspHitungGaji
Mengubah Prosedur Tanpa Menggunakan ALTER
Cek prosedur ada, bila ada di drop, kemudian baru create
USE mydb
IF EXISTS (SELECT name FROM sysobjects
WHERE nama= 'pr_honor' AND type = 'P')
DROP PROCEDURE pr_honor
GO
CREATE PROCEDURE pr_honor
AS
SELECT inisial, namainstruktur, honor
FROM instruktur
GO
Mengubah Prosedur Tanpa Menggunakan ALTER
: SQL Server 2008
USE AdventureWorks2008R2;
GO
IF OBJECT_ID ( 'HumanResources.uspGetAllEmployees',
'P' ) IS NOT NULL
DROP PROCEDURE HumanResources.uspGetAllEmployees;
GO
CREATE PROCEDURE HumanResources.uspGetAllEmployees AS
SET NOCOUNT ON;
SELECT LastName, FirstName, Department FROM
HumanResources.vEmployeeDepartmentHistory;
GO
Mengubah Nama Stored Procedure
Gunakan sintaks SP_RENAME
Contoh:
SP_RENAME pr_honor, pr_honor2
Parameter
Parameter
 Prosedur dapat mempunyai parameter berupa variable
yang disuplai oleh program yang memanggilnya
 Sintaks parameter
 @param as datatype = default [OUT/OUTPUT]
 Contoh:
CREATE PROC pr_honor (@p1 int, @p2 char(16), .. )
AS
Deklarasi_Variable
.. .. ..
.. .. ..
Parameter
 Input parameter
 Digunakan untuk memberikan nilai dari pemanggil ke
dalam SP
 Contoh:
• CREATE PROC pr_honor (@p1 INT) AS …
 Output parameter
 Digunakan untuk mengembalikan nilai non-recordset dari
SP ke pemanggil
• Misalnya SP untuk insert, mengembalikan nilai hasil identity
 Contoh:
• CREATE PROC pr_honor (@p1 INT, @p2 CHAR(16),@pout1
INT OUT, @pout2 CHAR(1) OUTPUT) AS …
Output Parameter
 Nilai parameter bisa diolah pada program prosedur dan
untuk kemudian parameter tersebut dapat diubah dan
diberikan nilainya pada program yang memanggilnya.
CREATE PROC m (
@p1 int, @p2 int, @h int OUTPUT)
AS
SELECT @h= @p1 * @p2
Eksekusi Output Parameter
Contoh:
DECLARE @hsl INT
EXEC m 10, 20, @hsl OUTPUT
PRINT 'hasil = ' + str (@hsl)
 Pada contoh ada 3 parameter, yaitu p1 dan p2 sebagai
input parameter dan h sebagai output parameter.
 Saat eksekusi, p1 adalah 10, p2 adalah 20 dan hsl
merupakan hasil perkalian.
Parameter dgn Default Value
 Default value
 Untuk menghindari null karena nilai tidak diberikan
 Merupakan nilai default yang otomatis diberikan bila tidak
dispesifikasikan ketika pemanggilan SP
 Contoh:
CREATE PROC pr_honor (@p1 INT=5) AS
select nama instruktur, honor from instruktur
where inisial=@ini
Return
 Urutan parameter
 Tempatkan parameter dengan default value di akhir dari daftar
parameter untuk penggunaan fleksibel
Eksekusi Procedure Berparameter
 Pada saat eksekusi, parameter diberikan setelah nama
SP
 Berdasarkan nama:
EXEC pr_GetTopProducts
@StartID = 1, @EndID = 10
 Berdasarkan posisi:
EXEC pr_GetTopProducts 1, 10
 Leveraging Default values
EXEC pr_GetTopProducts @EndID=10
RETURN & ERROR
Return
 Digunakan untuk mengembalikan nilai hasil balik berupa
status dari eksekusi sukses atau gagal
 Statement return juga bisa digunakan untuk
menghentikan segala eksekusi
Error
 @@ERROR  Fungsi ini digunakan untuk
mengimplementasikan penanganan kode kesalahan.
 Berisi ID Error yang dihasilkan oleh pernyataan SQL terakhir
yang dijalankan.
 @@ERROR berisi 0  Sukses, selain itu gagal
 Contoh
CREATE PROC Proc1 @ColumnPK INT=NULL AS
BEGIN
INSERT INTO TABLE1 VALUES(@ColumnPK)
IF @@Error <> 0
BEGIN
PRINT 'Error occurred'
END
END
Membangkitkan Error
 Untuk membangkitkan pesan kesalahan gunakan sintaks
RAISEERROR
 Contoh
RAISERROR('demo error', 1, 1)
Studi Kasus
Melewatkan Nama Object sebagai Parameter
 Parameter tidak dapat memuat suatu object kecuali kita
menggunakan object tersebut di dalam SP dengan
statement EXEC (sering disebut dynamic query)
 Contoh: Bad Dynamic Query
CREATE PROC find_data (
@table varchar(128)
) AS
SELECT * FROM @table
GO
 Hasilnya:
 Error Message
 Server: Msg 137, Level 15, State 2,
Procedure find_data, Line 6 Must declare
the variable ‘@table’.
 Pesan kesalahan tersebut nampak ganjil karena parameter
@table telah didefinisikan sebagai variable
Solusi Pemecahan
CREATE PROC find_data (
@table varchar(128)
) AS
EXEC ('select * from ' + @table)
RETURN
GO
TUGAS: MUST READ!
T-SQL
 VARIABLE
 Global Variable, Local Variable
 Declaration
 Assignment
 PROGRAMMING STRUCTURE T-SQL
 IF THEN, CASE WHEN
 WHILE, CONTINUE, BREAK
 TRY…CATCH