Thủ tục được lưu trữ trong khi lặp mysql
Trong phần này, chúng tôi kiểm tra các câu lệnh mà ngôn ngữ chương trình được lưu trữ MySQL cung cấp cho các lệnh xử lý lặp đi lặp lại (lặp đi lặp lại). Có nhiều lý do tại sao một chương trình có thể cần lặp lại Show
Khá rõ ràng rằng đây là trường hợp cuối cùng—việc xử lý các hàng được trả về bởi câu lệnh Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;3—sẽ là lý do phổ biến nhất để lặp vòng lặp trong các chương trình được lưu trữ trong MySQL và chúng tôi sẽ xem xét chủ đề này rất nhiều trong Chương 5. Trong chương này, chúng ta xem xét các lệnh lặp ở dạng tổng quát Cấu trúc lặp đơn giản nhất có thể là câu lệnh Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;5. Cú pháp của câu lệnh này như sau [ Các câu lệnh giữa câu lệnh Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;5 và câu lệnh Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;7 sẽ được lặp lại vô thời hạn, cho đến khi câu lệnh Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;5 kết thúc. Bạn có thể chấm dứt Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;5 bằng cách sử dụng câu lệnh LEAVE label;0 mà chúng tôi sẽ mô tả ngay sau đây Bạn có thể cung cấp nhãn cho vòng lặp, có cùng cú pháp với cú pháp mà chúng ta có thể thêm vào khối LEAVE label;1. Nhãn có thể giúp bạn xác định câu lệnh Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;7 tương ứng với câu lệnh Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;5 cụ thể. Quan trọng không kém, các nhãn có thể được sử dụng để kiểm soát luồng thực thi, như chúng ta sẽ thấy trong các phần tiếp theo Ví dụ 4-19 cho thấy một vòng lặp rất đơn giản (và rất nguy hiểm). Nó sẽ tiếp tục mãi mãi, hoặc ít nhất là cho đến khi bạn xoay sở để chấm dứt nó bằng cách nào đó. Vì các chương trình được lưu trữ chạy bên trong máy chủ cơ sở dữ liệu nên việc sử dụng Ctrl-C hoặc các hình thức ngắt bàn phím khác sẽ không hiệu quả—bạn sẽ chỉ có thể chấm dứt vòng lặp này bằng cách đưa ra lệnh LEAVE label;4 đối với phiên MySQL hoặc bằng cách tắt máy chủ cơ sở dữ liệu. Trong thời gian chờ đợi, vòng lặp sẽ tiêu thụ nhiều CPU nhất có thể, vì vậy chúng tôi khuyên bạn không nên chạy ví dụ này trên các hệ thống sản xuất quan trọng của mình Ví dụ 4-19. Vòng lặp vô hạn (đừng thử ở nhà. ) Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop; Rõ ràng là chúng ta hầu như không bao giờ muốn lập trình một vòng lặp vô hạn, và do đó chúng ta cần một số cách để kết thúc vòng lặp. Chúng ta có thể làm điều này với câu lệnh LEAVE label;0, vì vậy hãy chuyển sang câu lệnh này ngay lập tức Câu lệnh LEAVE label;0 cho phép chúng ta kết thúc một vòng lặp. Cú pháp chung cho câu lệnh LEAVE label;0 là________số 8 LEAVE label;0 khiến vòng lặp hiện tại bị chấm dứt. Nhãn phù hợp với vòng lặp sẽ bị kết thúc, vì vậy nếu một vòng lặp được đặt trong một vòng lặp khác, chúng ta có thể thoát ra khỏi cả hai vòng lặp bằng một câu lệnh Trong trường hợp đơn giản nhất, chúng ta chỉ thực hiện lệnh LEAVE label;0 khi đã sẵn sàng thoát khỏi Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;5, như trong Ví dụ 4-20 Ví dụ 4-20. Sử dụng LEAVE để kết thúc một vòng lặp Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;1 LEAVE label;0 có thể được sử dụng để thoát khỏi bất kỳ cấu trúc vòng lặp thay thế nào, như chúng ta sẽ xem xét trong các phần sắp tới. Trên thực tế, bạn cũng có thể sử dụng LEAVE label;0 nếu bạn muốn thoát ra khỏi khối có tên là LEAVE label;1 (được giới thiệu trước đó trong chương này) Câu lệnh Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;14 được sử dụng để khởi động lại quá trình thực thi ở đầu vòng lặp mà không thực hiện bất kỳ câu lệnh nào còn lại trong vòng lặp. Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;14 có cú pháp như sau Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;7 Khi MySQL gặp câu lệnh Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;14, nó sẽ bắt đầu thực thi khi bắt đầu vòng lặp được chỉ định. Trong ví dụ 4-21, chúng tôi in tất cả các số lẻ nhỏ hơn 10. Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;14 được sử dụng để lặp lại vòng lặp nếu số chúng ta có không phải là số lẻ. LEAVE label;0 được sử dụng để kết thúc vòng lặp khi chúng tôi đạt đến 10 Ví dụ 4-21. Sử dụng ITERATE để quay lại điểm bắt đầu của một vòng lặp [1 Mặc dù vòng lặp này rất hữu ích để minh họa việc sử dụng LEAVE label;0 và Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;14 để điều khiển một vòng lặp, nhưng nó là một thuật toán được xây dựng khá kém. Chúng ta có thể dễ dàng giảm một nửa số lần lặp lại vòng lặp bằng cách tăng biến vòng lặp Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;71 lên hai thay vì một Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;14 khiến việc thực thi vòng lặp khởi động lại ở đầu vòng lặp. Nếu bạn đang sử dụng vòng lặp Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;73 (xem phần tiếp theo), điều này có nghĩa là vòng lặp sẽ thực hiện lại vô điều kiện, bỏ qua điều kiện Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;74 mà nếu không sẽ kết thúc vòng lặp. Điều này có thể dẫn đến hành vi không mong muốn. Trong vòng lặp Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;75, Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;14 sẽ dẫn đến điều kiện Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;75 được đánh giá lại trước lần lặp tiếp theo của vòng lặp Chúng ta có thể xây dựng bất kỳ dạng vòng lặp nào có thể tưởng tượng được bằng cách sử dụng các câu lệnh Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;5, LEAVE label;0 và Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;14. Tuy nhiên, trên thực tế, các vòng lặp “thủ công” này rất khó xử khi so sánh với một số lựa chọn thay thế mà chúng tôi sắp xem xét. Các câu lệnh Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;75 và Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;73 được mô tả trong các phần sau cho phép chúng tôi tạo các vòng lặp dễ viết, đọc và bảo trì hơn Các câu lệnh Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;73 và Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;74 có thể được sử dụng để tạo một vòng lặp tiếp tục cho đến khi một số điều kiện logic được đáp ứng. Cú pháp của [15 là Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;9 Một vòng lặp Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;73 tiếp tục cho đến khi biểu thức được xác định trong mệnh đề Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;74 ước tính là TRUE. Về bản chất, một vòng lặp Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;73 về mặt logic tương đương với một khối [19 như thế này Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;4 Vòng lặp Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;73 dễ bảo trì hơn một chút vì rõ ràng hơn điều kiện nào sẽ khiến vòng lặp kết thúc. Câu lệnh LEAVE label;0 trong một vòng lặp đơn giản có thể ở bất kỳ đâu, trong khi câu lệnh Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;74 luôn được liên kết với mệnh đề Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;93 ở cuối vòng lặp. Hơn nữa, chúng ta không cần chỉ định nhãn cho vòng lặp Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;73 vì điều kiện Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;74 luôn dành riêng cho vòng lặp hiện tại. Tuy nhiên, chúng tôi vẫn khuyên bạn nên sử dụng các nhãn có vòng lặp Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;73 để cải thiện khả năng đọc, đặc biệt nếu các vòng lặp được lồng vào nhau Ví dụ 4-22 cho thấy sử dụng Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;73 để in ra các số lẻ nhỏ hơn 10. So sánh cú pháp này với cú pháp của ví dụ trước bằng cách sử dụng các câu lệnh Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;5 và LEAVE label;0 Ví dụ 4-22. Ví dụ về vòng lặp REPEAT Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;5 Có một vài điều đáng chú ý về vòng lặp Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;73
Một vòng lặp Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;75 thực thi miễn là một điều kiện là đúng. Nếu điều kiện không đúng ngay từ đầu, thì vòng lặp sẽ không bao giờ thực thi—không giống như vòng lặp Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;73, được đảm bảo thực hiện ít nhất một lần Vòng lặp Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;75 có cú pháp như sau Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;9 Một vòng lặp Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;75 có chức năng tương đương với một cấu trúc [19 đơn giản có mệnh đề LEAVE label;0 là câu lệnh đầu tiên của nó, như được mô tả trong phần “LỜI CHÀO”. Ví dụ 4-23 chứng minh Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;56 Ví dụ 4-23. LOOP-END LOOP thực hiện chức năng tương tự như vòng lặp WHILE Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;0 Ví dụ 4-24 cho thấy vòng lặp số lẻ nhỏ hơn 10 của chúng tôi được triển khai bằng cách sử dụng Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;75 Ví dụ 4-24. Các số lẻ nhỏ hơn 10 được triển khai dưới dạng vòng lặp WHILE Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;1 Chúng ta thường muốn lồng các vòng lặp. Trong đoạn mã đơn giản trong Ví dụ 4-25, chúng ta in ra “bảng thời gian” cơ bản bằng cách sử dụng cấu trúc [19 lồng nhau Ví dụ 4-25. Ví dụ về vòng lặp lồng nhau Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;2 Khi lồng các vòng lặp, đặc biệt hữu ích khi gắn nhãn bắt đầu và kết thúc vòng lặp để liên kết rõ ràng phần đầu của mỗi vòng lặp với phần cuối của nó. Tất nhiên, nếu chúng ta cần sử dụng LEAVE label;0, chúng ta phải gắn nhãn cho vòng lặp Nhận xét chia tay trên vòng lặpBây giờ chúng ta đã thấy ba thuật toán lặp đơn giản và giống hệt nhau được triển khai bằng cách sử dụng ba cấu trúc lặp có sẵn trong ngôn ngữ chương trình được lưu trữ MySQL. Mỗi cấu trúc trong số ba cấu trúc vòng lặp có khả năng thực hiện hầu như bất kỳ logic vòng lặp nào mà bạn có thể cần thực hiện Các vòng lặp ví dụ được đưa ra trong chương này khá đơn giản và ít liên quan đến thế giới thực. Chúng tôi làm điều này một phần vì mục đích rõ ràng, nhưng cũng vì thực tế là trong lập trình được lưu trữ, hầu hết tất cả các cấu trúc vòng lặp của bạn sẽ liên quan đến việc lặp qua các hàng được trả về bởi câu lệnh Infinite_loop: LOOP SELECT 'Welcome to my infinite loop from hell!!'; END LOOP inifinite_loop;3, đây là chủ đề của chương tiếp theo Làm cách nào để lặp trong thủ tục lưu trữ MySQL?Cú pháp chung để triển khai một vòng lặp MySQL đơn giản là. . [bắt đầu_nhãn. ] VÒNG. tuyên bố_list. VÒNG KẾT THÚC [end_label] [Tên]. VÒNG. tuyên_bố; . RỜI [nhãn]; THỦ TỤC XẢ NẾU TỒN TẠI loopMe; . KHAI BÁO tôi INT; Chúng ta có thể sử dụng vòng lặp while trong MySQL không?Câu lệnh vòng lặp WHILE của MySQL được sử dụng để thực hiện lặp đi lặp lại một hoặc nhiều câu lệnh, miễn là điều kiện là đúng. Chúng ta có thể sử dụng vòng lặp khi cần thực hiện tác vụ lặp lại trong khi điều kiện là đúng .
Làm cách nào để lặp trong thủ tục lưu trữ SQL?Vòng lặp thủ tục lưu sẵn SQL Server thông qua tập kết quả
. Sau đó, chúng tôi mở con trỏ và bắt đầu tìm nạp từng hàng một và lưu trữ các giá trị vào các biến và hiển thị chúng ở đầu ra. @@FETCH_STATUS là một biến toàn cục.
Làm cách nào để chèn dữ liệu vào MySQL bằng vòng lặp?Câu trả lời. BEGIN DECLARE var INT; . 00 giờ sáng. Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM. |