Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

38.9. Quy trình kích kèo bóng đá c1

PL/PGSQLcó thể được sử dụng để Xác định quy trình kích kèo bóng đá c1. Một quy trình kích kèo bóng đá c1 được tạo bằng TheTạ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. Lưu ý rằng chức năng phải tuyên bố không có tranh luận ngay cả khi nó dự kiến ​​sẽ nhận được Đối số được chỉ định trongTạo Trigger- Đối số kích kèo bóng đá c1 được truyền quaTG_ARGV, như được mô tả bên dưới.

Khi APL/PGSQLHàm là được gọi là một trình kích kèo bóng đá c1, một số biến đặc biệt được tạo tự động trong khối cấp cao nhất. Họ là:

mới

Kiểu dữ liệuRecord; giữ biến Hàng cơ sở dữ liệu mới choChèn/Cập nhậtkèo bóng đá c1 động trong các kích kèo bóng đá c1 cấp độ hàng. Biến này lànullTrong cấp độ tuyên bố kích kèo bóng đá c1.

12163_12168

Kiểu dữ liệuRecord; giữ biến Hàng cơ sở dữ liệu cũ choCập nhật/Xóakèo bóng đá c1 động trong các kích kèo bóng đá c1 cấp độ hàng. Biến này lànullTrong cấp độ tuyên bố kích kèo bóng đá c1.

TG_NAME

Kiểu dữ liệutên; biến mà chứa tên của bộ kích kèo bóng đá c1 thực sự bị bắn.

tg_when

Kiểu dữ liệuText; một chuỗi củatrướchoặcsauTùy thuộc vào bộ kích kèo bóng đá c1 sự định nghĩa.

TG_LEVEL

Kiểu dữ liệuText; một chuỗi củahànghoặccâu lệnhTùy thuộc vào bộ kích kèo bóng đá c1 sự định nghĩa.

TG_OP

Kiểu dữ liệuText; một chuỗiChèn, Cập nhậthoặcXóaKể cho kèo bóng đá c1 động nào đã kích kèo bóng đá c1.

TG_RELID

Kiểu dữ liệuoid; ID đối tượng của bảng gây ra lời mời kích kèo bóng đá c1.

TG_RELNAME

Kiểu dữ liệutên; tên của Bảng gây ra lời cầu xin kích kèo bóng đá c1. Đây là bây giờ Khấu hao, 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 đó.

TG_TABLE_NAME

14177_14189tên; tên của bảng gây ra lời mời kích kèo bóng đá c1.

tg_table_schema

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 đá c1.

TG_NARGS

Kiểu dữ liệuSố nguyên; số lượng của Các đối số được đưa ra cho quy trình kích kèo bóng đá c1 trongTạo Triggercâu lệnh.

TG_ARGV []

