Dapatkah prosedur tersimpan mysql mengembalikan nilai?

Prosedur tersimpan MySQL adalah objek yang berisi satu atau lebih pernyataan SQL untuk digunakan kembali. Mereka sering mengandung logika bisnis. Robert Sheldon mendemonstrasikan cara membuat dan memanggil stored procedure

Artikel ini adalah bagian dari rangkaian lanjutan Robert Sheldon tentang Belajar MySQL. Untuk melihat 11 item dalam seri ini, klik di sini

Seperti kebanyakan sistem manajemen basis data relasional, MySQL mendukung penggunaan prosedur tersimpan yang dapat dipanggil sesuai permintaan oleh aplikasi berbasis data. Setiap prosedur tersimpan adalah objek database bernama yang berisi rutinitas yang terdiri dari satu atau lebih pernyataan SQL. Saat aplikasi memanggil stored procedure, MySQL mengeksekusi pernyataan tersebut dan mengembalikan hasilnya ke aplikasi.  

Rutin prosedur dapat mencakup berbagai pernyataan, termasuk bahasa definisi data (DDL) dan bahasa manipulasi data (DML). Prosedur tersimpan MySQL juga mendukung penggunaan parameter input dan output, menjadikannya alat yang sangat fleksibel untuk mengenkapsulasi logika pernyataan

Prosedur tersimpan memungkinkan kode SQL untuk digunakan kembali sesering yang dibutuhkan, membantu menyederhanakan pengembangan aplikasi dan mengurangi kesalahan pernyataan. Pengembang tidak perlu menulis kueri yang rumit untuk setiap permintaan aplikasi, dan tim QA tidak perlu menghabiskan banyak waktu untuk memverifikasi kueri saat menguji aplikasi

Kemampuan untuk menggunakan kembali kode juga mengurangi lalu lintas jaringan karena prosedur tersimpan dapat dipanggil dengan pernyataan CALL tunggal, tidak peduli seberapa rumit kueri yang mendasarinya. Prosedur tersimpan juga dapat memberikan tingkat keamanan yang lebih tinggi dengan mengabstraksi struktur basis data yang mendasarinya dan menghilangkan kueri ad hoc di tingkat aplikasi

Dalam artikel ini, saya mendemonstrasikan cara membuat dan memperbarui prosedur tersimpan, serta memanggilnya dengan pernyataan CALL. Anda akan mempelajari cara membuat prosedur dasar dan berparameter yang menggunakan parameter input dan output. Seperti artikel sebelumnya dalam seri ini, saya menggunakan edisi Komunitas MySQL di komputer Windows untuk membuat contoh, yang saya buat di MySQL Workbench, antarmuka pengguna grafis (GUI) yang disertakan dengan edisi Komunitas

Mempersiapkan lingkungan MySQL Anda

Contoh dalam artikel ini didasarkan pada database travel, yang merupakan database yang sama yang saya gunakan untuk artikel sebelumnya tentang tampilan MySQL. Artikel ini menggunakan tabel dan data yang sama untuk menunjukkan cara bekerja dengan prosedur tersimpan. Jika Anda mencoba contoh di artikel sebelumnya, database travel mungkin masih diinstal pada instance MySQL Anda. Jika tidak, Anda dapat menggunakan skrip SQL berikut untuk membuat database dan tabelnya

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

JATUH DATABASE JIKA ADA bepergian;

BUAT DATABASE perjalanan;

GUNAKAN bepergian;

BUAT TABEL produsen (

  manufacturer_id INT TIDAK DITANDATANGANI TIDAK NULL AUTO_INCREMENT,

  produsen VARCHAR(50) NOT NULL,

  buat_tanggal TIMESTAMP TIDAK NULL DEFAULT CURRENT_TIMESTAMP,

  last_update TIMESTAMP TIDAK NULL

    DEFAULT CURRENT_TIMESTAMP AKTIF UPDATE CURRENT_TIMESTAMP,

  UTAMA KUNCI (manufacturer_id) )

ENGINE=InnoDB AUTO_INCREMENT=1001;

