Prosedur vіdminnіst vіd vіd, scho zberіgaєtsya. DROP VIEW proposisi. Intoleransi fungsi yang harus dihindari

Prosedur sedang disimpan prosedur tersimpan) - penamaan objek program database. SQL Server memiliki jenis prosedur decal yang disimpan.

Prosedur sistem yang disimpan prosedur tersimpan sistem) dipasok oleh pengecer DBMS dan dikompilasi untuk dilihat dari katalog sistem atau dari informasi sistem. Nama mereka dimulai dengan awalan "sp_". Prosedur dari semua jenis yang disimpan diluncurkan, untuk bantuan perintah EXECUTE, sehingga Anda dapat mempersingkat menjadi EXEC. Misalnya, prosedur sp_helplogins, diluncurkan tanpa parameter, membentuk dua panggilan tentang nama entri cloud (Bahasa Inggris login) (Bahasa Inggris pengguna).

EXEC sp_helplogin;

Shchob sampai saat ini pemberitahuan tentang diy, scho vykonuyutsya untuk prosedur sistem tambahan yang disimpan, di Tabel. 10.6 masukkan pantat deyaki. Ada lebih dari seribu prosedur sistem yang disimpan di SQL Server.

Tabel 10.6

Terapkan Prosedur Sistem SQL Server

Koristuvachevi pembuatan prosedur penyimpanan yang tersedia untuk DB coristuvac dan DB untuk objek timchasovye. Di sisa hari, prosedur yang diambil adalah timchasova. Jadi, seperti di vipadku dengan tabel timchasov, penamaan prosedur timchasov, yang disimpan, bersalah untuk memulai dengan awalan "#", karena seluruh prosedur timchasov lokal disimpan, tetapi dengan "##" - begitu global. Prosedur pengaturan waktu lokal hanya dapat dilakukan dalam kerangka hari, di mana ia dibuat, bersifat global - dan di bidang lain.

Pemrograman objek SQL Server dapat bekerja baik untuk bantuan Transact-SQL, dan untuk bantuan pilihan (Bahasa Inggris assembly) di lingkungan CRL (Common Language Runtime) dari Microsoft.Net Framework. Ini hanya cara pertama untuk melihat asisten ini.

Untuk pembuatan prosedur yang disimpan, digunakan pernyataan CREATE PROCEDURE (Anda dapat mempersingkatnya menjadi PROC), format panduannya di bawah ini:

BUAT(PROCEDUR I PROSEDUR) proc_name[; nomor]

[(tipe_data gparameter )

[“bawaan] |

[DENGAN [ ,...n ] ]

[ UNTUK REPLIKASI ]

AS ([BEGIN]sql_statement[;][...n][END])

Demikian juga, prosedur yang sedang disimpan (baik pemicu, fungsi, tampilan) dibuat dengan opsi ENKRIPSI, sehingga kode ditulis ulang sedemikian rupa sehingga teks menjadi tidak dapat dibaca. Pada saat yang sama, seperti yang ditugaskan, algoritme untuk porting dari versi SQL Server sebelumnya dan tidak dapat dilihat sebagai algoritme superior didasarkan pada utilitas yang memungkinkan algoritme porting dibalik.

Opsi RECOMPILE menunjukkan bahwa sistem akan mengkompilasi ulang teks selama prosedur skin wicking. Dengan cara yang luar biasa, prosedur dikompilasi pada awal pertama dan disimpan dalam cache, yang memungkinkan Anda untuk menyimpan kode.

EXECUTE AS Mengatur konteks keamanan, yang mungkin memiliki prosedur. Berikan salah satu nilai f CALLER | DIRI | PEMILIK | "nama belakang"). CALLER adalah nilai di balik promosi dan berarti kode tersebut akan dipilih dalam konteks kode keamanan yang memanggil modul. Jelas, ibu bersalah atas coristuvach, tidak hanya pada objek pemrograman itu sendiri, tetapi juga pada objek database lain, yang membuat mereka terjebak. EXECUTE AS SELF berarti tergantung pada konteks pembicara, yang membuat atau mengubah objek pemrograman. OWNER menetapkan bahwa kode akan dibungkus dalam konteks manajer utas prosedur. Jika vlasnik tidak ditunjuk untuknya, maka dia bersumpah atas vlasnik skema, untuk berbaring. EXECUTE AS "user_name" memungkinkan Anda untuk secara eksplisit menentukan nama koristuvach (dalam satu kaki).

Parameter dapat ditentukan untuk prosedur. Semua perubahan lokal, yang diubah untuk mentransfer nilai ke prosedur. Selain parameter voicing dengan kata kunci OUTPUT (atau disingkat menjadi OUT), Anda juga dapat mengaturnya ke nilai setelah prosedur berakhir, Anda juga dapat menggunakan program yang disebut prosedur. Kata kunci READONLY berarti bahwa nilai parameter tidak dapat diubah di tengah prosedur, yang disimpan.

Parameter dapat diberi nilai untuk promosi, karena akan diubah, sehingga nilai parameter tidak akan ditentukan secara eksplisit pada jam berikutnya dari prosedur. Mari kita lihat contohnya:

BUAT surma PROC (@a int, @b int=0,

©hasil int OUTPUT) AS

SET @hasil=0a+0b

Kami membuat prosedur dengan tiga parameter, terlebih lagi, parameter @b memiliki nilai penguncian = 0, dan parameter @hasil keluar: nilai diputar melalui yang baru ke dalam program yang dipanggil. Diya, apa yang harus menang, lakukan dengan mudah - parameter output mengambil nilai dari jumlah dua input.

Saat bekerja di SQL Server Management Studio, saya membuat prosedur yang disimpan, Anda dapat menemukannya di bagian pemrograman database (Bahasa Inggris Programabilitas) dalam tanda kurung untuk prosedur yang disimpan (Gbr. 10.2).

Saat Anda mengklik prosedur seperti parameter input, Anda dapat mengubah perubahan dan konstanta. Mari kita lihat dua contoh. Parameter input pertama dari prosedur secara eksplisit ditetapkan oleh konstanta, parameter output wiki memiliki kata kunci OUTPUT. Di opsi lain, sebagai parameter input pertama, nilai perubahan ditetapkan, dan untuk parameter lainnya, setelah kata kunci DEFAULT tambahan, ditunjukkan nilai apa yang dapat diubah untuk kunci:

Beras. 10.2.

MENYATAKAN @3 int;

EXEC summa 10.5, @OUTPUT;

PRINT0c; – akan ditampilkan 15

MENYATAKAN Gi int = 5;

- di bawah jam viklik nilai vikoristovuєmo untuk zamovchuvannyam

EXEC summa Gi, DEFAULT, OUTPUT 0s;

PRINT0c; – akan ditampilkan 5

Sekarang mari kita lihat contoh dengan menganalisis kode belokan, yang dengannya prosedur berakhir. Biarkan saya menghibur Anda, skilki di meja Buku buku, terlihat pada rentang tahun tertentu. Jika demikian, tongkol rіk tampak lebih besar dari kontsevy, prosedurnya diubah menjadi "1" dan pidrakunok tidak dilakukan, jika tidak - jumlah buku juga diubah dan diubah menjadi 0:

BUAT PROC dbo.rownum(0Tahun pertama int, GLastYear int, 0hasil int OUTPUT) SEBAGAI

JIKA 0Tahun Pertama>0Tahun Terakhir RETURN 1

SET @result= (PILIH JUMLAH(*) DARI dbo.Bookl

DIMANA ANTARA 0Tahun Pertama DAN 0Tahun Terakhir) ;

Mari kita lihat varian dari prosedur ini, di mana kode rotasi dimasukkan ke dalam seluruh perubahan 0ret, setelah itu nilainya dianalisis (dalam hal ini adalah 1). Fungsi CAST yang menang pada operator PRINT, berfungsi untuk mengubah nilai variabel integer Gres menjadi tipe baris:

MENYATAKAN 0ret int, Gres int

EXEC Gret = rownum 2004, 2002, Gres OUT;

JIKA 0ret=l CETAK

CETAK "Jumlah buku" + CAST(Gres sebagai varchar(20))

Menyimpan prosedur dapat membaca data dari tabel, dan mengubah data dan membuat tabel dan objek database lainnya.

Namun, tidak mungkin membuat skema, fungsi, pemicu, prosedur, dan prosedur tersimpan.

Pantat ofensif menggambarkan kemampuan, dan nutrisi, terkait dengan bidang visibilitas objek penjaga. Prosedur diberikan di bawah ini, yang diambil, memverifikasi ulang keberadaan tabel waktu #Tab2; jika tidak ada tabel, saya membuatnya. Setelah tabel #Tab2, nilai dua kolom dimasukkan, dan alih-alih tabel, itu ditampilkan oleh pernyataan SELECT:

BUAT PROC My_Procl (@id int, @nama varchar(30))

