PostgreSQL: kèo bóng đá hôm nay và ngày | |||
---|---|---|---|
prev | UP | Chương 41.PL/PGSQL - SQLNgôn ngữ thủ tục | Tiếp theo |
PL/PGSQLCó thể được sử dụng để xác định các quy trình kích kèo bóng đá pháp trên các thay đổi dữ liệu hoặc các sự kiện cơ sở dữ liệu. Một quy trình kích kèo bóng đá pháp được tạo bằngTạo chức nănglệnh, khai báo nó là một hàm không có đối số và loại trả về củaTrigger(đối với kích kèo bóng đá pháp thay đổi dữ liệu) hoặcevent_trigger(đối với các kích kèo bóng đá pháp sự kiện cơ sở dữ liệu). Các biến cục bộ đặc biệt có tênTG_cái gì đóđược xác định tự động để mô tả điều kiện đã kích kèo bóng đá pháp cuộc gọi.
Akèo bóng đá pháp chấp bóng đá hôm nay: Tài liệu: 911601_11669Trigger. Lưu ý rằng hàm phải được khai báo mà không có đối số ngay cả khi nó dự kiến sẽ nhận được một số đối số được chỉ định trongTạo Trigger- Các đối số như vậy được truyền quaTG_ARGV, như được mô tả bên dưới.
Khi APL/PGSQL11995_12116
Loại dữ liệuRecord; Biến giữ hàng cơ sở dữ liệu mới choChèn/Cập nhậtkèo bóng đá pháp động trong các kích kèo bóng đá pháp cấp độ hàng. Biến này không được chỉ định trong các kích kèo bóng đá pháp cấp câu lệnh và choXóakèo bóng đá pháp động.
Kiểu dữ liệuRecord; Biến giữ hàng cơ sở dữ liệu cũ choCập nhật/Xóa12686_12787Chènkèo bóng đá pháp động.
Kiểu dữ liệutên; Biến chứa tên của bộ kích kèo bóng đá pháp thực sự bị bắn.
Kiểu dữ liệuText; một chuỗitrước, sauhoặcthay vì, Tùy thuộc vào định nghĩa của bộ kích kèo bóng đá pháp.
Kiểu dữ liệuText; một chuỗi củahànghoặccâu lệnhTùy thuộc vào định nghĩa của bộ kích kèo bóng đá pháp.
Kiểu dữ liệuText; một chuỗiChèn, Cập nhật, Xóahoặccắt ngắnKể cho kèo bóng đá pháp động nào được kích kèo bóng đá pháp.
Kiểu dữ liệuoid; ID đối tượng của bảng gây ra lệnh gọi kích kèo bóng đá pháp.
Kiểu dữ liệutên; Tên của bảng gây ra lời mời kích kèo bóng đá pháp. Điều này bây giờ không được chấp nhận, và có thể biến mất trong một bản phát hành trong tương lai. Sử dụngTG_TABLE_NAMEThay vào đó.
Kiểu dữ liệutên; Tên của bảng gây ra lời mời kích kèo bóng đá pháp.
Kiểu dữ liệutên; Tên của lược đồ của bảng gây ra lời mời kích kèo bóng đá pháp.
Kiểu dữ liệuSố nguyên; số lượng đối số được đưa ra cho quy trình kích kèo bóng đá pháp trongTạo Triggercâu lệnh.
Mảng kiểu dữ liệu củaText; Các đối số từTạo TriggerCâu lệnh. Chỉ số được tính từ 0. Các chỉ mục không hợp lệ (nhỏ hơn 0 hoặc lớn hơn hoặc bằngTG_NARGS) dẫn đến giá trị null.
Một chức năng kích kèo bóng đá pháp phải trả vềnullhoặc giá trị bản ghi/hàng có chính xác cấu trúc của bảng, kích kèo bóng đá pháp đã được kích kèo bóng đá pháp.
Trình kích kèo bóng đá pháp cấp hàng đã bắntrướcCó thể trả về NULL để báo hiệu Trình quản lý kích kèo bóng đá pháp bỏ qua phần còn lại của thao tác cho hàng này (nghĩa là, các bộ kích kèo bóng đá pháp tiếp theo không được bắn vàChèn/Cập nhật/XóaKhông xảy ra cho hàng này). Nếu một giá trị nonnull được trả về thì kèo bóng đá pháp động sẽ tiến hành giá trị hàng đó. Trả về giá trị hàng khác với giá trị ban đầu củanewThay đổi hàng sẽ được chèn hoặc cập nhật. Do đó, nếu hàm kích kèo bóng đá pháp muốn hành động kích kèo bóng đá pháp thành công bình thường mà không làm thay đổi giá trị hàng,mới(hoặc một giá trị bằng nhau) phải được trả về. Để thay đổi hàng cần được lưu trữ, có thể thay thế các giá trị đơn trực tiếp trongmớivà trả về sửa đổimớihoặc để xây dựng một bản ghi/hàng mới hoàn chỉnh để trả lại. Trong trường hợp trước kích kèo bóng đá pháp trênXóa, giá trị trả về không có hiệu lực trực tiếp, nhưng nó phải không được cho phép hành động kích kèo bóng đá pháp được tiến hành. Lưu ý rằngmớilà null trongXóaTriggers, vì vậy việc trả lại thường không hợp lý. Thành ngữ thông thường trongXóaTriggers sẽ trở lạicũ.
thay vìTriggers (luôn luôn là các kích kèo bóng đá pháp cấp độ hàng và chỉ có thể được sử dụng trên các lượt xem) có thể trả lại NULL để báo hiệu rằng chúng không thực hiện bất kỳ bản cập nhật nào và phần còn lại của kèo bóng đá pháp động cho hàng không được đưa vàoChèn/Cập nhật/Xóa). Nếu không, một giá trị không phải sẽ được trả về, để báo hiệu rằng bộ kích kèo bóng đá pháp đã thực hiện thao tác được yêu cầu. VìChènvàCập nhậtkèo bóng đá pháp động, giá trị trả về phải làmới, mà hàm kích kèo bóng đá pháp có thể sửa đổi để hỗ trợChèn trả vềvàCập nhật trả về(Điều này cũng sẽ ảnh hưởng đến giá trị hàng được truyền cho bất kỳ bộ kích kèo bóng đá pháp nào sau đó hoặc được chuyển cho một đặc biệtđược loại trừTài liệu tham khảo bí danh trong mộtChènTuyên bố với17704_17727mệnh đề). VìXóakèo bóng đá pháp động, giá trị trả về phải làcũ.
Giá trị trả về của bộ kích kèo bóng đá pháp cấp hàngsauhoặc kích kèo bóng đá pháp cấp độ tuyên bốtrướchoặcsauluôn bị bỏ qua; Nó cũng có thể là NULL. Tuy nhiên, bất kỳ loại kích kèo bóng đá pháp nào vẫn có thể hủy bỏ toàn bộ kèo bóng đá pháp động bằng cách gây ra lỗi.
Ví dụ 41-3Hiển thị một ví dụ về quy trình kích kèo bóng đá pháp trongPL/PGSQL.
Ví dụ 41-3. MỘTPL/PGSQLQuy trình kích kèo bóng đá pháp
18526_18758
Tạo bảng EMP ( văn bản empname, Số nguyên tiền lương, Last_date Dấu thời gian, Last_user văn bản ); Tạo chức năng Emp_Stamp () trả về Trigger như $ EMP_STAMP $ BẮT ĐẦU - Kiểm tra xem empname và tiền lương được đưa ra Nếu new.empname là null thì Nâng cao ngoại lệ 'Empname không thể là NULL'; Kết thúc nếu; Nếu new.salary là null thì Tăng ngoại lệ '% không thể có tiền lương null', new.empname; Kết thúc nếu; - Ai làm việc cho chúng tôi khi họ phải trả tiền cho nó? Nếu mới.Salary <0 thì Tăng ngoại lệ '% không thể có mức lương âm', new.empname; Kết thúc nếu; - Hãy nhớ ai đã thay đổi bảng lương khi New.last_date: = current_timestamp; New.last_user: = current_user; Trả lại mới; KẾT THÚC; $ emp_stamp $ ngôn ngữ plpgsql; Tạo Trigger EMP_Stamp trước khi chèn hoặc cập nhật trên EMP Đối với mỗi hàng thực thi quy kèo bóng đá pháp emp_stamp ();
Một cách khác để ghi lại các thay đổi vào bảng liên quan đến việc tạo một bảng mới giữ một hàng cho mỗi lần chèn, cập nhật hoặc xóa xảy ra. Cách tiếp cận này có thể được coi là kiểm toán thay đổi trên bảng.Ví dụ 41-4Hiển thị ví dụ về quy trình kích kèo bóng đá pháp kiểm toán trongPL/PGSQL.
Ví dụ 41-4. MỘTPL/PGSQLQuy trình kích kèo bóng đá pháp để kiểm toán
Ví dụ này kích kèo bóng đá pháp đảm bảo rằng mọi chèn, cập nhật hoặc xóa một hàng trong20413_2041820421_20465EMP_AUDITBảng. Tên người dùng và thời gian hiện tại được đóng dấu vào hàng, cùng với loại kèo bóng đá pháp động được thực hiện trên đó.
20647_21851
Một biến thể của ví dụ trước sử dụng chế độ xem tham gia bảng chính vào bảng kiểm toán, để hiển thị khi mỗi mục được sửa đổi lần cuối. Cách tiếp cận này vẫn ghi lại sự thay đổi kiểm toán đầy đủ của bảng, nhưng cũng kèo bóng đá pháp bày một cái nhìn đơn giản về dấu vết kiểm toán, chỉ hiển thị dấu thời gian được sửa đổi cuối cùng có nguồn gốc từ đường mòn kiểm toán cho mỗi mục.Ví dụ 41-5Hiển thị ví dụ về kích kèo bóng đá pháp kiểm toán trên chế độ xem trongPL/PGSQL.
Ví dụ 41-5. MỘTPL/PGSQLXem quy trình kích kèo bóng đá pháp để kiểm toán
Ví dụ này sử dụng trình kích kèo bóng đá pháp trên chế độ xem để làm cho nó có thể cập nhật và đảm bảo rằng bất kỳ chèn, cập nhật hoặc xóa hàng nào trong chế độ xem được ghi lại (tức là, được kiểm toán) trongEMP_AUDITBảng. Thời gian hiện tại và tên người dùng được ghi lại, cùng với loại kèo bóng đá pháp động được thực hiện và chế độ xem hiển thị thời gian sửa đổi cuối cùng của mỗi hàng.
23004_24702
Một cách sử dụng các yếu tố kích kèo bóng đá pháp là duy trì bảng tóm tắt của một bảng khác. Tóm tắt kết quả có thể được sử dụng thay cho bảng gốc cho các truy vấn nhất định - thường là với thời gian chạy giảm rất nhiều. Kỹ thuật này thường được sử dụng trong kho dữ liệu, trong đó các bảng dữ liệu được đo hoặc quan sát (được gọi là bảng thực tế) có thể cực kỳ lớn.Ví dụ 41-6Hiển thị một ví dụ về quy trình kích kèo bóng đá pháp trongPL/PGSQLduy trì bảng tóm tắt cho bảng thực tế trong kho dữ liệu.
PL/PGSQLcó thể được sử dụng để xác địnhPostgreSQL: Tài liệu: 9.6: Trình. PostgreSQLYêu cầu rằng một quy trình được gọi là kích kèo bóng đá pháp sự kiện phải được khai báo là một hàm không có đối số và loại trả về củaevent_trigger.
Khi APL/PGSQLHàm được gọi là kích kèo bóng đá pháp sự kiện, một số biến đặc biệt được tạo tự động trong khối cấp cao nhất. Họ là:
Kiểu dữ liệuText; Một chuỗi đại diện cho sự kiện Trình kích kèo bóng đá pháp được kích kèo bóng đá pháp.
Kiểu dữ liệuText; Biến chứa thẻ lệnh mà kích kèo bóng đá pháp được kích kèo bóng đá pháp.
Ví dụ 41-7Hiển thị ví dụ về quy trình kích kèo bóng đá pháp sự kiện trongPL/PGSQL.
Ví dụ 41-7. MỘTPL/PGSQLQuy trình kích kèo bóng đá pháp sự kiện
Ví dụ này kích kèo bóng đá pháp chỉ đơn giản là tăngThông báoTin nhắn mỗi khi lệnh được hỗ trợ được thực hiện.
Tạo hoặc thay thế hàm snitch () trả về event_trigger dưới dạng $$ BẮT ĐẦU Nâng cao thông báo 'snitch: % %', tg_event, tg_tag; KẾT THÚC; $$ Ngôn ngữ plpgsql; Tạo sự kiện kích kèo bóng đá pháp Snitch trên DDL_Command_Start Thủ tục thực thi Snitch ();