BUAT TABEL pesawat (

  plane_id INT UNSIGNED TIDAK NULL AUTO_INCREMENT,

  pesawat VARCHAR(50) NOT NULL,

  manufacturer_id INT TIDAK DITANDATANGANI TIDAK NULL,

  tipe_mesin VARCHAR(50) NOT NULL,

  engine_count TINYINT TIDAK NULL,

  max_weight MEDIUMINT UNSIGNED TIDAK NULL,

  lebar sayap DECIMAL(5,2) NOT NULL,

  panjang_pesawat DECIMAL(5,2) NOT NULL,

  parking_area INT DIHASILKAN SELALU AS

              ((lebar sayap * plane_length)) STORED,

  icao_code CHAR(4) NOT NULL,

  buat_tanggal TIMESTAMP TIDAK NULL DEFAULT CURRENT_TIMESTAMP,

  last_update TIMESTAMP TIDAK NULL

    DEFAULT CURRENT_TIMESTAMP AKTIF UPDATE CURRENT_TIMESTAMP,

  UTAMA KUNCI (id_pesawat),

  KENDALA fk_manufacturer_id ASING ASING KUNCI (manufacturer_id)

    REFERENSI produsen (produsen_id) )

ENGINE=InnoDB AUTO_INCREMENT=101;

Tabel airplanes menyertakan kunci asing yang mereferensikan tabel manufacturers, jadi pastikan untuk membuat tabel sesuai urutan yang ditampilkan di sini. Setelah Anda membuat tabel, Anda dapat menambahkan data sampel ke dalamnya sehingga Anda dapat menguji prosedur tersimpan Anda. Untuk mengisi tabel, jalankan pernyataan INSERT berikut

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

MASUKKAN KE DALAM produsen (produsen)

NILAI ('Airbus'), ('Beechcraft'), ('Piper');

MASUKKAN KELUAR pesawat

  (pesawat, manufacturer_id, engine_type, engine_count,

    max_weight, lebar sayap, plane_length, icao_code)

NILAI

  ('A380-800', 1001< . 65, 'jet', 4, 1267658, 261.65, 238. 62, 'A388'),

  ('A319neo Sharklet', 1001, 'jet', 2, 166449, 117.45, 111. 02, 'A319'),

  ('ACJ320neo (Versi Jet Perusahaan)', 1001, 'jet', 2, 174165, 117.45, 123. 27, 'A320'),

  ('A300-200 (A300-C4-200, F4-200)', . 08 1001, 'jet', 2, 363760, 147.08, 175. 50, 'A30B'),

  ('Beech 390 Premier I, IA, II (Raytheon Premier I)',< . 50 1002, 'jet', 2, 12500, 44.50, 46. 00, 'PRM1'),

  ('Beechjet 400 (dari/sama dengan MU-300-10 Diamond II)' . 50 1002, 'jet', 2, 15780, 43.50, 48. 42, 'BE40'),

  ('1900D', 1002, 'Turboprop', 2,17120,  57.75, 57. 67, 'B190'),

  ('PA-24-400 Comanche', 1003, 'piston', 1, 3600, 36.00, 24. 79, 'PA24'),

  ('PA-46-600TP Malibu Meridian, M600', 1003, 'Turboprop', 1, 6000, 43.17, 29. 60, 'P46T'),

  ('J-3 Cub', 1003 . 00, 'piston', 1, 1220, 38.00, 22. 42, 'J3');

Seperti pernyataan CREATE TABLE, Anda harus menjalankan pernyataan INSERT dalam urutan yang ditentukan di sini sehingga Anda tidak melanggar kunci asing yang ditentukan pada tabel airplanes

Membuat stored procedure di MySQL

Untuk membuat stored procedure di MySQL, Anda harus menggunakan pernyataan CREATE CALL2. Untuk memulai, buka jendela kueri baru di Workbench dan pastikan database target aktif. (Untuk mengaktifkan database, klik dua kali database di Navigator atau jalankan pernyataan CALL3. ) Untuk contoh ini, Anda akan menggunakan database travel

Saat membuat pernyataan CREATE CALL2 Anda, Anda harus memberikan nama untuk prosedur dan menentukan rutin SQL yang ingin Anda pertahankan ke database Anda. Rutin dapat menyertakan pernyataan SQL tunggal seperti CALL7 atau CALL8, atau dapat berupa pernyataan majemuk. Pernyataan majemuk adalah pernyataan yang menggunakan sintaks ________0______9 untuk menyertakan blok dari satu atau lebih pernyataan SQL. Blok tersebut dapat mencakup berbagai elemen bahasa SQL, termasuk pernyataan DDL dan DML, deklarasi variabel, blok tersemat, atau konstruksi kontrol aliran seperti loop atau uji kondisional