mảng kiểu dữ liệu củaText; các Đối số từTạo TriggerTuyên bố. Chỉ số được tính từ 0. Chỉ số không hợp lệ (ít hơn 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 đá c1 phải trả về15241_15247hoặc giá trị bản ghi/hàng có chính xác Cấu trúc của bảng Trình kích kèo bóng đá c1 đã được bắn cho.

Trình kích kèo bóng đá c1 cấp hàng đã bắntrước15410_15562Chè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 đá c1 động tiến hành với giá trị hàng đó. Trả lại giá trị hàng khác với giá trị ban đầu củamớiThay đổi hàng sẽ được chèn hoặc cập nhật (nhưng không có Hiệu ứng trực tiếp trongXóatrường hợp). ĐẾN thay đổi hàng cần lưu trữ, có thể thay thế một Giá trị trực tiếp trongmớivà trả về Đã sửa đổinewhoặc để xây dựng một cái mới hoàn chỉnh Ghi lại/ROW để trả về.

Giá trị trả về của AtrướchoặcsauTrình kích kèo bóng đá c1 cấp độ tuyên bố hoặcsau16372_16543

Ví dụ 38-2Hiển thị một ví dụ về quy trình kích kèo bóng đá c1 trongPL/PGSQL.

Ví dụ 38-2. MỘTPL/PGSQLQuy trình kích kèo bóng đá c1

Ví dụ này kích kèo bóng đá c1 đảm bảo rằng bất cứ khi nào một hàng được chèn hoặc được cập nhật trong bảng, tên người dùng và thời gian hiện tại là đóng dấu vào hàng. Và nó kiểm tra xem tên của một nhân viên là đã cho và mức lương là một giá trị dương.

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 cô ấy 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 đá c1 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 cái mới bảng giữ một hàng cho mỗi lần chèn, cập nhật hoặc xóa nó xảy ra. Cách tiếp cận này có thể được coi là kiểm toán thay đổi bàn.Ví dụ 38-3Hiển thị ví dụ về quy trình kích kèo bóng đá c1 kiểm toán trongPL/PGSQL.

Ví dụ 38-3. MỘTPL/PGSQLQuy trình kích kèo bóng đá c1 cho Kiểm toán

Ví dụ này kích kèo bóng đá c1 đảm bảo rằng mọi chèn, cập nhật hoặc Xóa một hàng trongEMPBảng là đã ghi (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 đóng dấu vào hàng, cùng với loại kèo bóng đá c1 động đã thực hiện trên nó.

Tạo bảng EMP (
    Empname văn bản không phải null,
    Số nguyên lương
);

Tạo bảng emp_audit ( 
    kèo bóng đá c1 động Char (1) không phải NULL,
    dấu thời gian tem không phải null,
    văn bản userid không null,
    Empname văn bản không phải null,
    Số nguyên lương
);

Tạo hoặc thay thế chức năng process_emp_audit () trả về Trigger như $ emp_audit $
    BẮT ĐẦU
        -
        - Tạo một hàng trong EMP_Audit để phản ánh kèo bóng đá c1 động được thực hiện trên EMP,
        - Sử dụng biến đặc biệt TG_OP để thực hiện thao tác.
        -
        If (tg_op = 'xóa') thì
            Chèn vào emp_audit Chọn 'd', bây giờ (), người dùng, cũ.*;
            Trả lại cũ;
        Elsif (tg_op = 'cập nhật') sau đó
            Chèn vào emp_audit Chọn 'u', bây giờ (), người dùng, mới.*;
            Trả lại mới;
        Elsif (tg_op = 'chèn') sau đó
            Chèn vào emp_audit Chọn 'i', bây giờ (), người dùng, mới.*;
            Trả lại mới;
        Kết thúc nếu;
        Trả lại null; - Kết quả bị bỏ qua vì đây là một kích kèo bóng đá c1 sau
    KẾT THÚC;
$ emp_audit $ ngôn ngữ plpgsql;

Tạo Trigger EMP_AUDIT
Sau khi chèn hoặc cập nhật hoặc xóa trên EMP
    Đối với mỗi hàng thực thi quy trình quy trình_emp_audit ();

Một cách sử dụng kích kèo bóng đá c1 là duy trì bảng tóm tắt của người khác bàn. Tóm tắt kết quả có thể được sử dụng thay cho bản gốc Bảng cho các truy vấn nhất định - thường 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 đo hoặc quan sát (được gọi là bảng thực tế) có thể là cực kỳ lớn.Ví dụ 38-4Hiển thị ví dụ về quy trình kích kèo bóng đá c1 trongPL/PGSQLduy trì bảng tóm tắt cho một bảng thực tế trong kho dữ liệu.

Ví dụ 38-4. MỘTPL/PGSQLQuy trình kích kèo bóng đá c1 để duy trì Một bảng tóm tắt

lược đồ chi tiết ở đây một phần dựa trênCửa hàng tạp hóaVí dụ từKho dữ liệu Bộ công cụbởi Ralph Kimball.

21494_26024