JIKA OBJECT_ID("tempdb.dbo.#Tab21) NULL

MASUKKAN KE dbo.#Tab2 (id, nama) NILAI (0id,0nama)

PILIH * DARI dbo. #Tab2-#1

Sebelum prosedur minggu pertama yang diambil, kami akan memasukkannya ke tabel waktu berikutnya #Tab2. Beri hormat kepada operator ES. Untuk pantat depan, parameter dipindahkan ke prosedur "berdasarkan posisi", dan dalam hal ini, format yang berbeda untuk mentransfer parameter - "berdasarkan nama" digunakan, nama parameter dari nilai itu secara eksplisit ditunjukkan:

BUAT TABEL dbo. # Tab2(id int, nama varchar(30));

EXEC My_Procl 0name="lvan", 0id=2;

PILIH * DARI dbo. #tab2; -#2

Di pantat melayang, pernyataan SELECT mengubah binari: pertama kali - tengah prosedur, yang kedua - dari fragmen kode yang memanggil (ditugaskan oleh komentar "№ 2").

Sebelum wiki prosedur lainnya, kami melihat tabel waktu #Tab2. Kemudian akan dibuat tabel waktu tunggal dari prosedur yang diambil:

DROP TABLE dbo. #tab2;

EXEC My_Procl 0name="Ivan", 0id=2;

PILIH * DARI dbo. #tab2; -#2

Dalam hal ini, saya hanya memberikan pernyataan SELECT, yang terletak di tengah prosedur (dengan komentar "Xa 1"). Entri SELECT "No. 2" telah diampuni, karena dibuat dalam prosedur, yang disimpan, tabel waktu pada saat kembali dari prosedur sudah akan dihapus dari database tempdb.

Prosedurnya dapat dilihat dengan bantuan operator DROP PROCEDURE. Format Yogo melayang di bawah. Dengan satu operator, Anda dapat melihat beberapa prosedur yang disimpan dengan menghidupkannya kembali melalui seseorang:

DROP (PROCEDUR I) ( prosedur ) [

Misalnya, ternyata sebelumnya saya membuat prosedur summa:

JATUH PROC summa;

Anda dapat membuat perubahan pada prosedur utama (dan sebenarnya - menetapkan kembali ) menggunakan bantuan operator ALTER PROCEDURE (tambahan

kecepatan uap PROC). Terlepas dari kata kunci ALTER, format pernyataan praktis berbeda dari format CREATE PROCEDURE. Misalnya, kita mengubah prosedur dbo. rownum, mengatur opsi viscon dalam konteks keamanan sersan:

ALTER PROC dbo.rownum(STahun pertama int,

SLastTahun int, Hasil int OUTPUT)

DENGAN EXECUTE AS Owner - opsi untuk menginstal

JIKA 0Tahun Pertama>0Tahun Terakhir PENGEMBALIAN 1 LAGI DIMULAI

SET 0result= (PILIH JUMLAH(*) DARI dbo.Bookl

DIMANA ANTARA STahun Pertama DAN TAHUN TERAKHIR);

Dalam beberapa kasus, Anda mungkin perlu membuktikan perlunya perintah pencetakan dinamis dan viconann pada server database. Tse zavdannya juga dapat diperiksa untuk bantuan operator ES. Di pantat bawah melayang, pilihan catatan dari tabel Bookl dipilih untuk kesetaraan intelektual atribut Tahun, nilai yang diatur untuk diubah:

MENYATAKAN 0y int = 2000;

EXEC("PILIH * FROM dbo.Bookl WHERE = " [dilindungi email]) ;

Instruksi Vikonannya yang terbentuk secara dinamis membuat pemikiran ulang implementasi serangan komputer seperti "SQL-injection" (Bahasa Inggris injeksi SQL). Inti dari serangan itu terletak pada kenyataan bahwa penghancur digunakan dalam data, yang secara dinamis terbentuk, kode master dalam SQL. Kedengarannya seperti itu, jika parameter yang disajikan diambil dari hasil pengenalan data secara singkat.

Descho mengubah pantat depan:

MENYATAKAN 0y varchar(100);

SET 0y = "2TOV"; - tse mi diambil dari coristuvach

Dengan asumsi bahwa makna baris yang disertakan dalam pernyataan SET, kami mengambil sebagai kode (tidak peduli apa peringkatnya, misalnya, melalui lampiran web), maka contoh tersebut menggambarkan perilaku "standar" dari kode kami.

MENYATAKAN 0y varchar(100);

SET 0y = "2000; HAPUS DARI dbo.Book2"; – injeksi

EXEC("PILIH * DARI dbo.Book2 WHERE="+0y);

Disarankan, jika memungkinkan, untuk menggunakan prosedur sistem sp_executcsql dengan cara yang sama, yang disimpan, karena memungkinkan Anda untuk mengontrol jenis parameter, yang merupakan salah satu bilah di jalur SQL. Tanpa melihat detail format , mari kita lihat yang mirip dengan yang disajikan sebelumnya:

EXECUTE sp_executesql

N"PILIH * FROM dbo.Bookl WHERE = 0y",

Di sini, jenis parameter ditentukan secara eksplisit, yang akan dimenangkan dalam permintaan, dan SQL Server akan dikontrol jika terjadi perubahan. Huruf "N" di depan cakar menunjukkan bahwa karakternya adalah konstanta dalam format Unicode, yang berarti prosedur. Parameter dapat ditetapkan sebagai nilai permanen, dan nilai kedua adalah nilai yang berbeda.

robot meta– pelajari cara membuat dan mengubah prosedur yang disimpan di server database.

1. Pengoperasian semua aplikasi, analisis hasil implementasinya di utilitas SQL Server Management Studio. Validasi ulang keberadaan prosedur dalam database streaming.

2. Vikonannya semua aplikasi dan tugas dalam proses kerja laboratorium.

3. Mencari pesanan individu untuk opsi.

Penjelasan tentang robot vikonannya

Untuk menguasai pemrograman prosedur yang disimpan, kami menggunakan pantat basis data dengan nama DB_Buku, seperti bula diciptakan oleh robot laboratorium No. 1. Ketika vykonannі prikladіv yang zavdan menghormati validitas nama database, tabel dan objek lain dari proyek.

Menyimpan prosedur adalah satu set perintah yang terdiri dari satu atau satu set operator atau fungsi SQL yang dikumpulkan dalam database secara sekilas.

Jenis prosedur yang disimpan

Prosedur sistem yang diurus diakui untuk pengawasan berbagai kegiatan administrasi. Hampir semua tugas untuk administrasi server dihitung untuk bantuan. Dapat dikatakan bahwa prosedur sistem yang disimpan oleh antarmuka yang memastikan bekerja dengan tabel sistem. Prosedur sistem yang disimpan, dapat diawali dengan sp_, disimpan dalam database sistem dan dapat dipanggil dalam konteks database lainnya.

Prosedur Koristuvatsky, yang disimpan, diimplementasikan oleh chi tersebut dan yang lainnya. Menyimpan prosedur - objek lengkap dari basis data. Tergantung pada prosedur kulit mana yang disimpan, itu terdaftar dalam basis data tertentu, de dan vikonuetsya.

Prosedur pengaturan waktu, yang disimpan, hanya berlangsung satu jam, setelah itu secara otomatis dikurangi oleh server. Bau busuk menyebar secara lokal dan global. Prosedur timchasovy lokal, yang disimpan, hanya dapat dipanggil kembali sejak hari itu, dalam hal apa pun. Di bawah jam prosedur seperti itu, perlu memberi nama yang dimulai dari satu simbol #. Seperti semua objek jam, prosedur dengan tipe yang sama, yang disimpan, secara otomatis dihapus ketika server dihidupkan, dihidupkan ulang, atau server sedang berjalan. Prosedur pengaturan waktu global yang disimpan tersedia untuk setiap hari server, di mana prosedur yang sama digunakan. Untuk penunjukan cukup dengan memberikan y m'ya, yang dimulai dari simbol ##. Prosedur Qi terlihat saat me-restart salah satu server, serta saat sesi ditutup, dalam konteks bau apa yang diciptakan.

Penciptaan, perubahan prosedur yang disimpan

Penciptaan prosedur yang diurus, mentransfer tugas berikutnya: perencanaan hak akses. Saat Anda membuat prosedur tersimpan, Anda harus melindungi bahwa Anda tidak akan memiliki hak untuk mengakses objek basis data yang telah Anda buat; pilihan parameter untuk memilih prosedur, prosedur yang disimpan, dapat menjadi ibu dari parameter input dan output; kode prosedur rozrobka, scho zberіgaetsya. Kode prosedur dapat menggantikan urutan perintah SQL apa pun, termasuk pemanggilan kembali prosedur lain yang disimpan.

Sintaks operator untuk membuat prosedur eksplisit baru atau mengubah dalam nilai MS SQL Server:

( CREATE | ALTER ) PROC[ EDURE] nama_prosedur [ ;number] [ ( @parameter_name tipe data ) [ VARIASI ] [ = DEFAULT ] [ OUTPUT] ] [ ,... n] [ WITH ( RECOMPILE | ENCRYPTION | RECOMPILE , ENC [ FOR REPLICASI] SEBAGAI sql_statement [ ... n]

Mari kita lihat parameter dari perintah.

Awalan Vikoristovuyuchi sp_, #, ##, prosedur yang dibuat, dapat ditetapkan sebagai sistem atau timchasova. Seperti dapat dilihat dari sintaks perintah, tidak diperbolehkan untuk menentukan nama sersan, yang prosedurnya diperlukan, dan juga nama basis data, di mana ia dapat ditempatkan. Jadi, untuk membuat prosedur yang disimpan dalam database tertentu, perlu mengetikkan perintah CREATE PROCEDURE dalam konteks database. Dengan bantuan badan prosedur, yang diurus, dimungkinkan untuk memilih nama yang dipersingkat sebelum basis data dideklarasikan, jadi tanpa menentukan nama basis data. Jika Anda perlu pergi ke objek yang terdaftar di database lain, masukkan nama obov'yazkovo database.

Untuk mentransfer data input dan output ke prosedur yang dibuat, yang disimpan, nama parameter yang akan digunakan dimulai dengan simbol @. Dalam satu prosedur, yang dipilih, Anda dapat mengatur parameter anonim, dipisahkan dengan koma. Jenis prosedur tidak bersalah atas perubahan lokal, yang namanya dipilih dengan nama parameter prosedur. Untuk menetapkan jenis parameter data prosedur yang diambil, cocok apakah jenis data SQL, termasuk string. Namun, tipe data CURSOR hanya dapat digunakan sebagai parameter prosedur opsional, yang harus diperhitungkan. dari penetapan kata kunci OUTPUT.

Adanya kata kunci OUTPUT berarti merupakan parameter penugasan yang valid untuk membalik data dari prosedur yang diambil. Namun, itu tidak berarti bahwa parameter tidak cocok untuk melewatkan nilai ke prosedur yang akan disimpan. Menentukan kata kunci OUTPUT menginstruksikan server, setelah keluar dari prosedur yang sedang disimpan, untuk menetapkan nilai parameter perubahan lokal ke utas yang ditentukan saat memanggil prosedur sebagai nilai parameter. Secara signifikan, ketika menentukan kata kunci OUTPUT, nilai parameter variabel untuk jam kedua prosedur hanya dapat diatur dengan perubahan lokal. Tidak diperbolehkan untuk memutar apakah itu virazi atau konstanta yang valid untuk parameter yang cukup besar. Kata kunci VARYING dipanggil sekaligus dengan parameter OUTPUT, yang dapat bertipe CURSOR. Ditentukan bahwa parameter keluaran akan menjadi pengali yang dihasilkan.

Kata kunci DEFAULT adalah nilai, jadi kami mengambil parameter opsional sebagai kunci. Dengan cara ini, saat memanggil prosedur, Anda dapat secara eksplisit menentukan nilai parameter yang diberikan.

Oscilki server men-cache rencana untuk mengunduh dan menyusun kode, dengan sedikit penundaan dalam prosedur, nilainya sudah siap. Namun, dalam beberapa situasi, masih diperlukan untuk mengkompilasi ulang kode prosedur. Memasukkan kata kunci RECOMPILE menginstruksikan sistem untuk membuat rencana perawatan yang akan disimpan jika terjadi ruam kulit.

Parameter FOR REPLICATION dari permintaan saat mereplikasi data dan termasuk prosedur yang dibuat, yang diambil sebagai artikel dalam publikasi. Kata kunci ENCRYPTION menginstruksikan server Viconity untuk mengenkripsi kode prosedur yang disimpan, sehingga dapat melindungi perlindungan algoritma hak cipta yang diterapkan robot pada prosedur yang disimpan. Kata kunci AS ditempatkan pada tongkol tubuh, yang menyelamatkan prosedur. Pada prosedur yang sama, hampir semua perintah SQL dapat dibekukan, transaksi dapat dihentikan, pemblokiran dapat diatur, dan prosedur lain yang disimpan dapat dipanggil. Keluar dari prosedur, yang disimpan, dapat dilakukan dengan bantuan perintah RETURN.

Prosedur Vidalnya yang diambil

JATUH PROSEDUR ( nama_prosedur) [ ,... n]

Tata cara vikonannya yang diambil

Untuk memenangkan prosedur, perintahnya adalah: [ [ EXEC [UTE] nama_prosedur [ ;angka] [ [ @parameter_name= ] ( nilai | @nama_perubahan) [ OUTPUT ] | [ DEFAULT ] ] [ ,...n]

Jika prosedur yang akan diambil tidak ada satu perintah pun dalam paket, maka kehadiran perintah EXECUTE adalah wajib. Selain itu, perintah ini diperlukan untuk prosedur panggilan cepat dari prosedur atau pemicu lain.

Pilihan kata kunci OUTPUT untuk jam siklus prosedur tidak lagi valid untuk parameter, seolah-olah jam pembuatan prosedur dengan kata kunci OUTPUT telah dihilangkan.

Jika kata kunci DEFAULT ditentukan untuk parameter selama siklus prosedur, nilai untuk promosi akan diulang. Jelas, kata DEFAULT yang ditentukan hanya diperbolehkan untuk parameter tersebut, yang nilai standarnya ditetapkan.

Dari sintaks perintah EXECUTE, dapat dilihat bahwa nama parameter dapat dihilangkan pada akhir siklus prosedur. Namun, dalam kasus ini, coristuvach bersalah karena menentukan nilai parameter sesuai urutan perlindungan bau selama prosedur gabungan. Tidak mungkin menetapkan nilai untuk promosi ke parameter, cukup dengan melewatkan jam pertama kebangkitan. Jika perlu untuk menghilangkan parameter, di mana nilai untuk kunci ditetapkan, cukup untuk secara eksplisit menentukan nama parameter saat memanggil prosedur yang akan diambil. Lebih dari itu, sedemikian rupa dimungkinkan untuk mengatur ulang parameter dan nilainya ke urutan yang memadai.

Penting bahwa pada akhir siklus prosedur, baik nama parameter ditentukan dengan nilai, atau lebih dari nilai tanpa nama parameter. Kombinasi ini tidak diperbolehkan.

RETURN link ke prosedur yang disimpan

Ini memungkinkan Anda untuk keluar dari prosedur pada titik mana pun di luar mental yang ditentukan, dan juga memungkinkan Anda untuk mentransfer hasil prosedur dengan nomor, yang dengannya Anda dapat menilai kebenaran prosedur. Contoh pembuatan prosedur tanpa parameter:

PROSEDUR BUAT Count_Books SEBAGAI SELECT COUNT (Code_book) DARI Buku GO

Tugas 1.

EXEC Count_Books

Memutarbalikkan hasilnya.

Contoh pembuatan prosedur dengan parameter input:

BUAT PROSEDUR Count_Books_Pages @Count_pages SEBAGAI SELECT COUNT (Code_book) FROM Books WHERE Pages>= @Count_pages GO

Manajer 2. Buat prosedur ini di cabang Stored Procedures dari database DB_Books menggunakan utilitas SQL server Management Studio. Jalankan untuk perintah bantuan

EXEC Count_Books_Pages 100

Memutarbalikkan hasilnya.

Contoh pembuatan prosedur dengan parameter input:

BUAT PROSEDUR Count_Books_Title @Count_pages AS INT , @Title AS CHAR (10 ) AS SELECT COUNT (Code_book) FROM Books WHERE Pages>= @Count_pages AND Title_book LIKE @Title GO

Tugas 3. Buat prosedur ini di cabang Stored Procedures dari database DB_Books menggunakan utilitas SQL server Management Studio. Jalankan untuk perintah bantuan

EXEC Count_Books_Title 100 "P%"

Memutarbalikkan hasilnya.

Contoh pembuatan prosedur dengan parameter input dan parameter output:

CREATE PROCEDURE Count_Books_Itogo @Count_pages INT , @Title CHAR (10 ) , @Itogo INT OUTPUT AS SELECT @Itogo = COUNT (Code_book) FROM Books WHERE Pages>= @Count_pages AND Title_book LIKE @Tit

Tugas 4. Buat prosedur ini di cabang Stored Procedures dari database DB_Books menggunakan utilitas SQL server Management Studio. Jalankan untuk serangkaian perintah tambahan:

Sql> Deklarasikan @q Sebagai int EXEC Count_Books_Itogo 100, "P%", @q output pilih @q

Memutarbalikkan hasilnya.

Contoh pembuatan prosedur dengan parameter input dan RETURN:

CREATE PROCEDURE checkname @param INT AS IF (SELECT Name_author FROM author WHERE Code_author = @param) = "Pushkin A.S." PENGEMBALIAN 1 LAGI PENGEMBALIAN 2

Tugas 5. Buat prosedur ini di cabang Stored Procedures dari database DB_Books menggunakan utilitas SQL server Management Studio. Jalankan untuk perintah tambahan:

MENYATAKAN @return_status INT EXEC @return_status = nama centang 1 PILIH "Status Pengembalian" = @return_status

Contoh pembuatan procedure tanpa parameter untuk menaikkan nilai field key pada tabel Purchases sebanyak 2 kali :

BUAT PROC update_proc AS UPDATE Pembelian SET Code_purchase = Code_purchase* 2

Tugas 6. Buat prosedur ini di cabang Stored Procedures dari database DB_Books menggunakan utilitas SQL server Management Studio. Jalankan untuk perintah bantuan

EXEC update_proc

Contoh prosedur dengan parameter input untuk mengambil semua informasi tentang penulis tertentu:

CREATE PROC select_author @k CHAR (30) AS SELECT * FROM Authors WHERE name_author= @k

Tugas 7.

EXEC select_author "Pushkin A.S." atau select_author @k= "Pushkin A.S." atau EXEC select_author @k= "Pushkin A.S."

Contoh pembuatan prosedur dengan parameter input dan nilai penguncian untuk meningkatkan nilai bidang kunci dalam tabel Pembelian untuk beberapa kali (untuk penguncian 2 kali):

CREATE PROC update_proc @p INT = 2 SEBAGAI PEMBARUAN Pembelian SET Code_purchase = Code_purchase * @p

Prosedur tidak membalikkan data yang diharapkan.

Manajer 8. Buat prosedur ini di cabang Stored Procedures dari database DB_Books menggunakan utilitas SQL server Management Studio. Jalankan untuk perintah tambahan:

EXEC update_proc 4 atau EXEC update_proc @p = 4 atau EXEC update_proc --zastosovuєtsya nilai untuk promosi.

Contoh pembuatan prosedur dari parameter input dan output. Buat prosedur untuk menentukan jumlah pesanan, dihitung untuk periode indikasi:

CREATE PROC count_purchases @d1 SMALLDATETIME, @d2 SMALLDATETIME, @c INT OUTPUT AS SELECT @c= COUNT (Code_purchase) FROM Purchases WHERE Date_order BETWEEN @d1 AND @d2 SET @c = ISNULL(@,

Manajer 9. Buat prosedur ini di cabang Stored Procedures dari database DB_Books menggunakan utilitas SQL server Management Studio. Jalankan untuk perintah tambahan:

MENYATAKAN @c2 INT EXEC count_purchases '01- jun- 2006 ', '01- jul- 2006 ', @c2 OUTPUT SELECT @c2

Pilihan untuk mendapatkan pekerjaan laboratorium No. 4

posisi Zagalni. Di utilitas SQL Server Management Studio, buat sisi baru untuk kode (tombol "Buat permintaan"). Secara terprogram buat database aktif DB_Books di balik bantuan pernyataan Use. Buat prosedur yang menangani tambahan Buat pernyataan prosedur, dan tetapkan nama prosedurnya sendiri. Prosedur kulit vikonuvatime pada satu permintaan SQL, yang merupakan vikonovation dari robot laboratorium lain. Selain itu, kode SQL perlu diubah sedemikian rupa, sehingga mereka dapat mentransfer nilai bidang, yang merupakan cara pencarian dilakukan.

Misalnya, di luar kepala robot laboratorium No. 2:

/*Pilih jumlah pegawai pos (tabel Pengiriman) beri nama perusahaan, telepon dan IPN (bidang Nama_perusahaan, Telepon dan INN), di mana nama perusahaan (bidang Nama_perusahaan) "BAT SVIT".

SELECT Name_company, Phone, INN FROM Delivery WHERE Name_company = "BAT SVIT"

*/ –Prosedur yang akan dibuat untuk robot ini:

BUAT PROC select_name_company @comp CHAR (30 ) SEBAGAI SELECT Name_company, Phone, INN FROM Delivery WHERE Name_company = @comp

- Untuk memulai prosedur, perintah diberikan:

EXEC pilih_nama_perusahaan "BAT SVIT"

Daftar direktur

Buat program baru di SQL Server Management Studio. Secara terprogram membuat database individu aktif, dibuat di robot laboratorium No. 1, untuk bantuan operator Use. Buat prosedur yang menangani tambahan Buat pernyataan prosedur, dan tetapkan nama prosedurnya sendiri. Prosedur kulit vikonuvatime pada satu permintaan SQL, seperti yang disajikan dalam tampilan tugas berikutnya untuk opsi.

Pilihan 1

1. Masukkan daftar spivrobitnikiv, yakі mungkin ingin satu anak.

2. Masukkan daftar anak yang melihat hadiah di akhir periode.

3. Masukkan daftar anak-anak batkіv, yakі mayutnі inopnolіtn.

4. Masukkan informasi tentang hadiah dengan jumlah lebih besar dari jumlah yang ditentukan, diurutkan berdasarkan tanggal.

pilihan 2

1. Masukkan daftar aksesori dengan jenis yang ditetapkan.

2. Informasikan jumlah perbaikan alat kelengkapan dan jumlah total perbaikan pada nakhoda yang ditunjuk.

3. Masukkan daftar vlasnik alat kelengkapan dan jumlah hewan, urutkan jumlah hewan dan cara jatuhnya.

4. Masukkan informasi tentang pekerjaan dengan nomor yang ditetapkan lebih tinggi atau dengan tanggal penerimaan untuk pekerjaan kurang dari tanggal yang ditetapkan.

Opsi 3

2. Masukkan daftar kode penjualan, warna yang dijual dengan jumlah yang lebih besar dari jumlah yang ditentukan.

3. Masukkan tanggal penjualan, jumlah, penjual dan tiket untuk kode penjualan yang ditentukan.

4. Masukkan daftar tiket dan grade untuk tiket dengan ketinggian lebih besar dari nomor yang ditentukan atau lebih elegan.

Opsi 4

1. Masukkan daftar label dari indikasi yang ditetapkan sebelum berhenti.

2. Masukkan daftar tanggal pengiriman, di mana lebih dari jumlah liq yang sama telah terjual.

3. Masukkan tanggal pengiriman, jumlah, PIB jumlah sesuai pemasok dan saya akan memberi nama liqiv setelah kode kebutuhan lebih dari jumlah yang ditentukan.

Opsi 5

2. Masukkan daftar properti yang didebet karena alasan tertentu.

3. Masukkan tanggal jatuh tempo, saya beri nama kepemilikan, PIB tanggal pendebetan untuk pendebetan masa pendebetan.

4. Masukkan daftar harta dengan jenis yang ditentukan atau dengan tanggal kepemilikan lebih besar dari nilai pertama

Opsi 6

1. Masukkan daftar asuransi lebih dari jumlah yang ditentukan.

2. Masukkan daftar produk, atas nama makna yang digunakan, penggalan kata.

3. Masukkan nama produk, beri nama lini, beri nama produk dengan kode baris dari nilai awal yang ditentukan setelah nilai akhir pertama.

4. Masukkan urutan pembuatan infus dan beri nama infus dengan jumlah karbohidrat lebih banyak untuk nilai pertama, atau jumlah kalori lebih banyak untuk nilai yang ditunjukkan.

Opsi 7

1. Masukkan daftar praktisi dari penanaman yang ditugaskan.

3. Masukkan tanggal pendaftaran, jenis dokumen, PIB pencatat dan nama organisasi untuk dokumen yang didaftarkan untuk penunjukan periode tersebut.

4. Masukkan daftar dokumen terdaftar dengan jenis dokumen pertama atau dengan tanggal pendaftaran lebih besar dari nilai yang ditentukan.

Opsi 8

1. Masukkan daftar praktisi dengan alasan yang ditentukan untuk panggilan tersebut.

3. Masukkan tanggal pendaftaran, alasan pendaftaran, PIB acuan dokumen yang didaftarkan untuk penunjukan periode.

Opsi 9

1. Masukkan daftar praktisi yang diizinkan untuk memasukkan jenis yang ditentukan.

2. Masukkan daftar dokumen dengan tanggal pendaftaran untuk penugasan periode.

3. Masukkan tanggal pendaftaran, jenis izin, PIB referensi untuk dokumen yang didaftarkan untuk penunjukan periode tersebut.

4. Masukkan daftar dokumen terdaftar dari kode dokumen dalam rentang yang ditetapkan.

Opsi 10

1. Masukkan daftar praktisi dari penanaman yang ditugaskan.

2. Masukkan daftar dokumen, yang mungkin memiliki arti penggalan kata.

3. Masukkan tanggal pendaftaran, jenis dokumen, PIB pemilik dan nama organisasi untuk dokumen yang didaftarkan untuk penunjukan periode tersebut.

4. Masukkan daftar dokumen terdaftar dari jenis dokumen yang ditentukan atau dengan kode dokumen kurang dari nilai terakhir.

Opsi 11

1. Masukkan daftar praktisi yang diakui untuk penanaman yang diberikan.

2. Masukkan daftar dokumen dengan tanggal pendaftaran untuk penugasan periode.

3. Masukkan tanggal pendaftaran, pelunasan, PIB acuan dokumen yang didaftarkan untuk penunjukan periode tersebut.

4. Masukkan daftar dokumen terdaftar dari kode dokumen dalam rentang yang ditetapkan.

Opsi 12

3. Masukkan daftar spesialisasi, bagaimana mereka mengambil alih dari penyewaan sejumlah hewan itu, menyortir jumlah hewan dan berapa banyak yang jatuh.

Opsi 13

1. Masukkan daftar harta benda dari jenis yang ditetapkan. 2. Masukkan daftar harta, seolah-olah mencoret seorang praktisi menyanyi.

3. Masukkan jumlah properti yang dinonaktifkan, yang dikelompokkan menurut jenis properti.

4. Masukkan informasi tentang rekrutmen dengan tanggal kerja lebih dari tanggal pertama.

Opsi 14

1. Masukkan daftar tiket dari jenis lembar yang ditetapkan.

2. Masukkan daftar kode kebutuhan, yang warna-warnanya dijual dengan jumlah lebih dari satu nilai.

3. Masukkan tanggal jatuh tempo, jumlah, nama petugas pos dan warna mengikuti kode nyanyi petugas pos.

4. Masukkan daftar warna dan grade untuk tiket dengan tinggi lebih besar dari nomor lagu atau lebih elegan.

Opsi 15

1. Masukkan daftar klien yang telah mencapai jumlah periode janji temu.

2. Masukkan jumlah total pembayaran untuk nomor skin client.

3. Masukkan tanggal kedatangan, jenis kamar, PIB klien, masa pendaftaran untuk janji temu.

4. Masukkan daftar klien terdaftar untuk kamar single.

Opsi 16

1. Masukkan daftar harta benda dari jenis yang ditetapkan.

2. Masukkan daftar harta, seperti klien menyewa lagu.

3. Masukkan daftar osb, yakі yang diambil dari persewaan sejumlah hewan tersebut, diurutkan berdasarkan jumlah hewan dan cara jatuhnya.

4. Masukkan informasi tentang klien yang diurutkan berdasarkan alamat.

Opsi 17

1. Masukkan daftar nilai dari harga beli lebih besar dari nilai awal, atau dengan jangka waktu jaminan lebih besar dari jumlah yang ditentukan.

2. Untuk memperkenalkan tempat pentingnya nilai-nilai material, kata itu ditunjukkan dalam nama-nama itu.

3. Masukkan jumlah nilai vartosti dari kode untuk rentang yang ditentukan.

4. Masukkan daftar kondisi yang sah secara material dari tanggal masuk untuk bekerja di kisaran yang ditentukan.

Opsi 18

1. Vivest perubahan perbaikan robits, vikonanih sing master.

2. Masukkan daftar tahapan pekerjaan, yang masuk sebelum pekerjaan, yang namanya memiliki kata yang ditunjuk.

3. Masukkan jumlah biaya langkah-langkah pekerjaan perbaikan untuk pekerjaan dari kode untuk rentang yang ditentukan.

4. Masukkan daftar file dari tanggal masuk ke robot dalam rentang yang ditentukan.

Opsi 19

1. Masukkan daftar liqiv dari bacaan pertama.

2. Masukkan daftar nomor cek yang menjual lebih dari satu nomor liq.

3. Masukkan tanggal penjualan, jumlah, PIB kasir dan kasir untuk cek dari nomor yang ditentukan.

4. Masukkan daftar liqs dan salah satunya untuk liqs dengan jumlah dalam paket lebih besar dari jumlah yang ditunjukkan atau dengan kode liq kurang dari nilai pertama.

Opsi 20

1. Masukkan daftar praktisi dari penanaman yang ditugaskan.

2. Masukkan daftar dokumen, yang mungkin memiliki arti penggalan kata.

3. Masukkan tanggal pendaftaran, jenis dokumen, tanggal PIB dan fact of date untuk dokumen yang didaftarkan untuk suatu periode.

4. Masukkan daftar dokumen terdaftar dari jenis dokumen yang ditunjuk atau kode dokumen untuk rentang pertama.

Menyimpan prosedur

Subjek distribusi ini adalah salah satu alat yang paling penting, diperkenalkan ke pengecer dengan tambahan database InterBase untuk implementasi logika bisnis. dan mengubah jumlah kode yang diperlukan untuk menyiapkan tugas. Secara praktis mungkin untuk menyelesaikan program database tanpa mengubah prosedur yang disimpan.
Meskipun ada banyak pilihan prosedur yang akan disimpan yang penting untuk sebagian besar DBMS relasional, prosedur InterBase dapat memainkan peran sebagai kumpulan data yang praktis lengkap, memungkinkan mereka untuk memutar hasil dalam kueri SQL tertentu.
Relobders, Scho sering selesai, Awal "Prosedur cukup Yak Kdіr SPEM SPL-SQL-panduan, Yakі stonna kuat dynami Dasar Selesai, KEMBALI ISNUє DUMKA, SHO GRAYUVATI DENGAN PROCTIONS, SHO ZEBYUGAUM, lipatan Nabagato, nіzh Realizuati tingkat tinggi.
Jadi apa saja prosedur yang disimpan di InterBase?
Prosedur yang disimpan (CP) adalah bagian dari metadata basis data, yang dikompilasi dari subprogram aplikasi InterBase internal, yang ditulis dalam bahasa khusus, kompiler yang dimasukkan ke dalam inti server InteiBase
Menyimpan prosedur dapat dipanggil dari program klien, dari pemicu dan prosedur lain yang disimpan. Prosedur disimpan di tengah proses server dan Anda dapat memanipulasi data di database, serta mengaktifkan klien dengan cara mengklik (pemicu itu, HP, tambahan) hasil kemenangan Anda
Dasar dari kemungkinan sulit yang ditetapkan oleh HP adalah pemrograman bahasa prosedural, yang dapat dilakukan di gudangnya sendiri, seperti memodifikasi proposisi SQL yang hebat, seperti INSERT, UPDATE dan SELECT, serta organisasi analisis dan siklus. (JIKA, SAAT), serta situasi dan kesalahan Prosedur Mova yang disimpan memungkinkan penerapan algoritme yang dapat dilipat untuk bekerja dengan data, dan fokus pada pekerjaan dengan data relasional HP secara signifikan lebih ringkas untuk prosedur serupa dengan bahasa tradisional.
Perlu dicatat bahwa pemicunya menang dengan program yang sama, kejahatannya rendah dalam fitur dan perbatasan. Vіdmіnnostі pіdmіnnostі pіdnіzhini movi, scho vikoristovuєєtsya in trigery, vіd mivi KHP dilaporkan ditinjau di bagian "Trigeri" (bagian 1).

Contoh prosedur sederhana yang disimpan

Saatnya telah tiba untuk membuat prosedur pertama, yang disimpan, dan proses pembuatan prosedur penyimpanan. Ale untuk awal berikutnya untuk mengatakan beberapa kata tentang itu, bagaimana berlatih dengan prosedur yang disimpan. Dokumentasi InterBase merekomendasikan pembuatan prosedur untuk file tambahan dalam skrip SQL, yang akan membersihkan teks CP, saat dikirimkan ke input juru bahasa isql, dan dengan cara ini, buat modifikasi CP itu, seperti dalam SQL ini skrip pada tahap kompilasi BLR ke dalam teks prosedur BLR (tentang teks prosedur BLR lihat Rozdіl "Struktur basis data InterBase" (bagian 4)) winkle maaf, maka isql akan menunjukkan kepada Anda tentang itu, di baris mana dari SQL file skrip winkla tsya maaf. Perbaiki pengampunan dan ulangi semuanya kembali ke belakang. Tentang nagodzhennya dalam pemahaman sehari-hari kata, yaitu tentang trasuvannya vykonannya, dengan kemungkinan mengagumi perubahan makna perubahan, Anda tidak bisa keluar dari jalan Anda. Jelas bahwa pidhid seperti itu tidak sesuai dengan peningkatan privasi prosedur yang disimpan di mata pengecer.
Prote, krim pendekatan minimalis standar untuk pengembangan HP<_\ществ\ют также инструменты сторонних разработчиков, которые делают работу с хранимыми процедурами весьма удобной Большинство универсальных продуктов для работы с InterBase, перечисленных в приложении "Инструменты администратора и разработчика InterBase", предоставляют удобный инструментарий для работы с ХП. Мы рекомендуем обязательно воспользоваться одним из этих инструментов для работы с хранимыми процедурами и изложение материала будем вести в предположении, что у вас имеется удобный GUI-инструмент, избавляющий от написания традиционных SQL-скриптов
Sintaks prosedur yang disimpan dijelaskan oleh langkah berikutnya:

BUAT nama PROSEDUR
[(tipe data param [, tipe data param...])]
)]
SEBAGAI
;
< procedure_body> = []
< block>
< vanable_declaration_list> =
MENYATAKAN VARIABEL var tipe data;

=
MULAI
< compound_statement>
[< compound_statement> ...]
AKHIR
< compound_statement> = (penyataan;)

Tampaknya dosit besar dan dapat menjadi rumit, tetapi sebenarnya semuanya bahkan lebih sederhana.
Sekali lagi, sumbu pantat adalah prosedur sederhana yang diambil, karena membutuhkan dua angka sebagai input, menjumlahkannya dan mengubah hasilnya:

BUAT PROSEDUR SP_Add(first_arg PRESISI GANDA,
second_arg PRESISI GANDA)
PENGEMBALIAN (Hasil PRESISI GANDA)
SEBAGAI
MULAI
Hasil=pertama_arg+kedua_arg;
MENSKORS;
AKHIR

Yah, semuanya sederhana: setelah perintah CREATE PROCEDURE, nama prosedur yang baru dibuat (yang mungkin unik pada batas basis data) ditentukan - untuk drop SP_Add ini, kemudian untuk lengan, di mana parameter input dari Jenis HP direset - first_arg dan second_arg - dari nilai yang ditetapkan.
Daftar parameter input di bagian non-bahasa dari pernyataan CREATE PROCEDURE - lompatan dilintasi, jika semua data untuk prosedur kerjanya diambil untuk input tambahan ke tabel di tengah badan prosedur.

Dalam prosedur yang disimpan, ada tipe data skalar InteiBase

Berikan kata kunci RETURNS, setelah itu parameter diatur ulang di lengan, yang diputar sesuai dengan jenis yang ditetapkan - dalam kategori ini hanya satu - Hasil.
Bagaimana prosedur tidak bersalah memutar parameter, kata RETURNS dan daftar parameter yang akan diputar, setiap hari.
Setelah kata kunci RETURNSQ AS ditentukan. Sebelum kata kunci AS judul, dan setelah yang baru - teknologi Prosedur.
Tubuh prosedur, yang diambil, adalah salinan deskripsi perubahan internal (lokal) (seperti bau, kita akan melihatnya di bawah), yang dibagi dengan titik setelah koma (;), dan blok operator, tempat di busur operator BEGIN END. Dalam hal ini, badan HP bahkan lebih sederhana - kami meminta Anda untuk menambahkan dua argumen input dan melampirkan hasilnya ke output satu, dan kemudian memanggil perintah SUSPEND. Trohi pіznіshe roz' jelas esensi dari perintah di tsієї, tetapi untuk saat ini penting bahwa perlu untuk transmisi parameter yang berbelok ke sana, bintang-bintang bula viklikan menyimpan prosedur.

Variasi dalam prosedur yang disimpan

Hormati bahwa operator di tengah prosedur akan berakhir dengan titik koma (;). Rupanya, poin yang dikeluarkan oleh distributor perintah SQL standar adalah sinyal kepada juru bahasa SQL bahwa teks dari perintah pengantar sudah benar dan perlu diproses. Chi tidak melihat begitu, scho, menunjukkan setitik dengan koma di tengah HP, juru SQL mengakui bahwa perintah itu dimasukkan dengan tepat dan mencoba untuk vikonat bagian dari prosedur, apa yang diambil? Tse pripuschennya tidak maє sensu. Misalnya, jika Anda membuat file, dalam hal ini Anda dapat menulis panduan, menambahkan perintah untuk memulai dari basis data dan mencoba skrip SQL untuk bantuan juru bahasa isql, maka pengampunan akan berubah, itu akan berubah menjadi tidak cocok, pada pemikiran penerjemah, akhir perintah penciptaan prosedur yang diambil. Untuk menyimpan prosedur untuk file skrip SQL tambahan, tanpa menggunakan alat khusus penjelajah InterBase, perlu sebelum perintah skin untuk membuat HP (hal yang sama berlaku untuk pemicu) menginspirasi yoga. Perintah isql, yang mengubah pemisah proposisi SQL, terlihat seperti ini:

SET JANGKA WAKTU

Untuk cara khas membuat prosedur, apa yang diurus, terlihat seperti ini:

SET JANGKA WAKTU ^;
BUAT PROSEDUR beberapa_prosedur
... . .
AKHIR
^
SET JANGKA ;^

Prosedur tabungan mingguan

Mari kita beralih ke prosedur kita, apa yang harus diperhatikan. Nah, jika sudah dibuat maka diharuskan untuk memanggil, melewati parameter dan mengambil hasil yang dirotasi. Bahkan lebih mudah untuk melakukan ini - cukup menulis kueri SQL untuk tampilan yang menyinggung:

PILIH *
DARI Sp_add (181,35, 23.09)

Tsei meminta kami untuk menyerahkan satu baris kepada kami, yang akan mengambil hanya satu bidang Hasil, di mana jumlah angka 181,35 dan 23,09, maka 204,44 akan diubah.
Dengan cara ini, prosedur kami dapat diretas dalam kueri SQL khusus, yang diretas seperti di program klien, serta di HP atau pemicu lainnya. Variasi prosedur kami ini dimungkinkan dengan menambahkan perintah SUSPEND ke akhir prosedur yang akan diambil.
Di sebelah kanan, di InterBase (dan di semua klonnya) ada dua jenis prosedur yang disimpan: prosedur yang dapat dipilih dan prosedur yang dapat dieksekusi. Fakta bahwa robot memiliki dua jenis HP terkait dengan fakta bahwa prosedur pemilihan memanggil untuk memutar satu set parameter input impersonal yang dikelompokkan dalam satu baris, karena mereka mungkin melihat satu set data, dan prosedur viconation juga tidak dapat melakukannya. memutar parameter, atau mereka dapat memutarnya sendiri di Pengembalian, de satu baris parameter. Prosedur yang dipilih dipanggil di sebelah kueri SELECT, dan prosedur yang dipanggil mengikuti bantuan perintah EXECUTE PROCEDURE.
Setelah tersinggung melihat prosedur yang disimpan, sintaks pembuatan yang sama dan secara formal tidak menantang apa pun, lalu apakah prosedur tersebut dapat digunakan dalam kueri SELECT dan apakah pemilihan prosedur tersebut untuk bantuan EXECUTE PROCEDURE. Nutrisinya adalah bagaimana CP berperilaku dengan berbagai jenis kejahatan. Dengan kata lain, perbedaannya berbeda dalam desain prosedur untuk jenis nyanyian mingguan. Jadi prosedur pemilihan dibuat khusus untuk kueri kueri SELECT, dan prosedur yang dipilih adalah untuk kueri kueri EXECUTE PROCEDURE. Mari kita lihat kekuatan apa saja yang dipertimbangkan saat mendesain kedua tipe HP ini.
Untuk memahami, bagaimana mempraktekkan prosedur-getaran, untuk mendapatkan sedikit teori. Mari dapatkan kueri SQL sederhana seperti SELECT ID, NAME FROM Table_example. Sebagai hasilnya, kami memperhitungkan tabel keluaran, yang terdiri dari dua kolom (ID dan NAMA) dan jumlah baris yang sama (jumlah baris yang sama dalam tabel Table_example). Berubah menjadi hasil kueri ini, tabel ini juga disebut kumpulan data SQL. . Kemudian server membaca catatan kulit, yang mengirimkan hasil permintaan, memilih bidang yang diperlukan darinya (dalam hal ID dan NAMA) dan mengirim pesan ke klien. Mari kita ulangi prosesnya lagi - dan untuk rekaman kulit yang bergetar.
Semua langkah diperlukan untuk pembaca yang cerdas untuk memahami bahwa semua kumpulan data SQL dibentuk dalam satu baris, termasuk dalam prosedur yang disimpan! vіdminnіst utama prosedur-pemilihan prosedur, yang didasarkan pada fakta bahwa yang pertama dirancang untuk memutar baris tanpa wajah, dan lainnya - hanya untuk satu. Itu sebabnya zastosovyatsya bau dengan cara yang berbeda: prosedur-seleksi panggilan bantuan dari perintah SELECT, seperti "wimage" dalam prosedur untuk memeriksa semua catatan, sehingga Anda dapat mengubahnya. Prosedur, yang disebut, dipanggil untuk bantuan EXECUTE PROCEDURE, seperti "wiymaє" dari HP hanya satu baris, dan reshta (navit yakshcho stink!) Abaikan.
Mari kita lihat contoh prosedur pemilihannya, agar lebih jelas. For > Maaf, mari simpan prosedurnya, yak pratsyuє jadi sama, yak zap SELECT ID, NAME FROM Table_Example, jadi Anda tidak akan bisa memilih field ID NAME z usієї tabel. Pantat sumbu tsey:

BUAT PROSEDUR Simple_Select_SP
PENGEMBALIAN (
PROCID INTEGER,
procNAME VARCHAR(80))
SEBAGAI
MULAI
UNTUK
PILIH ID, NAMA DARI table_example
INTO:procID, :procNAME
MELAKUKAN
MULAI
MENSKORS;
AKHIR
AKHIR

Mari kita lihat prosedur yang disebut Simple_Select_SP. Faktanya, tidak ada parameter input dan dua parameter output – ID dan NAMA. Naytskavіshe, zvichayno, polagaє dalam prosedur tіlі. Berikut adalah konstruksi FOR SELECT:

UNTUK
PILIH ID, NAMA DARI table_example
INTO:procID, :procNAME
MELAKUKAN
MULAI

/* kita perlu mengubah procID dan procName */

AKHIR

Kode shmachok ini berarti ofensif: untuk baris skin, dipilih dari tabel Table_example, pilih nilai procID dan procName perubahan, lalu tambahkan nilai perubahan.
Anda dapat mengerjakan penampilan dan permintaan: "Ubah? Bagaimana lagi mengubah 9" Jika itu mirip dengan kejutan perbedaan - mereka yang berada dalam prosedur yang disimpan, kami dapat memenangkan perubahan. Dalam bahasa HP, Anda dapat menyuarakan perubahan lokal di tengah prosedur, dan mengalahkan parameter input dan output saat diubah.
Untuk mendeklarasikan perubahan lokal dalam prosedur yang sedang disimpan, perlu menyertakan deskripsi setelah kata kunci AS dan sebelum kata pertama BEGIN. Deskripsi perubahan lokal terlihat seperti ini:

MENYATAKAN VARIABEL ;

Misalnya, untuk mengumumkan panjang Mylnt perubahan lokal, perlu untuk menyisipkan antara deskripsi ofensif AS dan BEGIN

MENYATAKAN VARIABEL MyInt INTEGER;

Perubahan di pantat kami dibuat dari dua potong. Alasannya adalah perlu untuk mengubahnya di tengah perintah SQL UNTUK SELECT, untuk memisahkan bidang dalam tabel yang dipilih dalam SELECT, dan untuk mengubahnya, perlu untuk mentransfer sisa ganda. Bahkan jika Anda mengubahnya, Anda dapat memberi nama yang sama, seperti bidang dalam tabel!
Ale dvokrapka di depan nama perubahan diperlukan untuk menang hanya di tengah query SQL. Berpose dengan teks binatang untuk bertarung sampai mati tanpa dvokrapka, misalnya:

procName="Beberapa nama";

Mari kita beralih ke tubuh prosedur kita. Proposisi FOR SELECT memutar data di atas tabel visual - satu set data, dan, satu baris pada satu waktu. Bidang kulit yang diputar dapat ditempatkan di perubahannya sendiri: ID => procID, NAME => procName. Pada bagian DO dan perubahan diminta ke client yang disebut procedure >p>, untuk bantuan perintah SUSPEND
Dengan cara ini, perintah FOR SELECT... DO mengatur loop record yang dipilih di bagian SELECT dari perintah. Pada siklus yang sama, yang merupakan bagian dari DO, transfer rekaman yang dirancang ke klien setelah perintah SUSPEND tambahan dilakukan.
Juga, prosedur pemilihan dikenali untuk rotasi satu atau lebih baris, yang siklusnya diatur di tengah badan HP, yang akan mengembalikan perubahan parameter yang dihasilkan. Misalnya, perintah SUSPEND harus digunakan untuk siklus terakhir dari siklus, seolah-olah mengubah baris data ke klien.

Siklus dan Operator

Perintah krim FOR SELECT... DO, yang mengatur siklus dari catatan pilihan apa pun, jenis siklus lain - WHILE...DO, yang memungkinkan Anda untuk mengatur siklus berdasarkan verifikasi ulang pikiran apa pun. Axis stok HP, siklus scho vikoristovu SAAT. MELAKUKAN. Prosedur ini memutar kuadrat bilangan bulat dari 0 hingga 99:

BUAT PROSEDUR JRE QUAD
PENGEMBALIAN (INTEGER KUADRAT)
SEBAGAI
MENYATAKAN VARIABEL I INTEGER;
MULAI
saya = 1;
Ketika saya<100) DO
MULAI
KUADRAT=I*I;
saya=saya+1;
MENSKORS;
AKHIR
AKHIR

Sebagai hasil dari permintaan SELECT FROM QUAD, kita membutuhkan tabel yang akan menggantikan satu baris QUADRAT, yang akan memiliki kuadrat bilangan bulat dari 1 hingga 99
Untuk menghitung hasil dari getaran SQL dan siklus klasik, dalam prosedur pemindahan yang disimpan, operator IF...THEN..ELSE dipilih, yang memungkinkan Anda untuk mengatur delimitasi dalam fallacy di fallback di masa depan, apakah sintaksnya mirip dengan sebagian besar operator dekompresi dalam pemrograman bergerak tingkat tinggi, pada kuadrat Pascal dan Cі.
Mari kita lihat contoh yang dapat dilipat dari prosedur yang sedang disimpan, untuk merampok kaki seseorang.

  1. Hitung harga rata-rata dalam tabel Table_example (div. divisi "Tabel Kunci Utama dan Generator")
  2. Dali untuk catatan kulit di tabel untuk mulai memeriksa ulang, karena harga utama (HARGA) lebih tinggi dari harga rata-rata, kemudian menetapkan harga sama dengan nilai harga rata-rata, ditambah menetapkan penetapan air
  3. Jika harganya lebih rendah atau lebih dari harga rata-rata, maka saya akan menetapkan harga sama dengan harga total, ditambah setengah dari harga eceran di antara harga rata-rata itu.
  4. Putar semua perubahan baris dalam tabel.

Untuk tongkol, nama HP penting, serta parameter input dan output. Semuanya tertulis di header prosedur, yang disimpan

BUAT PROSEDUR MenaikkanHarga(
Percent2Meningkatkan PRESISI GANDA)
RETURNS (ID INTEGER, NAMA VARCHAR(SO), harga_baru GANDA
PRESISI SEPERTI

Prosedur akan disebut KenaikanHarga, ia memiliki satu parameter masukan Peiceni21nciease, yang dapat berupa PRESISI GANDA, dan 3 parameter masukan - ID, NAMA, dan new_pnce. Harap perhatikan bahwa dua parameter pertama mungkin memiliki nama yang sama, seperti bidang dalam tabel Table_example, yang kami pilih untuk diurai. Tse diizinkan oleh aturan prosedur mov, yang disimpan.
Sekarang salah kami untuk menyuarakan perubahan lokal, sehingga Anda akan menang untuk menyimpan nilai rata-rata, suara Anda akan terlihat seperti ini:

MENYATAKAN VARIABEL avg_price PRESISI GANDA;

Sekarang mari kita beralih ke tubuh prosedur, yang diurus Kata kunci MULAI.
Kita perlu menghitung pertama kali untuk algoritma kita - hitung harga rata-rata. Untuk siapa kami mempercepat dengan permintaan semacam ini:

PILIH AVG(harga_l)
DARI Tabel_Contoh
KE:avg_price,-

Ini akan memberi makan fungsi agregat variabel AVG, sehingga memutar nilai rata-rata bidang PRICE_1 dari rata-rata baris yang dipilih - dalam kasus kami, nilai rata-rata PRICE_1 untuk semua tabel Tabel_contoh. Nilai yang diputar oleh permintaan ditempatkan di avg_price change. Untuk mengembalikan rasa hormat, yang diubah avg_pnce di depan double-flap untuk memperbarui penyiraman, yang menang dalam permintaan.
Kekhasan permintaan ini adalah mereka yang selalu memeriksa dengan ketat satu entri tunggal. Permintaan semacam itu disebut permintaan tunggal dan hanya pilihan seperti itu yang dapat dipilih dalam prosedur yang disimpan. Jika Anda ingin memutar lebih dari satu baris, maka perlu untuk membuat struktur FOR SELECT ... DO untuk mengatur siklus untuk memproses baris kulit yang diputar.
Otzhe, kami mendapat nilai rata-rata dari harga. Sekarang perlu melalui semua tabel, untuk membandingkan nilai harga di catatan kulit dengan harga rata-rata dan hidup di
Kami mengatur penyortiran catatan kulit dari tabel Table_example

UNTUK
PILIH ID, NAMA, PRICE_1
DARI Tabel_Contoh
INTO:ID, :NAME, :new_price
MELAKUKAN
MULAI
/*_ini kita buka skin record*/
AKHIR

Saat desain diubah dari tabel Table_example, nilai data dan watering pada baris skin akan diberikan ID, NAME dan new_pnce yang diubah. Anda, tentu saja, ingat bahwa parameter ini diubah sebagai parameter default, tetapi sebagai hasilnya, data yang dipilih akan diputar, bukan varto: fakta bahwa parameter eksternal tidak ditetapkan tidak berarti bahwa klien adalah HP klien. nilai qi! Transfer parameter hanya dimungkinkan ketika perintah SUSPEND dinonaktifkan, dan sebelum itu kami dapat mengubah parameter default sebagai perubahan utama - dalam aplikasi kami, kami juga bekerja dengan parameter new_price.
Juga, di tengah tubuh siklus BEGIN.. END, kita dapat mengubah nilai baris skin. Seperti yang Anda ingat, penting bagi kita untuk mengetahui, sebagai harga penting, untuk naik dari rata-rata, dan untuk hidup di masa lalu. Prosedur Qiu untuk mencocokkan mi diterapkan untuk bantuan operator IF:

JIKA (harga_baru > avg_price) MAKA /*jadi harga saat ini lebih tinggi untuk harga rata-rata*/
MULAI
/*lalu ​​tetapkan harga baru, sama dengan nilai harga rata-rata, ditambah penetapan ratusan */
harga_baru = (harga_rata-rata + harga_rata-rata*(Persen2Peningkatan/100));
UPDATE Tabel_contoh
TETAPKAN HARGA_1 = :harga_baru
DIMANA ID =: ID;
AKHIR
LAIN
MULAI
/* Jika harga sebenarnya kurang atau lebih dari harga rata-rata, maka kami akan menetapkan harga sama dengan harga total, ditambah setengah dari harga eceran di antara harga rata-rata itu */
new_price = (new_pnce + ((avg_pnce new_price)/2)) ;
UPDATE Tabel_contoh
TETAPKAN HARGA_1 = :harga_baru
DIMANA ID = .ID;
AKHIR

Ibarat seorang bachite, senangnya menyelesaikan konstruksi IF yang hebat, penting untuk mendiskusikannya, jadi jangan berkomentar, suka menulis dengan simbol /**/.
Untuk mengubah harga dengan cara yang sama ke ritel yang dihitung, kami mempercepat operator UPDATE, yang memungkinkan Anda untuk mengubah catatan aktual - satu atau lebih. Untuk menunjukkan dengan jelas di catatan mana Anda perlu mengubah harga, kami akan menang untuk memahami bidang WHERE kunci utama, sama dengan nilai perubahan, di mana nilai ID diambil untuk catatan aliran: ID =: PENGENAL. Tangkap rasa hormat bahwa ID diubah di depan doublet.
Setelah mengubah konstruk IF...THEN...ELSE, ID, NAME dan new_price yang diubah memiliki data, karena merupakan tanggung jawab kami untuk mengubah klien untuk memanggil prosedur. Untuk selanjutnya JIKA perlu memasukkan perintah SUSPEND, agar data terkirim ke sana, bintangnya disebut HP. SELECT...DO tidak mengulangi semua catatan dalam kueri Anda.
Penting untuk menentukan bahwa perintah SUSPEND digunakan, sehingga hanya prosedur yang akan disimpan yang disimpan, perintah EXIT digunakan, sehingga prosedur disimpan setelah transfer baris. Namun, perintah EXIT jarang perlu diselesaikan, chip diperlukan terutama untuk menghentikan siklus pada jangkauan pikiran.
Dalam kasus fallback, jika prosedur dipanggil oleh pernyataan SELECT dan dilengkapi dengan EXIT, baris yang tersisa tidak akan diputar. Tobto, jika Anda perlu menghentikan prosedur dan masih mengambil baris, Anda perlu mempercepat urutannya

MENSKORS;
KELUAR;

Fitur utama EXIT adalah pemilihan kumpulan data tunggal, yang parameternya diputar di pintasan melalui PROSEDUR PELAKSANAAN. Dalam hal ini, nilai parameter eksternal ditetapkan, tetapi pengumpulan data SQL tidak terbentuk, dan prosedur berakhir.
Mari kita tulis kembali teks prosedur kita, sehingga ibu dapat memahami logika ini secara sekilas:

BUAT PROSEDUR MenaikkanHarga(
Percent2Meningkatkan PRESISI GANDA)
PENGEMBALIAN (ID INTEGER, NAMA VARCHAR(80),
new_price PRESISI GANDA) SEBAGAI
MENYATAKAN VARIABEL avg_price PRESISI GANDA;
MULAI
PILIH AVG(harga_l)
DARI Tabel_Contoh
KE:avg_price;
UNTUK
PILIH ID, NAMA, PRICE_1
DARI Tabel_Contoh
INTO:ID, :NAME, :new_price
MELAKUKAN
MULAI
/*disini kami memproses skin record*/
JIKA (new_pnce > avg_price) MAKA /*jadi harga saat ini lebih tinggi untuk harga rata-rata*/
MULAI
/*tetapkan harga baru, sama dengan harga rata-rata, ditambah penetapan ratusan */
harga_baru = (harga_rata-rata + harga_rata-rata*(Persen2Peningkatan/100));
UPDATE Tabel_contoh
TETAPKAN HARGA_1 = :harga_baru
DIMANA ID =: ID;
AKHIR
LAIN
MULAI
/* Jika harga sebenarnya kurang atau lebih dari harga rata-rata, maka saya menetapkan harga sama dengan harga total, ditambah setengah dari harga eceran antara jumlah dan harga rata-rata */
harga_baru = (harga_baru + ((harga_rata-rata - harga_baru)/2));
UPDATE Tabel_contoh
TETAPKAN HARGA_1 = :harga_baru
DIMANA ID =: ID;
AKHIR
MENSKORS;
AKHIR
AKHIR

Contoh Denmark dari prosedur yang disimpan, yang menggambarkan pengembangan konstruksi utama dari prosedur dan pemicu penyimpanan film. Mari kita lihat cara untuk memperbaiki prosedur yang disimpan untuk menyelesaikan beberapa tugas yang sering disalahkan.

Prosedur rekursif yang disimpan

Prosedur InterBase yang disimpan dapat bersifat rekursif. Tse berarti bahwa prosedur yang disimpan, Anda dapat memanggil diri sendiri. Diperbolehkan hingga 1000 prosedur yang sama, yang disimpan, namun, Anda harus ingat bahwa sumber daya yang tersedia di server dapat habis lebih awal, lebih rendah dari investasi HP maksimum yang akan tercapai.
Salah satu prosedur terluas yang disimpan adalah pemrosesan struktur seperti pohon yang disimpan dalam database. Pohon sering digunakan dalam manajemen gudang, gudang, personel, dan penambahan luas lainnya.
Mari kita lihat contoh prosedur yang diambil, bagaimana memilih semua barang dengan jenis yang sama, mulai dari investasi pertama yang sama.
Izinkan saya sampai pada pernyataan tugas: bolehkah saya membawa barang dengan struktur hierarki semacam ini:

Barang-barang
- Teknik Pobutov
- Kulkas
- Tiga kamar
- Dua kamar
- Ruang tunggal
- Mesin pembersih
- Vertikal
- depan
- Klasik
- Vuzki
- Teknologi komputer
....

Struktur Tsya dovіdnika categorіy varіv_v mungkin ibu g_lki raznoї glibini. dan juga membangun dari waktu ke waktu. Misi kami adalah menyediakan pilihan semua elemen akhir hari dari "pelafalan nama umum", mulai dari vuzla apa pun. Misalnya, jika kita memilih "mobil Palny", maka kita perlu mempertimbangkan kategori berikut:

Mesin pengungkit - Vertikal
Mobil frontal - Klasik frontal
Mobil frontal - Mobil frontal yang lebih tinggi

Struktur tabel penting untuk pengumpulan informasi tentang kemajuan barang. Saya telah menyederhanakan skema untuk mengatur pohon dalam satu tabel:

BUAT TABEL GoodsTree
(ID_INTEGER BAIK BUKAN NULL,
ID_PARENT_BAIK INTEGER,
GOOD_NAME VARCHAR(80),
batasan kunci utama pkGooci (ID_GOOD));

Kami membuat satu tabel GoodsTree, di mana hanya ada 3 bidang: ID_GOOD - pengenal kategori yang wajar, ID_PARENT_GOOD - pengenal untuk kategori yang diberikan dan GOOD_NAME - nama kategori. Untuk memastikan integritas data untuk tabel ini, kami meletakkannya di atas meja untuk pertukaran kunci panggilan:

ALTER TABLE GoodsTree
TAMBAHKAN KENDALA FK_goodstree
KUNCI ASING (ID_PARENT_GOOD)
REFERENSI GOODSTPEE (ID_GOOD)

Tabel itu mandiri dan kunci lama yang sama harus diikuti olehnya. schob di meja buv posilan pada ayah yang tidak diketahui, navіt reshkodzhaє mencoba untuk melihat kategori barang, yakі mayut nashchadki.
Mari kita bawa ke tabel data yang akan datang:

ID_BAIK

1
2
3
4
5
6
7
8
9
10
11
12

ID_PARENT_GOOD

0
1
1
2
2
4
4
4
5
5
10
10

NAMA BAIK

BARANG-BARANG
Teknik Pobutov
Komputer dan aksesoris
Kulkas
Mesin pembersih
ruang tiga
dua kamar
ruang tunggal
Vertikal
Frontal
Vuzki
klasik

Sekarang, jika kita memiliki tempat untuk mengumpulkan data, kita dapat melanjutkan ke pembuatan prosedur penyimpanan, yang akan melihat penghapusan semua kategori barang "sisa" dari yang "dipecat" - misalnya, untuk kategori "Tiga -chamber" di luar kategori akan terlihat seperti " Pobutov tehnіka Kulkas Trikamernі".
Prosedur yang menangani struktur seperti pohon telah mengembangkan terminologinya sendiri. Elemen kulit pohon disebut simpul; dan blues antara simpul, yang meringkuk satu lawan satu, disebut sepatu bot orang tua. Vuzli, yang terletak di ujung pohon dan tidak membuat naschadkiv, disebut "daun".
Untuk setiap prosedur yang akan disimpan, parameter input akan menjadi pengidentifikasi kategori, untuk beberapa alasan kami akan mulai menyortir. Prosedur matime disimpan seperti ini:

BUAT PROSEDUR GETFULLNAME (ID_GOOD2SHOW INTEGER)
RETURNS (FULL_GOODS_NAME VARCHAR(1000),
ID_CHILD_BAIK INTEGER)
SEBAGAI
MENYATAKAN VARIABEL CURR_CHILD_NAME VARCHAR(80);
MULAI
/*0rgan_zuєmo zovnіshnіy cycle FOR SELECT untuk label produk bezporednіmi dengan ID_GOOD=ID_GOOD2SHOW */
UNTUK PILIH gtl.id_good, gtl.good_name
DARI GoodsTree gtl
DI MANA gtl.id_parent_good=:ID_good2show
INTO:ID_CHILD_GOOD, :nama_barang_lengkap
MELAKUKAN
MULAI
/"Memeriksa fungsi EXISTS tambahan, jadi putar TRUE, seolah-olah itu akan mengambil satu baris di putaran lengan. Jika simpul yang ditemukan ID_PARENT_GOOD = ID_CHILD_GOOD tidak memiliki jalan pintas, maka itu adalah "daun" dari pohon dan dikonsumsi sebagai hasil */
JIKA (TIDAK ADA(
PILIH * DARI GoodsTree
MANA GoodsTree.id_parent_good=:id_child_good))
KEMUDIAN
MULAI
/* Lewatkan busur pohon ke hasil */
MENSKORS;
AKHIR
LAIN
/* Untuk simpul, seperti membuat tali */
MULAI
//
CURR_CHILD_NAME=nama_barang_lengkap;
/* jalankan prosedur saya secara rekursif */
UNTUK
PILIH ID_CHILD_GOOD,nama_barang_lengkap
DARI GETFULLNAME(:ID_CHILD_GOOD)
INTO:ID_CHILD_GOOD, :nama_barang_lengkap
LAKUKAN MULAI
/*dodaєmo untuk vuzla-ayah ke yang dikenal. */
full_goods_name=CURR_CHILD_NAME| " " | f ull_goods_name,-
MENSKORS; /*menyerahkan barang*/
AKHIR
AKHIR
AKHIR
AKHIR

Jika kita menggunakan prosedur ini dengan parameter input ID_GOOD2SHOW=1, maka kita ambil yang berikut:

Seperti bachite, untuk bantuan prosedur rekursif yang disimpan, kami menelusuri seluruh pohon kategori dan mengeluarkan nama-nama kategori - "daun", seolah-olah mereka ditemukan di ujung daun itu sendiri.

Visnovok

Pada titik ini, kami menyimpulkan tinjauan kemungkinan utama prosedur saya, yang disimpan. Jelas, untuk menguasai perincian prosedur yang disimpan saat membaca satu divisi tidak mungkin, kami telah mencoba mengungkapkan dan menjelaskan konsep utama yang terkait dengan prosedur penyimpanan. Deskripsi desain dan desain HP dapat ditemukan di sebagian besar database
Bagian dari makanan penting, yang terkait dengan biaya prosedur yang dihemat, akan diungkapkan di bagian mendatang - "Memperluas Kemungkinan Menyimpan Prosedur Antar Pangkalan", karena dikaitkan dengan kesalahan umum, vir_ishennu situasi pengampunan di prosedur yang disimpan, dan oleh robot.

22 episode

Pengetahuan saya tentang menulis di program utama WinForms Client/Server sederhana, yang saya datangi:

Prosedur Vykoristovuvat yang ditangani:

  • Untuk menjadi pekerja robot yang dapat dilipat. Jika Anda memilih untuk bekerja, Anda akan secara efektif membutuhkan kursor tabel atau temp, jadi panggil cara terbaik untuk menjalankannya di SQL Server.
  • Anda mungkin perlu memblokir akses ke data. Jika Anda tidak memberikan akses ke tabel coristuvachas (atau peran atau apa pun), Anda dapat diyakinkan bahwa satu-satunya cara untuk berinteraksi dengan mereka adalah melalui usaha patungan, yang dibuat.

Kemenangan untuk permintaan khusus:

  • Untuk CRUD, jika Anda tidak perlu menyisipkan akses ke data (karena Anda perlu melakukannya dengan cara lain).
  • Untuk lelucon paling sederhana. Penciptaan SP untuk kriteria impersonal untuk lelucon - hanya itu yang terlipat dalam layanan. Jika Anda dapat membuat permintaan poke swedia, kedipkan mata.

Untuk sebagian besar penambahan saya, saya menang seperti SP, jadi sql ad-hoc, saya ingin tahu bahwa saya memiliki SP vicorist yang semakin sedikit, pecahan stink di kantong akhir dengan kode seperti C #, hanya lebih banyak kontrol, tes dan memperbaiki. Saya merekomendasikan bi-wiring ad-hoc sql karena Anda tidak tahu alasan spesifiknya.

Menyimpan prosedur - kontrak pada program keamanan, yang merangkumnya, langsung dengan basis data. Kode untuk prosedur dan skema database dapat diubah tanpa kompilasi, mengembangkan kode, sehingga input dari prosedur dibiarkan tidak berubah.

Ketika Anda menanyakan program Anda, Anda akan dengan jelas memberi tahu diri Anda sendiri tentang model data Anda.

Yah, itu juga bukan praktik yang baik untuk hanya membuat prosedur yang disimpan, seperti permintaan CRUD untuk tabel kulit di database Anda, jadi semuanya masih dijelaskan dengan jelas. Sifat prosedurnya adalah karena besar, berbutir kasar.

Saya pikir ini adalah konflik utama antara orang-orang, karena itu adalah kesalahan mereka untuk meningkatkan basis data orang, karena untuk memperluas antarmuka koresponden.

Sebagai orang yang memiliki data, saya tidak melihat pekerjaan di balik basis data, sebelum mereka melalui permintaan adhoc, jadi penting bagi mereka untuk belajar atau peduli secara efektif. Bagaimana saya dapat mengetahui apa yang dapat saya sumbangkan untuk mengubah skema? Selain itu, saya tidak berpikir bahwa coristovats harus diberikan akses langsung ke tabel database dengan keamanan mirroring (dan saya tidak hanya dapat menyerang injeksi SQL, tetapi juga fakta bahwa kontrol internal dasar, yang tidak mengizinkan hak langsung dan vimagaє vіd usіh koristuvachіv vikoristovyte hanya procs, diakui untuk program, schob zapobіgti mozhlivogo shahraystvo.

Basis data berorientasi objek, dan kode yang terlihat bagus dari sudut pandang berorientasi objek dapat benar-benar hancur dari sudut pandang basis data.

Pengecer kami mengingatkan kami, untuk itu, bahwa semua akses kami ke database dibuat melalui procs, sehingga kami akan secara signifikan mempercepat koreksi pengampunan, sehingga terletak pada data, dan kemudian hanya menjalankan proc dalam pekerjaan lingkungan, dan tidak membuat kode baru dan mengkompilasi ulang dan memanfaatkan kembali di virobnitstvo. Kami percaya bahwa semua proses kami ada di tangan pengemudi, jadi kontrol dzherel tidak menjadi masalah sama sekali. Meskipun wine tidak dalam Subversion, dbas wine terlihat secara berkala, dan tidak ada dukungan untuk Kontrol Sumber.

Menyimpan prosedur, gila-gilaan, datang ... bau dikompilasi, melemparkan rencana sebelum tongkol pekerjaan, dan Anda dapat menghargai hak mereka.

Saya tidak mengerti masalah dengan kode keluar pada prosedur yang sedang disimpan. Anda dapat dengan mudah mengontrol mereka, bahkan jika Anda memiliki sedikit disiplin.

Selalu mulai dari file .sql, yang merupakan inti dari prosedur untuk menyimpan. Post yogo di keruvannya dengan versi setelah Anda menulis kode. Lain kali, jika Anda ingin mengubah prosedur Anda, apa yang disimpan, Anda akan mengambil elemen kontrol eksternal Anda sendiri, di bawah basis data Anda. Jika Anda mengikuti ini, Anda akan memiliki manajemen yang sama baik dengan kode Anda.

Saya ingin mengutip Tom Kyte dari Oracle di sini... Ini adalah aturan tentang penulisan kode... meskipun itu sedikit tidak cocok, tapi saya rasa saya lebih tahu.

Addendum kami memiliki bola kode, yang dapat kami gunakan untuk bertanya (dan terkadang kami membutuhkan prosedur yang disimpan). Tse memungkinkan kita:

  • gampang otrimat semua tanya pіd jam versi keruvannya
  • robiti semua perubahan untuk perawatan kulit untuk berbagai server database
  • termasuk pengulangan kode yang sama melalui kode kami

Kontrol akses diimplementasikan di bola tengah, dan bukan di database, jadi kami tidak memerlukan prosedur yang disimpan. Seluruh dunia adalah jalan tengah antara permintaan khusus dan prosedur yang diurus.

Penting untuk mengubah argumen untuk kedua prosedur, yang disimpan sebagai di repositori pusat, tetapi (berpotensi) penting untuk ditransfer, dan spesialisasi lebih mudah ditemukan, stink shard dengan kode Anda, tetapi stinks juga bisa lebih dikenal dalam kode.

Argumen bahwa prosedur yang disimpan lebih efektif, jangan balas dendam lagi. teks terkirim

Saran Google untuk prosedur yang diambil vs Dynamic Query akan menunjukkan kepada Anda beberapa argumen dalam hal apa pun dan, lebih baik bagi Anda untuk menerima keputusan Anda sendiri.

Deyakі rechі, tentang yaki perlu dipikirkan: Siapa yang butuh prosedur, apa yang mereka simpan, Omong-omong?

Jelas bahwa makanan untuk kebutuhan energi Anda itu penting, tetapi bahkan lebih penting untuk memikirkan makanan yang, dengan minuman paling istimewa di tengah, berorientasi pada jumlah besar, aman. Waspadalah terhadap parameterisasi Anda dan ikuti inkonsistensi tipikal seperti injeksi SQL.

Procs untuk alasan lain, dan juga lebih mudah untuk meningkatkan proc untuk profil tambahan atau bagian dari proc. Di peringkat ini, Anda tidak perlu memberi tahu siapa pun tentang peluncuran program Anda, untuk mengetahui apa yang dikirim ke server SQL

Jika Anda ingin bertanya ad-hoc, berubah pikiran bahwa mereka parametrized

Parameterisasi SQL atau SPROC... tidak terlalu berpengaruh dalam hal kinerja... Anda dapat meminta pengoptimalan salah satunya.

Bagi saya, sisa keuntungan SPROC adalah saya dapat mematikan banyak hak untuk mengelola hak SQL, berikan saja hak saya untuk masuk ke sprocs ... sehingga Anda dapat memenangkan SQL Parametized, masuk, mengikat ke baris koneksi Anda , mungkin lebih (catatan dari semua jenis operator untuk dipilih pada salah satu tabel, yang mereka miliki aksesnya, misalnya).

Seperti sebelumnya, saya telah menyukai SQL berparameter, ingin ...

Argumen sproc produktivitas spirnim - 3 RDBM atas memenangkan kembali rencana untuk minum dan jam harian. Yogo didokumentasikan... Apa itu 1995?

Namun, implementasi SQL dalam program Anda juga merupakan desain yang buruk - pemeliharaan kode, mungkin bukan konsep yang cukup baik untuk orang kaya.

Demikian juga, program dapat mulai dari awal untuk ORM tambahan (tambahan dari lapangan hijau jauh dari kіlkoh!), tse vіdminny vibrіr, model oskіlki kelas Anda keruє model DB Anda yang hanya satu jam.

Karena struktur ORM tidak tersedia, kami telah meretas pidhide hibrid untuk membuat file XML sumber daya SQL untuk meminta baris SQL yang diperlukan (bau busuk kemudian di-cache oleh infrastruktur sumber daya). Sama seperti SQL akan memerlukan beberapa manipulasi kecil yang berbeda dari kode, itu juga akan memerlukan manipulasi besar dari deretan SQL, yang kami pikirkan kembali.

Pidkhid hybrid ini memudahkan untuk mengelola pengecer (mungkin, jika saya lebih kecil, pecahan tim saya dapat dibersihkan, sehingga saya dapat membaca rencana permintaan), dan laring hanyalah verifikasi ulang SVN. Selain itu, saya akan meminta Anda untuk mengganti RDBM - cukup ganti file sumber daya SQL (tidak sesederhana alat ORM, tentu saja, tetapi berfungsi dengan sistem lama atau basis data, yang tidak didukung)

Pendapat saya adalah bahwa 90% dari permintaan dan/atau prosedur yang disimpan tidak bertanggung jawab untuk membuat janji (diterima, secara manual).

Akses ke data dapat dibuat secara otomatis. Anda dapat memilih apakah Anda ingin membuat prosedur secara statis pada waktu kompilasi atau secara dinamis pada waktu pembuatan, atau jika Anda ingin menambahkan kolom ke tabel (otoritas objek), Anda hanya perlu mengubah satu file.

Saya akan menyimpan semua data mengakses kode program, dalam hal ini akses ke data dapat diperoleh langsung dari permintaan SQL. Dari sisi lain, logika pengelolaan, seperti yang saya tempatkan di database saat melihat pemicu, prosedur penyimpanan, fungsi inti, dan banyak lagi. Contoh fakta bahwa saya menghormati tanggal basis data, dan pembuatan data - dapat diterima bahwa klien kami dapat memiliki FirstName dan LastName. Sekarang untuk antarmuka koristuvach, DisplayName diperlukan, seperti yang muncul dari beberapa logika non-sepele. Untuk generasi ini, saya membuat prosedur yang disimpan, kemudian akan diluncurkan oleh pemicu setiap kali baris diperbarui (jika tidak, data lain).

Tampaknya ada sesuatu yang lebih tidak dapat dipahami, bahwa akses ke data sama dengan basis data, dan segala sesuatu yang layak untuk mengakses data, data itu sendiri, ada di sana. Itu salah, tetapi saya menjalankan banyak proyek, seperti berteriak-teriak kehabisan ide. Mungkin seluruh fenomena lokal.

Saya bisa menghidupkan ide SP dengan membuat begitu banyak desain yang buruk. Misalnya, dalam satu proyek, di mana saya mengambil bagian, saya mencoba mengetik CRUD untuk tabel kulit dan kulit untuk permintaan cerdas, dan bau busuk menghantam saya. Dengan siapa, bau busuk itu hanya menambahkan bola bodoh lainnya. Lebih sakit lagi memikirkan pidato-pidato seperti itu.

Prosedur suara

BUAT PROSEDUR [({masuk|keluar|masuk} [,…])]
[SET HASIL DINAMIS ]
MULAI [ATOM]

AKHIR

Kata kunci
. IN (Masukan) – parameter masukan
. KELUAR (Keluaran) – parameter keluaran
. INOUT - input dan output, serta bidang (tanpa parameter)
. DYNAMIC RESULT SET Menunjukkan bahwa prosedur dapat menentukan jumlah kursor, sehingga prosedur dapat ditutup setelah prosedur dikembalikan.

Catatan
Tidak disarankan untuk mengubah banyak parameter dalam prosedur yang disimpan (misalnya, di depan sejumlah besar dan string karakter) melalui penataan ulang tumpukan. Dalam praktiknya, dialek dasar Transact-SQL, PL/SQL, dan Informix menjaga konsistensi dengan standar, seperti parameter yang disuarakan dan yang berbeda, perubahan yang disuarakan, dan program yang mudah digunakan. Microsoft merekomendasikan untuk menghentikan perkiraan berikutnya untuk mengevaluasi ukuran Cache dari prosedur yang disimpan:
\u003d (jumlah maksimum coristuvachiv kerja satu jam) * (percobaan rencana kehadiran terbesar) * 1,25. Tergantung pada rencana, sisi dapat diperluas dengan bantuan perintah: DBCC MEMUSAGE.

Prosedur Viklik

Untuk DBMS kaya, daftar prosedur yang disimpan, digunakan untuk bantuan operator:

LAKUKAN PROSEDUR [(][)]

Catatan: Prosedur penyimpanan cepat dapat disimpan dengan program, prosedur lain yang dapat disimpan, atau dalam mode interaktif.

Contoh prosedur menyuarakan

BUAT PROSEDUR Proc1 SEBAGAI // setrum prosedur
DECLARE Cur1 200 // setrum kursor
OPEN Cur1 // buka kursor
FETCH NEXT FROM Cur1 //membaca data dari kursor
SAAT @@Fetch_Status=0
MULAI
TAMBAHKAN BERIKUTNYA DARI Cur1
AKHIR
TUTUP Cur1 // tutup kursor
DEALOKASI Kur1
EXECUTE Proc1 // jalankan prosedur

Polimorfisme
Dua subprogram dengan nama yang sama dapat dibuat dalam satu skema yang sama, karena parameter kedua subprogram ini berada di dunia satu jenis satu, sehingga dapat dipisahkan. Untuk membedakan antara dua subprogram dengan nama yang sama dalam satu skema, kulitnya diberi nama alternatif dan unik (nama spesifik). Im'ya tersebut dapat diberikan, jika subprogram sedang dikembangkan. Saat memanggil subprogram untuk kehadiran sejumlah nama yang sama, penunjukan subprogram yang diperlukan dikenakan biaya untuk sedikit waktu:
. Lebih sering, semua prosedur ditetapkan dari nama yang ditetapkan, dan jika tidak ada, maka semua fungsi dari nama yang diberikan.
. Untuk analisis yang lebih dalam, subprogram ini ditinggalkan, ratusan danital tersebut dapat diistimewakan untuk vikonannya (EXECUTE).
. dipilih , di mana jumlah parameter ditentukan oleh jumlah argumen dalam kueri. Tipe data yang ditetapkan dan parameter dari posisi tersebut ditinjau.
. Jika lebih dari satu subprogram ditinggalkan, maka yang dipilih dengan kualifikasi terpendek.
Dalam praktik Oracle, polimorfisme diizinkan untuk fungsi yang hanya diekspos dalam paket, [dilindungi email]- Dalam skema lain, dan di Sybase dan MS SQL Server, fokus diblokir.

Vidalnya dan perubahan prosedur
Untuk prosedur jarak jauh, operator digunakan:

Untuk mengubah prosedur, operator dipilih:

MENGUBAH PROSEDUR [([{masuk|keluar|masuk}])]
MULAI [ATOM]

AKHIR

Keistimewaan prosedur vikonannya

HIBAH EKSEKUSI ON KE |PUBLIK [DENGAN PILIHAN HIBAH]

prosedur sistem
DBMS yang kaya (termasuk SQL Server) mungkin memiliki rangkaian prosedur sistem yang sama, sehingga Anda dapat mengubahnya untuk tujuan Anda sendiri.