Sebagian besar prosedur tersimpan menggunakan pernyataan majemuk meskipun hanya berisi satu pernyataan SQL. Misalnya, rutin dalam pernyataan CREATE CALL2 berikut mencakup pernyataan majemuk dengan hanya satu pernyataan CALL7

1

2

3

4

5

6

7

8

9

10

11

12

13

14

DELIMITER //

BUAT PROSEDUR get_plane_info()

MULAI

  PILIH a. manufacturer_id, m. produsen,

    COUNT(*) AS plane_count,

    ROUND(AVG(a.lebar sayap), 2) AS avg_span,

    ROUND(AVG(a.panjang_pesawat), 2) AS avg_length

  DARI pesawat a INNER JOIN manufacturers m

    AKTIF a. manufacturer_id = m. manufacturer_id

  GROUP OLEH a. manufacturer_id

  PESAN OLEH m. produsen;

AKHIR//

  

DELIMITER ;

Contoh membuat prosedur bernama travel_3. Perhatikan bahwa satu set tanda kurung mengikuti nama. Jika pernyataan itu menyertakan parameter input atau output, mereka akan didefinisikan dalam tanda kurung (yang akan saya bahas nanti di artikel). Jika Anda tidak menyertakan parameter, Anda tetap harus memberikan tanda kurung

Pernyataan majemuk didefinisikan oleh sintaks CALL_9, yang menyertakan pernyataan CALL7 tunggal. Pernyataan CALL7 itu sendiri bergabung dengan tabel airplanes dan manufacturers, mengelompokkan data dengan kolom travel9 di tabel airplanes, dan menghitung nilai rata-rata travel1 dan travel2 untuk setiap produsen. Pernyataan itu juga memerintahkan hasil oleh pabrikan dan memberikan jumlah total model pesawat untuk masing-masingnya. (Kami akan membahas semua elemen pernyataan ini secara lebih mendetail nanti di seri ini. )

Seperti yang Anda lihat, membuat stored procedure sederhana adalah proses yang cukup mudah. Minimal, Anda harus memberikan nama dan badan rutin. Namun, Anda pasti memperhatikan dimasukkannya dua pernyataan travel3 yang mengelilingi definisi prosedur

Secara default, MySQL menggunakan titik koma (;) sebagai pembatas pernyataan. Ini membantu memastikan bahwa klien mengirim pernyataan ke server secara keseluruhan tanpa membingungkannya dengan pernyataan lain. Namun, pernyataan majemuk dalam prosedur tersimpan mungkin menyertakan satu atau lebih pembatas, selain pembatas akhir definisi, dan semua pembatas ini dapat menyebabkan kebingungan saat meneruskan pernyataan CREATE CALL2 dari klien ke server

