Postgresql 7.4.30 Tài liệu | ||||
---|---|---|---|---|
prev | Backward nhanh | Chương 37.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 kèo bóng đá pháp trong Phần kèo bóng đá pháp 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 kèo bóng đá pháp là một biến số nguyên.)
PL/PGSQLBiến có thể có Bất kỳ kèo bóng đá pháp dữ liệu SQL nào, chẳng hạn nhưSố nguyên, VarcharvàChar.
Dưới đây là một số ví dụ về kèo bóng đá pháp biến:
Số nguyên user_id; số lượng số (5); url varchar; Tên tablename myrow%RowType; myfield tablename.columnname%kèo bóng đá pháp; Bản ghi AROW;
Cú pháp chung của kèo bóng đá pháp biến là:
tên[hằng số]kèo bóng đá pháp[không null] [Mặc định | : =Biểu thức ];
Themặc địnhmệ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 không tồn tại được gán cho, để giá trị kèo bóng đá pháp nó không đổi trong thời gian kèo bóng đá pháp 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 kèo bóng đá pháp làkhông nullPhải có giá trị mặc định không toàn được chỉ định.
Giá trị mặc định được đánh giá mỗi khi khối là nhập. Vì vậy, ví dụ, gán'bây giờ'đến một biến của kèo bóng đá phápDấu thời giankhiến biến có thời gian kèo bóng đá pháp 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;
tênbí danh cho $n;
tham số được truyền cho các 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 kèo bóng đá pháp 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ố. Một số ví dụ:
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; Tạo chức năng (varchar, số nguyên) trả về số nguyên là ' TUYÊN BỐ Bí danh V_String với giá $ 1; Chỉ số bí danh với giá $ 2; BẮT ĐẦU - Một số tính toán ở đây KẾT THÚC; 'Ngôn ngữ plpgsql; Tạo chức năng Concat_Selected_Fields (TableName) Trả về văn bản là ' TUYÊN BỐ bí danh in_t với giá $ 1; BẮT ĐẦU Trả lại in_t.f1 || in_t.f3 || in_t.f5 || in_t.f7; KẾT THÚC; 'Ngôn ngữ plpgsql;
Khi kèo bóng đá pháp trả về của APL/PGSQLchức năng được kèo bóng đá pháp là A loại đa hình (AnyEuityhoặcAnyArray), một tham số đặc biệt$ 0được tạo. Kiểu dữ liệu của nó là thực tế Trả về kèo bóng đá pháp chức năng, như được suy ra từ đầu vào thực tế các kèo bóng đá pháp (xemPhần 33.2.5). Điều này cho phép chức năng truy cập thực tế của nó Trả về kèo bóng đá pháp như thể hiện trongPhần 37.4.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 một bí danh. Vì Ví dụ, chức năng này hoạt động trên bất kỳ kèo bóng đá pháp dữ liệu nào có+toán tử:
15215_15505
biến%kèo bóng đá pháp
%kèo bóng đá phápCung 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 để kèo bóng đá pháp 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 kèo bóng đá pháp bạnngười dùngBảng. Để kèo bóng đá pháp một biến với cùng loại dữ liệu vớiuser.user_idbạn viết:
user_id users.user_id%type;
bằng cách sử dụng%kèo bóng đá phápBạn không cần biết kèo bóng đá pháp dữ liệu của cấu trúc bạn đang tham khảo và Quan trọng nhất, nếu kèo bóng đá pháp dữ liệu của mục được tham chiếu các thay đổi trong tương lai (ví dụ: bạn thay đổi kèo bóng đá phápuser_idtừSố nguyênđếnReal), bạn có thể không cần thay đổi định nghĩa chức năng kèo bóng đá pháp bạn.
%kèo bóng đá phápđặc biệt có giá trị trong các hàm đa hình, vì các kèo bóng đá pháp dữ liệu cần thiết cho nội bộ Các biến có thể thay đổi từ cuộc gọi này sang cuộc gọi tiếp theo. Phù hợp Các biến có thể được tạo bằng cách áp dụng%kèo bóng đá phápĐối với các đối số hoặc kết quả kèo bóng đá pháp hàm Người giữ chỗ.
tên Table_Name%RowType;tên composite_type_name;
Một biến của kèo bóng đá pháp tổng hợp được gọi làhàngBiến (hoặckèo bóng đá pháp hàngBiến). Một biến như vậy có thể giữ một toàn bộ hàng kèo bóng đá pháp mộtChọnhoặcchoKết quả truy vấn, miễn là cột của truy vấn đó Đặt phù hợp với loại được kèo bóng đá pháp của biến. Cá nhân Các trường của giá trị hàng được truy cập bằng dấu chấm thông thường ký hiệu, ví dụRowvar.field.
Một biến hàng có thể được kèo bóng đá pháp 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 một kèo bóng đá pháp tổng hợp. (Vì mỗi bàn đều có kèo bóng đá pháp tổng hợp liên kết của cùng một tên, nó thực sự Không quan trọng trongPostgreSQLCho dù bạn viết%RowTypehay không. Nhưng biểu mẫu với%RowTypelà nhiều hơn cầm tay.)
tham số cho một hàm có thể là các kèo bóng đá pháp tổng hợp (hoàn thành Hàng bảng). Trong trường hợp đó, định danh tương ứng$nsẽ là một 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 một biến kèo bóng đá pháp 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ừ một 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 kèo bóng đá pháp dữ liệu chẳng hạn nhưchar (n).
Đây là một ví dụ về việc sử dụng các kèo bóng đá pháp tổng hợp:
Tạo chức năng sử dụng_two_tables (TableName) Trả về văn bản là ' TUYÊN BỐ bí danh in_t với giá $ 1; sử dụng_t bảng2Name%RowType; BẮT ĐẦU Chọn * vào uses_t từ bảng2Name trong đó ...; Trả lại in_t.f1 || use_t.f3 || in_t.f5 || use_t.f7; KẾT THÚC; 'Ngôn ngữ plpgsql;
tênRecord;
Biến bản ghi tương tự như các biến kèo bóng đá pháp 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 mộtChọnhoặccholệnh. Cấu trúc kèo bóng đá pháp biến bản ghi có thể thay đổi mỗi khi nó được gán cho. Hậu quả kèo bóng đá pháp điều này là cho đến khi một 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 một 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ự kèo bóng đá pháp, chỉ là một người giữ chỗ. Người ta cũng nên nhận ra rằng khi APL/PGSQLHàm được kèo bóng đá pháp để trả về loạiRecord, Điều này không hoàn toàn Khái niệm tương tự như một biến kỷ lục, mặc dù một Chức năng cũng có thể sử dụng một biến hồ sơ để giữ kết quả kèo bóng đá pháp 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 một 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 kèo bóng đá pháp 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 kèo bóng đá pháp một biến, bản ghi hoặc hàng. Đây là chủ yếu là hữu ích nếumớihoặccũnên được tham chiếu bằng tên khác bên trong một 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 các cách sử dụng thực tế kèo bóng đá phápĐổi tên.