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 kèo bóng đá hôm nay và ngày mai được sử dụng trongPL/PGSQLCâu lệnh được xử lý bằng cách sử dụng Máy chủ thông thườngSQLNgười thực thi. Các kèo bóng đá hôm nay và ngày mai dường như chứa hằng số trên thực tế có thể yêu cầu Đánh giá thời gian chạy (ví dụ:'bây giờ'chodấu thời gianLoại) Vì vậy, không thể choPL/PGSQLtrình phân tích cú pháp để xác định Real kèo bóng đá hôm nay và ngày mai giá trị không đổi khác với từ khóanull. Tất cả các kèo bóng đá hôm nay và ngày mai được đánh giá nội bộ bằng cách thực hiện một truy vấn
Chọnkèo bóng đá hôm nay và ngày mai
Sử dụngSPITrình quản lý. Vì Đánh giá, sự xuất hiện củaPL/PGSQLĐịnh danh biến được thay thế bởi kèo bóng đá hôm nay và ngày mai tham số và kèo bóng đá hôm nay và ngày mai giá trị thực từ kèo bóng đá hôm nay và ngày mai biến là được chuyển cho người thực thi trong mảng tham số. Điều này cho phép Kế hoạch truy vấn choChọnĐược chuẩn bị Chỉ một lần và sau đó được sử dụng lại cho kèo bóng đá hôm nay và ngày mai đánh giá tiếp theo.
Đánh giá được thực hiện bởiPostgreSQLtrình phân tích cú pháp chính có một số tác dụng phụ Về việc giải thích kèo bóng đá hôm nay và ngày mai giá trị không đổi. Chi tiết có một Sự khác biệt giữa những gì hai chức năng này làm:
Tạo hàm logfunc1 (văn bản) Trả về dấu thời gian là ' TUYÊN BỐ Bí danh logtxt với giá $ 1; BẮT ĐẦU Chèn vào kèo bóng đá hôm nay và ngày mai giá trị logtable (logtxt, '' now ''); Trả lại '' bây giờ ''; KẾT THÚC; 'Ngôn ngữ plpgsql;
và
Tạo hàm logfunc2 (văn bản) Trả về dấu thời gian là ' TUYÊN BỐ Bí danh logtxt với giá $ 1; Dấu thời gian Curtime; BẮT ĐẦU Curtime: = '' Bây giờ ''; Chèn vào kèo bóng đá hôm nay và ngày mai giá trị logtable (logtxt, curtime); Trả lại thời gian; KẾT THÚC; 'Ngôn ngữ plpgsql;
Trong trường hợplogfunc1
, ThePostgreSQLTrình phân tích cú pháp chính biết
Khi chuẩn bị kế hoạch choChèn,,
Đó là chuỗi'bây giờ'nên được
được giải thích làDấu thời gianVì mục tiêu
Cột củalogtable
là của điều đó
kiểu. Do đó, nó sẽ tạo ra một hằng số từ nó vào thời điểm này và điều này
Giá trị không đổi sau đó được sử dụng trong tất cả kèo bóng đá hôm nay và ngày mai yêu cầu của13120_13130
Trong suốt vòng đời của phiên.
Không cần phải nói rằng đây không phải là điều mà lập trình viên muốn.
Trong trường hợplogfunc2
, ThePostgreSQLtrình phân tích cú pháp chính không
Biết loại nào'bây giờ'nên trở thành và
Do đó, nó trả về giá trị dữ liệu của loạiTextChứa chuỗiBây giờ. Trong quá trình phân công tiếp theo cho địa phương
biếncurtime, ThePL/PGSQLPhiên dịch chuyển chuỗi này để
Thedấu thời gianLoại bằng cách gọiText_out
vàTimestamp_in
Hàm cho chuyển đổi. Vì thế,
Dấu thời gian được tính toán được cập nhật trên mỗi lần thực thi là
lập trình viên mong đợi.
Bản chất có thể thay đổi của các biến bản ghi thể hiện một vấn đề trong kết nối này. Khi các trường của biến bản ghi được sử dụng trong kèo bóng đá hôm nay và ngày mai hoặc câu lệnh, các loại dữ liệu của các trường không được thay đổi giữa các cuộc gọi của một và cùng một kèo bóng đá hôm nay và ngày mai, vì kèo bóng đá hôm nay và ngày mai sẽ được lên kế hoạch bằng cách sử dụng kiểu dữ liệu có mặt Khi kèo bóng đá hôm nay và ngày mai được đạt đến lần đầu tiên. Hãy ghi nhớ điều này khi Viết các quy trình kích hoạt xử lý các sự kiện cho nhiều hơn một bàn. (thực thicó thể được sử dụng để có được xung quanh vấn đề này khi cần thiết.)