Untuk mengatasi masalah ini, MySQL mendukung penggunaan pernyataan travel3, yang memungkinkan Anda mengubah sementara pembatas sehingga Anda dapat meneruskan seluruh definisi prosedur ke server sebagai satu pernyataan. Dalam contoh di atas, pernyataan travel_3 pertama mengubah pembatas menjadi garis miring ganda (//), dan pernyataan travel3 kedua mengubah pembatas kembali menjadi titik koma. Pembatas sementara kemudian digunakan di akhir pernyataan CREATE CALL2 (setelah kata kunci airplanes1), tetapi pernyataan CALL7 itu sendiri masih diakhiri dengan pembatas titik koma

Saya juga ingin menunjukkan bahwa MySQL Workbench menyediakan alat (dalam bentuk tab) untuk membuat dan mengedit prosedur tersimpan. Alat ini mirip dengan yang digunakan untuk membuat dan mengedit tampilan. Ini memberikan rintisan untuk membuat pernyataan CREATE CALL2 tetapi menyerahkan kepada Anda untuk mengisi detailnya. Gambar 1 memperlihatkan tab Stored Procedure seperti yang muncul saat Anda pertama kali meluncurkannya di Workbench

Dapatkah prosedur tersimpan mysql mengembalikan nilai?

Gambar 1. Menambahkan prosedur tersimpan melalui Workbench GUI

Untuk meluncurkan tab Prosedur Tersimpan, pilih database target di Navigator, lalu klik tombol buat prosedur tersimpan di bilah alat Workbench. (Tombolnya menyertakan tooltip Buat prosedur tersimpan baru dalam skema aktif di server yang terhubung. ) Ketika tab Prosedur Tersimpan muncul, Anda dapat mulai membuat pernyataan Anda. Setelah selesai, klik Terapkan. MySQL kemudian akan menambahkan beberapa komponen pernyataan yang diperlukan untuk membuat prosedur. Tinjau skrip terakhir, klik Terapkan sekali lagi, lalu klik Selesai. Prosedur tersimpan akan ditambahkan ke database target

Tab Prosedur Tersimpan dapat berguna untuk membuat dan mengedit prosedur tersimpan, jadi saya ingin memastikan Anda mengetahuinya tersedia. Namun, saya lebih suka menggunakan tab kueri saat bekerja dengan prosedur tersimpan karena menurut saya lebih mudah dan menghemat langkah, jadi inilah pendekatan yang saya ambil untuk contoh di artikel ini

Memverifikasi stored procedure yang baru dibuat

Setelah Anda menjalankan pernyataan CREATE CALL2, Anda dapat memverifikasi bahwa itu telah ditambahkan ke database travel dengan melihatnya di Navigator, seperti yang ditunjukkan pada Gambar 2. (Anda mungkin perlu menyegarkan Navigator untuk melihat prosedur baru. )

Dapatkah prosedur tersimpan mysql mengembalikan nilai?

Gambar 2. Melihat prosedur tersimpan di Navigator

Dari Navigator, Anda dapat membuka definisi prosedur di tab Stored Procedure dengan mengklik ikon kunci inggris di samping nama prosedur. Gambar 3 menunjukkan definisi prosedur saat Anda membuatnya, kecuali satu perbedaan. Sekarang menyertakan klausa airplanes8 setelah kata kunci CREATE

Dapatkah prosedur tersimpan mysql mengembalikan nilai?

Gambar 3. Melihat definisi prosedur pada tab Stored Procedure

Klausa airplanes8 menentukan akun mana yang telah ditunjuk sebagai pembuat prosedur. Karena saya membuat prosedur tersimpan di bawah akun manufacturers1 di instance MySQL lokal saya, itu adalah nama pengguna yang ditambahkan ke definisi. Secara default, MySQL menggunakan akun pengguna yang menjalankan pernyataan CREATE CALL2, tetapi Anda dapat menentukan akun yang berbeda selama diberikan izin yang memadai

Selain klausa airplanes8, definisi prosedur tersimpan Anda akan terlihat seperti apa yang Anda buat, kecuali bahwa tidak ada pernyataan travel3 atau pembatas kustom. Namun, jika Anda memperbarui definisi pada tab Stored Procedure dan mengklik Apply, Workbench akan menambahkan elemen tersebut untuk Anda

Cara lain untuk memverifikasi apakah prosedur tersimpan Anda telah dibuat adalah dengan menanyakan tampilan manufacturers6 di database manufacturers7

1

2

PILIH * DARI skema_informasi. rutinitas

DI MANA skema_rutin = 'perjalanan';

Pernyataan tersebut menyertakan klausa manufacturers_8 yang membatasi hasil ke database travel. Rutinitas apa pun (prosedur atau fungsi tersimpan) yang telah dibuat di database akan dikembalikan oleh kueri ini

Anda dapat membatasi hasil lebih jauh dengan menentukan nama prosedur dalam klausa manufacturers8 dan dengan menentukan kolom atau kolom mana yang akan dikembalikan. Misalnya, pernyataan CALL7 berikut membatasi hasil ke kolom INSERT2 dan rutin travel3 di database travel

1

2

3

4

PILIH definisi_rutin

DARI skema_informasi. rutinitas

DI MANA skema_rutin = 'perjalanan'

  DAN nama_rutin = 'get_plane_info';

Meskipun pernyataan hanya mengembalikan satu nilai, masih sulit untuk dibaca, terutama jika itu adalah pernyataan majemuk yang kompleks. Untuk melihat pernyataan secara keseluruhan, klik kanan nilai langsung di hasil dan klik Buka Nilai di Penampil. Pilih Teks jika belum dipilih. MySQL meluncurkan jendela terpisah yang menampilkan nilai, seperti yang ditunjukkan pada Gambar 4

Dapatkah prosedur tersimpan mysql mengembalikan nilai?

Gambar 4. Memeriksa badan rutin prosedur tersimpan di Viewer

Tentu saja, memverifikasi bahwa prosedur tersimpan ada tidak memberi tahu Anda apakah itu akan berfungsi seperti yang diharapkan. Untuk alasan ini, Anda juga harus menjalankan prosedur dan melihat hasil seperti apa yang dikembalikannya (selain menjalankannya melalui siklus QA yang tepat). Untuk ini, gunakan pernyataan CALL_ yang menentukan nama prosedur, seperti yang diperlihatkan dalam contoh berikut

1

PANGGILAN get_plane_info;

Saat Anda memanggil prosedur, MySQL menjalankan rutinitas tersimpan dan mengembalikan hasil pernyataan, yang ditunjukkan pada Gambar 5

Dapatkah prosedur tersimpan mysql mengembalikan nilai?

Gambar 5. Melihat hasil setelah memanggil stored procedure

Seperti yang diharapkan, pernyataan CALL mengembalikan data pesawat gabungan, yang dikelompokkan berdasarkan pabrikan. Ini adalah hasil yang sama yang akan Anda terima jika Anda menjalankan pernyataan rutin CALL7 secara langsung. Namun, pernyataan tersebut sekarang disimpan ke database, menghilangkan kebutuhan untuk menulis pernyataan di tingkat aplikasi

Menambahkan parameter input ke prosedur tersimpan

travel_3 stored procedure yang dibuat di bagian sebelumnya mendemonstrasikan sebagian besar komponen utama yang masuk ke dalam stored procedure MySQL. Dalam lingkungan produksi, pernyataan majemuk kemungkinan akan lebih kompleks, namun contoh ini masih memberikan sebagian besar dasar-dasarnya. Yang mengatakan, salah satu aspek yang paling menguntungkan dari prosedur tersimpan adalah kemampuannya untuk mendukung parameter input dan output

Pada bagian ini, saya mendemonstrasikan cara menambahkan parameter input ke definisi prosedur. (Saya akan membahas parameter keluaran di bagian selanjutnya. ) Sebelum saya membahasnya, Anda harus menyadari bahwa Anda tidak bisa begitu saja mengubah definisi prosedur seperti Anda dapat mengubah definisi tabel atau tampilan. Anda dapat memodifikasi karakteristik prosedur, tetapi tidak lebih. Untuk membuat pembaruan yang signifikan, Anda harus membatalkan prosedur dan kemudian membuatnya kembali, menggabungkan elemen baru

Untuk membatalkan prosedur tersimpan, Anda dapat menggunakan pernyataan INSERT9 CALL2, seperti yang ditunjukkan pada contoh berikut

1

JATUHKAN PROSEDUR JIKA ADA get_plane_info;

Klausa CREATE1 CREATE2 bersifat opsional, tetapi dapat membantu menghindari kesalahan yang tidak perlu. Setelah Anda menjalankan pernyataan ini, Anda dapat mengonfirmasi bahwa prosedur telah dibatalkan dengan menanyakan kembali tampilan manufacturers6 di database manufacturers7

1

2

PILIH * DARI skema_informasi. rutinitas

DI MANA skema_rutin = 'perjalanan';

Pernyataan itu sekarang harus mengembalikan set hasil kosong, kecuali jika Anda membuat prosedur atau fungsi tersimpan lainnya

Setelah Anda menghapus prosedur tersimpan travel_3, Anda dapat memperbarui pernyataan CREATE CALL2 Anda untuk memasukkan parameter masukan. Untuk setiap parameter, Anda harus menentukan tipe parameter, nama parameter, dan tipe data parameter. MySQL mendukung tiga jenis parameter

  • DI DALAM. Parameter input yang meneruskan nilai dari pemanggil ke dalam rutinitas prosedur
  • KELUAR. Parameter keluaran yang meneruskan nilai dari rutin kembali ke pemanggil
  • KELUAR. Parameter yang dapat diinisialisasi oleh pemanggil, diperbarui oleh rutin, dan kemudian dikembalikan ke pemanggil dengan nilai barunya

Pernyataan CREATE CALL2 berikut mencakup satu parameter input, yang diberi nama TABLE0 dan didefinisikan dengan tipe data TABLE1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

DELIMITER //

BUAT PROSEDUR get_plane_info(

  IN in_name VARCHAR(50))

COMMENT 'mengambil informasi pesawat gabungan'

MULAI

  PILIH a. manufacturer_id, m. produsen,

    COUNT(*) AS plane_count,

    ROUND(AVG(a.lebar sayap), 2) AS avg_span,

    ROUND(AVG(a.panjang_pesawat), 2) AS avg_length

  DARI pesawat a INNER JOIN manufacturers m

    AKTIF a. manufacturer_id = m. manufacturer_id

  DI MANA m. produsen = in_name;

AKHIR//

DELIMITER ;

Definisi parameter dilampirkan dalam tanda kurung dan menyertakan kata kunci TABLE2, nama parameter, dan tipe data. Saya juga memperbarui pernyataan CALL_7 untuk mencerminkan penggunaan parameter. Itu tidak lagi menyertakan klausa TABLE4 TABLE5 dan TABLE6 TABLE5 tetapi sekarang menyertakan klausa manufacturers8 yang membandingkan parameter TABLE0 dengan kolom INSERT0. Dengan cara ini, penelepon dapat menentukan pabrikan yang menjadi dasar kueri

Pernyataan CREATE CALL2 juga mencakup karakteristik INSERT3, yang menambahkan komentar ke definisi prosedur. Anda dapat menyertakan satu atau lebih karakteristik dalam pernyataan CREATE CALL2 setelah definisi parameter. Karakteristik adalah salah satu dari beberapa opsi yang dapat ditambahkan ke definisi prosedur. Setiap karakteristik mempengaruhi definisi prosedur dengan cara yang berbeda. Misalnya, karakteristik ini menambahkan komentar, tetapi Anda juga dapat menggunakan karakteristik untuk menunjukkan bahasa rutin, menentukan apakah rutin bersifat deterministik, atau menentukan sifat rutin.

Saat memanggil prosedur tersimpan yang mengambil parameter input, Anda harus menyertakan nilai parameter dalam tanda kurung. Jika berupa nilai karakter, Anda harus menyertakannya dalam tanda kutip tunggal. Misalnya, pernyataan CALL berikut menentukan INSERT7 sebagai nilai untuk parameter input prosedur

1

PANGGILAN get_plane_info ('piper');

Saat MySQL menjalankan rutinitas prosedur, MySQL mengganti nilai INSERT7 dengan parameter TABLE0 yang ditentukan dalam klausa manufacturers8. Gambar 6 menunjukkan hasil yang sekarang dikembalikan oleh stored procedure

Dapatkah prosedur tersimpan mysql mengembalikan nilai?

Gambar 6. Memanggil prosedur tersimpan dengan parameter input

Saat menentukan prosedur tersimpan Anda, Anda dapat menyertakan beberapa parameter TABLE2, memisahkannya dengan koma. Kemudian, saat Anda memanggil prosedur, Anda menentukan setiap nilai parameter di dalam tanda kurung, sekali lagi dipisahkan dengan koma. Anda juga dapat menyertakan CALL02 parameter atau CALL03 parameter di samping parameter masukan

Menambahkan parameter output ke prosedur tersimpan

Sekarang mari kita lihat cara menambahkan beberapa parameter CALL02 ke prosedur tersimpan travel3. Parameter keluaran menyediakan mekanisme untuk mengembalikan satu atau beberapa nilai kembali ke pemanggil, daripada mengembalikan satu set hasil. Untuk contoh ini, Anda akan menambahkan lima parameter keluaran, yang akan sesuai dengan kolom yang ditentukan dalam daftar CALL7 rutin

Untuk menambahkan parameter, Anda harus membatalkan prosedur lagi dan kemudian menjalankan pernyataan CREATE CALL2 yang diperbarui. Parameter output ditentukan dalam tanda kurung yang sama dengan parameter input, seperti yang ditunjukkan pada skrip berikut

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

JATUHKAN PROSEDUR JIKA ADA get_plane_info;

DELIMITER //

BUAT PROSEDUR get_plane_info(

  IN in_name VARCHAR(50),

  OUT out_id INT UNSIGNED,

  KELUAR nama_keluar VARCHAR(50),

  KELUAR jumlah_pesawat SMALLINT UNSIGNED,

  KELUAR rata-rata_lebar sayap DECIMAL(5,2),

  KELUAR panjang_rata-rata DECIMAL(5,2))

COMMENT 'mengambil informasi pesawat gabungan'

MULAI

  PILIH a. manufacturer_id, m. produsen,

    COUNT(*),

    ROUND(AVG(a.lebar sayap), 2),

    ROUND(AVG(a.panjang_pesawat), 2)

  INTO out_id, out_name, plane_count, avg_wingspan, avg_length

  DARI pesawat a INNER JOIN manufacturers m

    AKTIF a. manufacturer_id = m. manufacturer_id

  DI MANA m. produsen = in_name;

AKHIR//

DELIMITER ;

Untuk setiap parameter keluaran, Anda harus menentukan kata kunci CALL02, nama parameter, dan tipe data parameter. Selain itu, Anda harus menambahkan klausa CALL10 setelah daftar CALL7 yang mengembalikan hasil ke parameter output. Saya juga telah menghapus alias kolom dari daftar CALL7 karena tidak diperlukan lagi

Saat Anda memanggil prosedur tersimpan yang mengembalikan parameter output, Anda dapat menangkap nilai parameter tersebut dengan mengirimkan variabel yang ditentukan pengguna untuk setiap parameter output untuk menyimpan nilainya, seperti yang ditunjukkan dalam pernyataan CALL berikut

1

2

HUBUNGI get_plane_info ('beechcraft', @out_id, @out_name,

  @jumlah_pesawat, @avg_wingspan, @avg_length);

Pernyataan CALL menetapkan CALL15 sebagai nilai parameter masukan. Ini diikuti oleh lima variabel yang ditentukan pengguna, yang sesuai dengan parameter yang ditentukan dalam definisi prosedur tersimpan. Saat Anda menjalankan pernyataan CALL, nilai parameter yang dikembalikan ditetapkan ke variabel

Cara yang tepat untuk menangani parameter keluaran dalam aplikasi Anda akan bergantung pada bahasa pemrograman yang Anda gunakan. Sementara itu, Anda kemudian dapat memverifikasi bahwa variabel Anda berisi nilai yang diharapkan dengan menjalankan pernyataan CALL7 yang mirip dengan berikut ini

1

PILIH @out_id, @out_name, @plane_count, @avg_wingspan, @avg_length;

Gambar 7 menunjukkan hasil yang dikembalikan oleh pernyataan CALL7

Dapatkah prosedur tersimpan mysql mengembalikan nilai?

Gambar 7. Melihat nilai parameter keluaran rutin untuk pesawat Beechcraft

Angka tersebut menunjukkan hasil saat Anda menentukan CALL15 sebagai nilai input saat memanggil prosedur tersimpan. Jika Anda menentukan nilai lain, seperti CALL20, pernyataan CALL7 Anda akan mengembalikan hasil yang jauh berbeda, seperti yang ditunjukkan pada Gambar 8

Dapatkah prosedur tersimpan mysql mengembalikan nilai?

Angka 8. Melihat nilai parameter output rutin untuk pesawat Airbus

Kedua parameter TABLE2 dan CALL02 dapat membuat prosedur tersimpan jauh lebih fleksibel saat mendukung aplikasi berbasis data. Anda mungkin juga menghadapi situasi ketika Anda ingin menggunakan parameter CALL03. Misalnya, Anda dapat membuat prosedur tersimpan yang menyertakan beberapa jenis penghitung. Anda dapat menggunakan parameter CALL_03 untuk mengatur nilai awal penghitung dan kemudian mengembalikan nilai penghitung baru berdasarkan keluaran rutin

Mengubah prosedur tersimpan di MySQL

MySQL mendukung pernyataan CALL_26 CALL2 untuk memperbarui karakteristik prosedur. Anda tidak dapat menggunakan pernyataan ini untuk membuat perubahan lain pada definisi prosedur. Anda terbatas pada karakteristik saja. Misalnya, pernyataan CALL26 CALL2 berikut menambahkan dua karakteristik ke definisi prosedur, tetapi definisi prosedur lainnya tidak akan berubah

1

2

3

UBAH PROSEDUR get_plane_info

BACA SQL DATA

SQL SECURITY INVOKER;

Karakteristik CALL30 CALL31 CALL32 menunjukkan bahwa rutin termasuk pernyataan yang membaca data. Jenis karakteristik ini hanya bersifat penasehat dan tidak membatasi rutinitas dengan cara apa pun. Karakteristik CALL31 CALL34 CALL35 menunjukkan bahwa rutin harus berjalan di bawah konteks keamanan akun pengguna yang memanggil rutin daripada akun yang menentukan

Setelah Anda menjalankan pernyataan CALL26 CALL2, Anda dapat memverifikasi bahwa karakteristik telah ditambahkan dengan melihat definisi prosedur pada tab Stored Procedure, yang ditunjukkan pada Gambar 9

Dapatkah prosedur tersimpan mysql mengembalikan nilai?

Gambar 9. Melihat definisi prosedur pada tab Stored Procedure

Perhatikan bahwa pernyataan CREATE CALL2 sekarang mencakup tiga karakteristik. dua yang baru saja Anda tambahkan dan karakteristik INSERT3 asli yang Anda tambahkan sebelumnya

Bekerja dengan prosedur tersimpan di MySQL

Prosedur tersimpan dapat menawarkan banyak fleksibilitas, sambil membantu merampingkan pengembangan aplikasi. Namun, sebuah prosedur hanya seefektif rutin yang mendasarinya dan pernyataan SQL yang dikandungnya. Dalam latihan ini, saya menunjukkan cara membuat prosedur tersimpan yang rutinitasnya berisi pernyataan CALL7 tunggal, tetapi Anda dapat membangun rutinitas yang mendefinisikan logika yang jauh lebih kompleks. Nanti di seri ini, saya akan mendemonstrasikan cara membuat pernyataan majemuk yang lebih kuat yang dapat Anda buat ke dalam prosedur tersimpan atau digunakan untuk jenis kueri lainnya

 

Dapatkah prosedur tersimpan mysql mengembalikan nilai?

Robert Sheldon 07 Oktober 2022

Dapatkah prosedur tersimpan mysql mengembalikan nilai?

Robert Sheldon 07 Oktober 2022

Memperkenalkan pernyataan MySQL INSERT

3

  • MySQL

Pada artikel sebelumnya dalam seri ini, saya memperkenalkan Anda pada pernyataan SELECT, salah satu dari beberapa pernyataan SQL yang termasuk dalam kategori bahasa manipulasi data (DML), subset pernyataan yang digunakan untuk kueri dan memodifikasi data. Pernyataan DML lainnya adalah pernyataan INSERT, yang memungkinkan Anda menambahkan data ke tabel MySQL, keduanya … Baca lebih lanjut

3

  • MySQL

Dapatkah prosedur tersimpan mysql mengembalikan nilai?

Lukas Vileikis 31 Januari 2023

Dapatkah prosedur tersimpan mysql mengembalikan nilai?

Lukas Vileikis 31 Januari 2023

Mengoptimalkan Query di MySQL. Mengoptimalkan Bacaan

1

  • MySQL

Mengoptimalkan operasi baca adalah salah satu masalah paling menonjol yang terkait dengan administrator basis data mana pun. Apa pun jenis sistem manajemen basis data yang digunakan – MySQL, rasanya seperti Percona Server atau MariaDB, MongoDB, TimescaleDB, SQL Server, atau lainnya, permintaan baca menjadi perhatian. Contoh kueri baca utama adalah kueri SELECT, tetapi banyak dari ini berkaitan dengan UPDATE dan DELETE juga karena mereka juga harus mengambil baris untuk dioperasikan. … Baca selengkapnya

Bisakah prosedur tersimpan mengembalikan nilai?

Prosedur tersimpan menerima parameter input dan juga prosedur tersimpan mengembalikan nilai setelah eksekusi

Bisakah SQL

Kembalikan data menggunakan parameter keluaran. Jika Anda menentukan kata kunci output untuk parameter dalam definisi prosedur, prosedur dapat mengembalikan nilai parameter saat ini ke program pemanggil ketika prosedur keluar .

Bagaimana Anda membuat prosedur tersimpan mengembalikan nilai?

Apa itu Return Value di SQL Server Stored Procedure? .
Klik kanan dan pilih Jalankan Prosedur Tersimpan
Jika prosedur, mengharapkan parameter, berikan nilainya dan klik OK
Seiring dengan hasil yang Anda harapkan, prosedur tersimpan juga mengembalikan Nilai Pengembalian = 0

Bagaimana cara mengembalikan hasil yang diatur dalam prosedur tersimpan di MySQL?

Dalam stored procedure, Anda cukup menjalankan SELECT , dan rangkaian hasil akan dikembalikan ke klien. Anda tidak dapat menggunakan set hasil tersebut di dalam rutinitas tersimpan lain di MySQL, tetapi aplikasi yang memanggil prosedur dapat menggunakannya seperti hasil kueri lainnya.