MySql5.0 และใหม่กว่ารองรับขั้นตอนการจัดเก็บ ฉันเพิ่งมีเวลาศึกษาสิ่งนี้
รูปแบบ:
สร้างชื่อกระบวนการของกระบวนการ ([พารามิเตอร์กระบวนการ[,...]]) |
ชื่อฟังก์ชัน CREATE FUNCTION ([พารามิเตอร์ฟังก์ชัน[,...]]) |
พารามิเตอร์ขั้นตอน:
[ IN |. OUT |. INOUT ] ชื่อพารามิเตอร์ ประเภทพารามิเตอร์
พารามิเตอร์ฟังก์ชัน:
ชื่อพารามิเตอร์ ประเภทพารามิเตอร์
ประเภทส่งคืน:
ประเภทข้อมูล MYSQL ที่ถูกต้อง
ลักษณะเฉพาะ:
ภาษา SQL |
เนื้อความของกระบวนงาน/เนื้อความของฟังก์ชัน: รูปแบบเป็นดังนี้:
เริ่ม |
ฉันไม่สนใจเกี่ยวกับคุณสมบัติที่เป็นกรรมสิทธิ์ที่นี่ สิ่งเหล่านี้เข้ากันไม่ได้กับข้อกำหนด SQL ดังนั้นจึงไม่พิจารณาเนื้อหาที่เกี่ยวข้องของคุณสมบัติ (คุณสมบัติ)
//
มีหลายประเด็นที่ควรทราบในระหว่างกระบวนการพัฒนา:
1. ความคิดเห็นเกี่ยวกับขั้นตอนการจัดเก็บ: MySQL สนับสนุนการใช้ -- หรือ /**/ ความคิดเห็น โดยที่ความคิดเห็นแรกคือความคิดเห็นแบบบรรทัดและอย่างหลังคือความคิดเห็นแบบเซ็กเมนต์
2. ตัวแปรจะถูกประกาศเป็นครั้งแรกด้วยการประกาศ ตัวแปรชั่วคราวสามารถแก้ไขได้โดยตรงด้วยคำนำหน้า @ เพื่อใช้อ้างอิง
3. เมื่อแก้ไขโดยตรงโดยใช้ตัวจัดการผู้ดูแลระบบ MySQL คุณสามารถป้อนข้อความฟังก์ชันต่อไปนี้ได้โดยตรง
หากคุณนำเข้าขั้นตอนหรือฟังก์ชันที่เก็บไว้โดยอัตโนมัติ ในสคริปต์ เนื่องจาก MySQL มีค่าเริ่มต้นเป็น " ";" เป็นตัวคั่น จากนั้นแต่ละประโยคของเนื้อหาของโพรซีเดอร์
จะถูกคอมไพล์โดย MySQL เป็นโพรซีเดอร์ที่เก็บไว้ และกระบวนการคอมไพล์จะรายงานข้อผิดพลาด ดังนั้น คีย์เวิร์ด DELIMITER จะต้องถูกใช้เพื่อ ประกาศล่วงหน้าว่า
ตัวคั่นจะถูกเรียกคืนเมื่อตัวคั่นส่วนปัจจุบันถูกใช้หมด ดังที่แสดงด้านล่าง:
ตัวคั่น $$ |
4. MySQL รองรับฟังก์ชันในตัวจำนวนมาก ซึ่งบางฟังก์ชันสอดคล้องกับฐานข้อมูลเชิงพาณิชย์ขนาดใหญ่ เช่น oracle, informix, sybase เป็นต้น แต่ก็มีบางฟังก์ชันที่มีชื่อไม่สอดคล้องกัน แต่มีฟังก์ชันสอดคล้องกัน หรือบางฟังก์ชันมีความสอดคล้องกัน ชื่อแต่ฟังก์ชั่นที่แตกต่างกัน สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับ DBA ที่ถ่ายโอนมาจากการพัฒนาฐานข้อมูลควรให้ความสนใจกับสิ่งเหล่านี้
5. การดีบักขั้นตอนหรือฟังก์ชันที่เก็บไว้: ฉันยังไม่ได้ศึกษาชุดเครื่องมือต่างๆ ที่จัดทำโดย MySQL และฉันไม่แน่ใจว่าจะมีเครื่องมือในการดีบั๊กหรือไม่ อย่างไรก็ตาม ข้อผิดพลาดในการคอมไพล์นั้นค่อนข้างจะพบได้ง่าย สำหรับการดีบั๊กกระบวนการทางธุรกิจ ใช้การเปรียบเทียบ วิธีที่โง่คือการสร้างตารางการดีบักและแทรกบันทึกที่แต่ละจุดกระบวนการในเนื้อหาของแพ็คเกจเพื่อสังเกตกระบวนการดำเนินการของโปรแกรม นี่เป็นวิธีที่สะดวกและโง่กว่าด้วย ^_^
ต่อไปนี้เป็นสองตัวอย่างซึ่งมีอัลกอริธึมการเข้ารหัสสตริง แต่ละครั้งที่คุณเรียกมันด้วยพารามิเตอร์อินพุตเดียวกัน คุณจะได้รับผลลัพธ์การเข้ารหัสที่แตกต่างกัน
อัลกอริธึมนั้นค่อนข้างง่ายและไม่แข็งแกร่ง โดยมีการดำเนินการในรูปแบบของฟังก์ชันและขั้นตอนดังนี้
(1) ฟังก์ชัน
เช่น
- |
สร้างฟังก์ชั่น fun_addmm (inpass varchar (10)) RETURNS varchar (11)
BEGIN
ประกาศ string_in varchar (39)
;
ประกาศ
len
Tinyint;
/*ประกาศ i Tinyint;*/
(2) กระบวนการ
สร้างขั้นตอน `pro_addmm` (IN varchar ขาเข้า (10), OUT varchar (11)) |
ผลการดำเนินการมีดังนี้:
mysql> โทร pro_addmm('zhouys',@a); |
อัลกอริธึมการเข้ารหัสมีจุดอ่อนหลายประการ:
1. ไม่รองรับตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก
2. ไม่รองรับภาษาจีน
3. ความแรงของการเข้ารหัสไม่เพียงพอ
ผู้ที่สนใจสามารถศึกษาวิธีเขียนฟังก์ชันถอดรหัสได้ ดังนั้นฉันจะ' ไม่ได้ลงรายละเอียดที่นี่