Postgresql 8.4.22 Tài liệu | ||||
---|---|---|---|---|
prev | Backward nhanh | Chương 38.PL/PGSQL - SQLNgôn ngữ thủ tục | Chuyển tiếp nhanh | Tiếp theo |
Tất cả các biến được sử dụng trong một khối phải được soi kèo bóng đá truoctran trong Phần soi kèo bóng đá truoctran của khối. (Ngoại lệ duy nhất là Biến vòng của AchoVòng lặp Lặp lại trên một loạt các giá trị số nguyên được tự động được soi kèo bóng đá truoctran là một biến số nguyên, và tương tự như là biến vòng lặp của AchoVòng lặp lặp lại trên con trỏ Kết quả được tự động soi kèo bóng đá truoctran là biến bản ghi.)
PL/PGSQLBiến có thể có Bất kỳ loại dữ liệu SQL nào, chẳng hạn nhưSố nguyên, Varcharvàchar.
Đây là một số ví dụ về soi kèo bóng đá truoctran biến:
Số nguyên user_id; số lượng số (5); url varchar; Tên tablename myrow%RowType; myfield tablename.columnname%Loại; Bản ghi AROW;
Cú pháp chung của soi kèo bóng đá truoctran biến là:
tên[hằng số]loại[không null] [11866_11886expression ];
The11975_11984mệnh đề, nếu được đưa ra, Chỉ định giá trị ban đầu được gán cho biến khi Khối được nhập. Nếumặc địnhmệnh đề không được đưa ra thì biến được khởi tạo thànhSQLgiá trị null. Thehằng sốTùy chọn ngăn biến được gán cho, để giá trị của nó không đổi trong thời gian của khối. Nếu nhưkhông nullđược chỉ định, Việc gán giá trị null dẫn đến lỗi thời gian chạy. Tất cả các biến được soi kèo bóng đá truoctran làkhông nullPhải có giá trị mặc định không toàn được chỉ định.
Giá trị mặc định của soi kèo bóng đá truoctran biến được đánh giá và gán cho Biến mỗi lần nhập khối (không chỉ soi kèo bóng đá truoctran lần mỗi cuộc gọi chức năng). Vì vậy, ví dụ, gánbây giờ ()đến soi kèo bóng đá truoctran biến của loạiDấu thời giankhiến biến có thời gian của Gọi chức năng hiện tại, không phải lúc mà hàm là được tổng hợp.
Ví dụ:
Số nguyên số lượng mặc định 32; url varchar: = 'http://mysite.com'; user_id integer hằng số: = 10;
tham số được truyền cho soi kèo bóng đá truoctran chức năng được đặt tên với nhận dạng$ 1, $ 2, v.v. Tùy chọn, các bí danh có thể được soi kèo bóng đá truoctran cho$nTên tham số để tăng khả năng đọc. Bí danh hoặc Mã định danh số sau đó có thể được sử dụng để tham khảo giá trị tham số.
Có hai cách để tạo ra soi kèo bóng đá truoctran bí danh. Cách ưa thích là để đặt tên cho tham số trongtạo chức năngLệnh, ví dụ:
13962_14085
theo cách khác, đó là cách duy nhất có sẵn trướcPostgreSQL8.0, là tuyên bố rõ ràng một bí danh, sử dụng cú pháp soi kèo bóng đá truoctran
tênbí danh cho $n;
Ví dụ tương tự trong kiểu này trông giống như:
Tạo chức năng sales_tax (real) Trả về thực là $$ TUYÊN BỐ Bí danh phụ với $ 1; BẮT ĐẦU Trả lại phụ * 0,06; KẾT THÚC; $$ ngôn ngữ plpgsql;
Lưu ý:Hai ví dụ này không hoàn hảo tương đương. Trong trường hợp đầu tiên,Subtotalcó thể được tham chiếu làsales_tax.subtotal, nhưng trong trường hợp thứ hai nó không thể. (Chúng tôi đã đính kèm soi kèo bóng đá truoctran nhãn vào khối,Subtotalcó thể đủ điều kiện với nhãn đó, thay vào đó.)
soi kèo bóng đá truoctran số ví dụ khác:
15192_15568
Khi APL/PGSQLHàm là được soi kèo bóng đá truoctran với các tham số đầu ra, các tham số đầu ra là được cho$ntên và bí danh tùy chọn chỉ trong giống như các tham số đầu vào bình thường. soi kèo bóng đá truoctran đầu ra Tham số có hiệu quả là soi kèo bóng đá truoctran biến bắt đầu null; Nó nên được gán cho trong quá trình thực hiện chức năng. Các Giá trị cuối cùng của tham số là những gì được trả về. Ví dụ, Ví dụ về thuế bán hàng cũng có thể được thực hiện theo cách này:
Tạo chức năng Sales_Tax (Subtotal Real, Out Tax Real) là $$ BẮT ĐẦU Thuế: = Subtotal * 0,06; KẾT THÚC; $$ ngôn ngữ plpgsql;
Lưu ý rằng chúng tôi đã bỏ quaTrả về Real- Chúng tôi có thể đã bao gồm nó, nhưng nó sẽ là dự phòng.
tham số đầu ra hữu ích nhất khi trả về nhiều giá trị. soi kèo bóng đá truoctran ví dụ tầm thường là:
16564_16713
Như đã thảo luận trongPhần 34.4.3,, Điều này hiệu quả tạo ra soi kèo bóng đá truoctran loại bản ghi ẩn danh cho kết quả của chức năng. Nếu areturnmệnh đề được đưa ra, nó phải nóiTrả về ghi.
Một cách khác để soi kèo bóng đá truoctranPL/PGSQLHàm là vớiBẢNG TRẢ LẠI, ví dụ:
Tạo chức năng mở rộng_sales (p_itemno int) Retur BẮT ĐẦU Truy vấn trả về số lượng, số lượng * Giá từ bán hàng trong đó itemno = p_itemno; KẾT THÚC; $$ ngôn ngữ plpgsql;
Điều này hoàn toàn tương đương với việc soi kèo bóng đá truoctran một hoặc nhiềuouttham số và chỉ địnhreturn setofSomethype.
Khi loại trả về của APL/PGSQLchức năng được soi kèo bóng đá truoctran là A loại đa hình (AnyEuity, AnyArray, AnynonarrayhoặcAnyenum), soi kèo bóng đá truoctran tham số đặc biệt$ 0được tạo. Kiểu dữ liệu của nó là thực tế Trả về loại chức năng, như được suy ra từ đầu vào thực tế soi kèo bóng đá truoctran loại (xemPhần 34.2.5). Điều này cho phép chức năng truy cập thực tế của nó Trả về loại như thể hiện trongPhần 38.3.2. $ 0được khởi tạo thành NULL và có thể được sửa đổi bởi chức năng, vì vậy nó có thể được sử dụng để giữ giá trị trả về nếu muốn, mặc dù điều đó không bắt buộc.$ 0cũng có thể được đưa ra soi kèo bóng đá truoctran bí danh. Vì Ví dụ, chức năng này hoạt động trên bất kỳ loại dữ liệu nào có+18683_18695
18730_18948
Có thể có hiệu ứng tương tự bằng cách soi kèo bóng đá truoctran một hoặc nhiều đầu ra Thông số như các loại đa hình. Trong trường hợp này là đặc biệt$ 0tham số không được sử dụng; đầu ra Các thông số tự phục vụ cùng soi kèo bóng đá truoctran mục đích. Ví dụ:
Tạo chức năng add_three_values (v1 anyelement, v2 anyEuity Ra sum anyelement) Như $$ BẮT ĐẦU tổng: = v1 + v2 + v3; KẾT THÚC; $$ ngôn ngữ plpgsql;
biến%loại
%loạiCung cấp loại dữ liệu của A biến hoặc cột bảng. Bạn có thể sử dụng điều này để soi kèo bóng đá truoctran các biến Điều đó sẽ giữ các giá trị cơ sở dữ liệu. Ví dụ: giả sử bạn có một cột có tênuser_idTrong của bạnNgười dùngBảng. Để soi kèo bóng đá truoctran một biến với cùng loại dữ liệu vớiuser.user_idbạn viết:
user_id user.user_id%type;
bằng cách sử dụng%loạiBạn không cần biết loại dữ liệu của cấu trúc bạn đang tham khảo và Quan trọng nhất, nếu loại dữ liệu của mục được tham chiếu soi kèo bóng đá truoctran thay đổi trong tương lai (ví dụ: bạn thay đổi loạiuser_idtừSố nguyênđếnReal), bạn có thể không cần thay đổi định nghĩa chức năng của bạn.
%loạiđặc biệt có giá trị trong soi kèo bóng đá truoctran hàm đa hình, vì soi kèo bóng đá truoctran loại dữ liệu cần thiết cho nội bộ soi kèo bóng đá truoctran biến có thể thay đổi từ cuộc gọi này sang cuộc gọi tiếp theo. Phù hợp soi kèo bóng đá truoctran biến có thể được tạo bằng cách áp dụng%loạiĐối với soi kèo bóng đá truoctran đối số hoặc kết quả của hàm Người giữ chỗ.
tên Table_Name%RowType;tên composite_type_name;
soi kèo bóng đá truoctran biến của loại tổng hợp được gọi làhàngbiến (hoặcloại hàngBiến). soi kèo bóng đá truoctran biến như vậy có thể giữ soi kèo bóng đá truoctran toàn bộ hàng của soi kèo bóng đá truoctranChọnhoặccho21595_21796Rowvar.field.
Một biến hàng có thể được soi kèo bóng đá truoctran có cùng loại với hàng của một bảng hoặc chế độ xem hiện có, bằng cách sử dụngTable_Name%RowTypeKý hiệu; hoặc nó có thể được tuyên bố bởi Đặt tên của soi kèo bóng đá truoctran loại tổng hợp. (Vì mỗi bàn đều có loại tổng hợp liên kết của cùng soi kèo bóng đá truoctran tên, nó thực sự Không quan trọng trongPostgreSQLCho dù bạn viết%RowTypehoặc không. Nhưng biểu mẫu với%RowTypelà nhiều hơn cầm tay.)
22427_22551$nsẽ là soi kèo bóng đá truoctran biến hàng và các trường có thể được chọn từ nó, cho ví dụ$ 1.USER_ID.
Chỉ các cột do người dùng định nghĩa Trong soi kèo bóng đá truoctran biến loại hàng, không phải các cột OID hoặc các cột hệ thống khác (Bởi vì hàng có thể là từ soi kèo bóng đá truoctran chế độ xem). Các trường của hàng Nhập kế thừa kích thước trường của bảng hoặc độ chính xác cho các loại dữ liệu chẳng hạn nhưchar (n).
Đây là soi kèo bóng đá truoctran ví dụ về việc sử dụng các loại tổng hợp.Bảng1vàBảng2soi kèo bóng đá truoctran bảng hiện có có ít nhất soi kèo bóng đá truoctran trường được đề cập:
Tạo chức năng Merge_Fields (T_Row Bảng1) Trả về văn bản dưới dạng $$ TUYÊN BỐ T2_ROW Bảng2%RowType; BẮT ĐẦU Chọn * vào T2_row từ Bảng2 trong đó ...; Trả về t_row.f1 || T2_ROW.F3 || t_row.f5 || t2_row.f7; KẾT THÚC; $$ Ngôn ngữ plpgsql; Chọn Merge_fields (t.*) Từ Bảng1 t trong đó ...;
tênRecord;
Biến bản ghi tương tự như các biến loại hàng, nhưng chúng không có cấu trúc được xác định trước. Họ đảm nhận hàng thực tế cấu trúc của hàng chúng được gán trong soi kèo bóng đá truoctranChọnhoặcchoLệnh. Cấu trúc của biến bản ghi có thể thay đổi mỗi khi nó được gán cho. Hậu quả của điều này là cho đến khi soi kèo bóng đá truoctran kỷ lục Biến được gán đầu tiên cho, nó không có cấu trúc phụ và bất kỳ Cố gắng truy cập soi kèo bóng đá truoctran trường trong đó sẽ vẽ lỗi thời gian chạy.
Lưu ý rằngRecordkhông phải là dữ liệu thực sự Loại, chỉ là soi kèo bóng đá truoctran người giữ chỗ. Người ta cũng nên nhận ra rằng khi APL/PGSQLHàm được soi kèo bóng đá truoctran để trả về loạiRecord, Điều này không hoàn toàn Khái niệm tương tự như soi kèo bóng đá truoctran biến kỷ lục, mặc dù soi kèo bóng đá truoctran Chức năng có thể sử dụng soi kèo bóng đá truoctran biến hồ sơ để giữ kết quả của nó. TRONG Cả hai trường hợp, cấu trúc hàng thực tế không rõ khi chức năng được viết, nhưng cho soi kèo bóng đá truoctran chức năng trả vềRecordcấu trúc thực tế được xác định khi Truy vấn gọi được phân tích cú pháp, trong khi biến bản ghi có thể thay đổi Cấu trúc hàng của nó trên đường bay.
Đổi tênOldNameđếnnewName;
Sử dụngĐổi tênTuyên bố bạn có thể thay đổi tên của soi kèo bóng đá truoctran biến, bản ghi hoặc hàng. Đây là chủ yếu là hữu ích nếunewhoặccũnên được tham chiếu bằng tên khác bên trong soi kèo bóng đá truoctran thủ tục kích hoạt. Xem thêmbí danh.
Ví dụ:
Đổi tên ID thành user_id; Đổi tên này_var thành That_var;
Lưu ý: Đổi tênxuất hiện bị phá vỡ nhưPostgreSQL7.3. Khắc phục điều này là ưu tiên thấp, vìbí danhBao gồm hầu hết soi kèo bóng đá truoctran cách sử dụng thực tế củaĐổi tên.