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
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 kèo tỷ số bóng đá euro hôm nay trang chohiện tạiPhiên bản hoặc kèo tỷ số bóng đá euro hôm nay trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

38.10.kèo tỷ số bóng đá euro hôm naykèo tỷ số bóng đá euro hôm nay mui xe

Phần này thảo luận về kèo tỷ số bóng đá euro hôm nay số chi tiết thực hiện thường xuyên quan trọng đối vớikèo tỷ số bóng đá euro hôm nayNgười dùng để biết.

38.10.1. Thay thế biến

Khikèo tỷ số bóng đá euro hôm nayChuẩn bị a Câu lệnh hoặc biểu thức SQL để thực thi, bất kỳkèo tỷ số bóng đá euro hôm nayTên biến xuất hiện trong câu lệnh hoặc biểu thức được thay thế bằng ký hiệu tham số,$n. Giá trị hiện tại của biến sau đó được cung cấp kèo tỷ số bóng đá euro hôm nay dạng giá trị cho tham số bất cứ khi nào câu lệnh hoặc biểu thức là thực hiện. Ví dụ, hãy xem xét chức năng

Tạo hàm logfunc (văn bản logtxt) Trả về void kèo tỷ số bóng đá euro hôm nay dạng $$
    TUYÊN BỐ
        Dấu thời gian curtime: = bây giờ ();
    BẮT ĐẦU
        Chèn vào các giá trị logtable (logtxt, curtime);
    KẾT THÚC;
$$ ngôn ngữ plpgsql;

TheChènTuyên bố sẽ được xử lý kèo tỷ số bóng đá euro hôm nay cách hiệu quả là

Chuẩn bịstatement_name(văn bản, dấu thời gian) như
  Chèn vào các giá trị logtable ($ 1, $ 2);

Theo dõi trên mỗi lần thực hiện bởithực thiVới các giá trị thực tế hiện tại của Hai biến. (Lưu ý: Ở đây chúng ta đang nói về SQL chính động cơthực thilệnh, khôngkèo tỷ số bóng đá euro hôm nay'sthực thi.)

Sự thay thế cơ chế sẽ thay thế bất kỳ mã thông báo nào phù hợp với kèo tỷ số bóng đá euro hôm nay Tên của biến.Điều này đặt ra các bẫy khác nhau cho không hay. Ví dụ: sử dụng tên biến là xấu Điều đó giống như bất kỳ bảng hoặc tên cột nào mà bạn cần tham chiếu trong các truy vấn trong hàm, bởi vì những gì bạn Nghĩ là kèo tỷ số bóng đá euro hôm nay bảng hoặc tên cột vẫn sẽ được thay thế. Trong Ví dụ trên, giả sử rằnglogtablecó tên cộtlogtxtlogtimevà chúng tôi cố gắng viếtChènAS

12359_12435

Điều này sẽ được đưa vào trình phân tích cú pháp SQL chính là

Chèn vào giá trị logtable ($ 1, logtime) ($ 1, $ 2);

Kết quả là lỗi cú pháp như thế này:

Lỗi: Lỗi cú pháp tại hoặc gần "$ 1"
Dòng 1: Chèn vào giá trị logtable ($ 1, logtime) ($ 1, $ 2)
                               ^
Truy vấn: Chèn vào giá trị logtable ($ 1, logtime) ($ 1, $ 2)
Bối cảnh: Câu lệnh SQL trong chức năng kèo tỷ số bóng đá euro hôm nay "LogFunc2" Gần dòng 5

Ví dụ này khá dễ chẩn đoán, vì nó dẫn đến kèo tỷ số bóng đá euro hôm nay lỗi cú pháp rõ ràng. Khó khăn hơn nhiều là những trường hợp Thay thế được cho phép về mặt cú pháp, vì duy nhất Triệu chứng có thể là hành vi sai của chức năng. Trong kèo tỷ số bóng đá euro hôm nay trường hợp, người dùng đã viết kèo tỷ số bóng đá euro hôm nay cái gì đó như thế này:

13272_13428

Và tự hỏi tại sao tất cả các mục bảng của anh ấy dường như là vô hiệu. Của Tất nhiên những gì đã xảy ra ở đây là truy vấn đã trở thành

Chọn $ 1 từ bảng trong đó phím = $ 2

Và do đó, đó chỉ là kèo tỷ số bóng đá euro hôm nay cách chỉ địnhValgiá trị hiện tại của chính nó cho chính nó cho mỗi hàng.

kèo tỷ số bóng đá euro hôm nay quy tắc mã hóa thường được sử dụng để tránh các bẫy như vậy là Sử dụng kèo tỷ số bóng đá euro hôm nay quy ước đặt tên khác chokèo tỷ số bóng đá euro hôm nayBiến so với bạn sử dụng cho bảng và tên cột. Ví dụ: nếu tất cả các biến của bạn được đặt tênV_cái gì đóTrong khi không có bảng nào của bạn hoặc tên cột bắt đầu bằngV_, Bạn đang làm Khá an toàn.

kèo tỷ số bóng đá euro hôm nay cách giải quyết khác là sử dụng tên đủ điều kiện (chấm) cho Các thực thể SQL. Ví dụ chúng tôi có thể viết kèo tỷ số bóng đá euro hôm nay cách an toàn Ví dụ trên như

14424_14506

kèo tỷ số bóng đá euro hôm naySẽ không thay thế kèo tỷ số bóng đá euro hôm nay biến cho kèo tỷ số bóng đá euro hôm nay thành phần dấu vết của kèo tỷ số bóng đá euro hôm nay người có trình độ tên. Tuy nhiên, giải pháp này không hoạt động trong mọi trường hợp - bạn Không thể đủ điều kiện kèo tỷ số bóng đá euro hôm nay tên trong kèo tỷ số bóng đá euro hôm nayChèn14772_15071

kèo tỷ số bóng đá euro hôm nay kỹ thuật khác bạn có thể sử dụng là gắn nhãn vào chặn trong đó các biến của bạn được khai báo, sau đó đủ điều kiện Tên biến trong các lệnh SQL của bạn (xemPhần 38.2). Ví dụ,

<< PL 
    TUYÊN BỐ
        văn bản val;
    BẮT ĐẦU
        ...
        Cập nhật bảng đặt col = pl.val trong đó ...

Đây không phải là giải pháp cho vấn đề xung đột, vì kèo tỷ số bóng đá euro hôm nay cái tên không đủ tiêu chuẩn trong lệnh SQL vẫn còn có nguy cơ bị giải thích"sai"Cách. Nhưng nó rất hữu ích để làm rõ Mục đích của mã có khả năng mơ hồ.

Thay thế biến không xảy ra trong chuỗi lệnh được trao chothực thihoặc kèo tỷ số bóng đá euro hôm nay trong số nó biến thể. Nếu bạn cần chèn kèo tỷ số bóng đá euro hôm nay giá trị khác nhau vào kèo tỷ số bóng đá euro hôm nay lệnh, làm như vậy như là kèo tỷ số bóng đá euro hôm nay phần của việc xây dựng giá trị chuỗi, như được minh họa trongPhần 38.5.4.

Thay thế biến hiện chỉ hoạt động trongChọn, Chèn, Cập nhậtXóalệnh, vì động cơ SQL chính chỉ cho phép các ký hiệu tham số trong các lệnh này. Để sử dụng a Tên hoặc giá trị không liên tục trong các loại câu lệnh khác (được gọi chung là các câu lệnh tiện ích), bạn phải xây dựng câu lệnh tiện ích kèo tỷ số bóng đá euro hôm nay dạng chuỗi vàthực thiit.

38.10.2. Kế hoạch bộ nhớ đệm

Thekèo tỷ số bóng đá euro hôm nayThông dịch viên Phân tích văn bản nguồn của chức năng và tạo ra kèo tỷ số bóng đá euro hôm nay nội bộ cây hướng dẫn nhị phân lần đầu tiên hàm được gọi (trong mỗi phiên). Cây hướng dẫn dịch hoàn toàn Thekèo tỷ số bóng đá euro hôm nayTuyên bố cấu trúc, nhưng cá nhânSQLBiểu thức vàSQLCác lệnh được sử dụng trong hàm không được dịch ngay lập tức.

như mỗi biểu thức vàSQLlệnh đầu tiên được thực thi trong chức năng,kèo tỷ số bóng đá euro hôm nayThông dịch viên tạo ra kèo tỷ số bóng đá euro hôm nay kế hoạch thực thi đã chuẩn bị (sử dụngSPINgười quản lýspi_preparespi_saveplanchức năng).Các lượt truy cập tiếp theo đến biểu thức đó hoặc lệnh tái sử dụng kế hoạch đã chuẩn bị. Do đó, kèo tỷ số bóng đá euro hôm nay chức năng với mã có điều kiện chứa nhiều câu lệnh Các kế hoạch thực thi có thể được yêu cầu sẽ chỉ chuẩn bị và tiết kiệm những kế hoạch thực sự được sử dụng trong suốt cuộc đời của Kết nối cơ sở dữ liệu. Điều này có thể giảm đáng kể tổng số Lượng thời gian cần thiết để phân tích và tạo các kế hoạch thực thi cho các câu trong kèo tỷ số bóng đá euro hôm naykèo tỷ số bóng đá euro hôm nay18266_18572

kèo tỷ số bóng đá euro hôm nay lầnkèo tỷ số bóng đá euro hôm nayđã làm kèo tỷ số bóng đá euro hôm nay kế hoạch thực thi cho kèo tỷ số bóng đá euro hôm nay lệnh cụ thể trong kèo tỷ số bóng đá euro hôm nay hàm, nó sẽ Tái sử dụng kế hoạch đó cho cuộc sống của kết nối cơ sở dữ liệu. Cái này thường là kèo tỷ số bóng đá euro hôm nay chiến thắng cho hiệu suất, nhưng nó có thể gây ra kèo tỷ số bóng đá euro hôm nay số Vấn đề nếu bạn tự động thay đổi lược đồ cơ sở dữ liệu của bạn. Vì ví dụ:

Tạo hàm Fopulation () trả về số nguyên kèo tỷ số bóng đá euro hôm nay dạng $$
TUYÊN BỐ
    - Tuyên bố
BẮT ĐẦU
    Thực hiện my_function ();
KẾT THÚC;
$$ ngôn ngữ plpgsql;

Nếu bạn thực thi chức năng trên, nó sẽ tham chiếu OID vìmy_function ()Trong Kế hoạch thực thi được sản xuất chobiểu diễnTuyên bố. Sau này, nếu bạn thả và tái tạomy_function (), sau đóFopulation ()sẽ không thể tìm thấymy_function ()nữa. Bạn sau đó sẽ phải bắt đầu kèo tỷ số bóng đá euro hôm nay phiên cơ sở dữ liệu mới đểđông dân ()sẽ được biên dịch kèo tỷ số bóng đá euro hôm nay lần nữa, trước khi nó sẽ hoạt động trở lại. Bạn có thể tránh được vấn đề này bằng cách sử dụngTạo hoặc thay thế chức năngKhi cập nhật định nghĩa củamy_function, kể từ khi kèo tỷ số bóng đá euro hôm nay hàm là"Thay thế", OID của nó không phải là đã thay đổi.

Lưu ý:inPostgreSQL8.3 trở lên, các kế hoạch đã lưu sẽ được thay thế bất cứ khi nào bất kỳ thay đổi lược đồ nào xảy ra cho bất kỳ bảng họ tham khảo. Điều này giúp loại bỏ kèo tỷ số bóng đá euro hôm nay trong những Nhược điểm lớn của kế hoạch đã lưu. Tuy nhiên, không có cơ chế như vậy cho các tài liệu tham khảo chức năng, và do đó Ví dụ liên quan đến tham chiếu đến chức năng bị xóa là Vẫn còn hợp lệ.

kèo tỷ số bóng đá euro hôm nayLưu Các kế hoạch thực thi theo cách này, các lệnh SQL xuất hiện trực tiếp trong akèo tỷ số bóng đá euro hôm nayHàm phải Tham khảo cùng kèo tỷ số bóng đá euro hôm nay bảng và cột trên mỗi lần thực thi; cái đó là, bạn không thể sử dụng kèo tỷ số bóng đá euro hôm nay tham số làm tên của bảng hoặc cột trong kèo tỷ số bóng đá euro hôm nay lệnh sql. Để vượt qua hạn chế này, bạn có thể Xây dựng các lệnh động bằng cách sử dụngkèo tỷ số bóng đá euro hôm nay thực thiTuyên bố - với giá xây dựng kế hoạch thực hiện mới Trên mỗi lần thực thi.

kèo tỷ số bóng đá euro hôm nay điểm quan trọng khác là các kế hoạch đã chuẩn bị là được tham số hóa để cho phép các giá trị củakèo tỷ số bóng đá euro hôm nayBiến để thay đổi từ kèo tỷ số bóng đá euro hôm nay lần sử dụng tiếp theo, như được thảo luận chi tiết ở trên. Đôi khi điều này có nghĩa là rằng kèo tỷ số bóng đá euro hôm nay kế hoạch kém hiệu quả hơn so với kèo tỷ số bóng đá euro hôm nay giá trị biến cụ thể. Ví dụ, hãy xem xét

Chọn * vào MyRec từ từ điển trong đó từ như search_term;

WHEREsearch_termlà Akèo tỷ số bóng đá euro hôm nayBiến. Kế hoạch được lưu trong bộ nhớ cache cho Truy vấn này sẽ không bao giờ sử dụng chỉ mục trênWord, vì người lập kế hoạch không thể cho rằng Thenhư21886_22007nhưmẫu cung cấp. Đây là kèo tỷ số bóng đá euro hôm nay tình huống khác màthực thicó thể được sử dụng để buộc kèo tỷ số bóng đá euro hôm nay kế hoạch mới được tạo cho mỗi lần thực thi.

22211_22593thực thicó thể được sử dụng để vượt qua điều này vấn đề khi cần thiết.

Nếu chức năng tương tự được sử dụng làm kích hoạt cho nhiều hơn kèo tỷ số bóng đá euro hôm nay bàn,kèo tỷ số bóng đá euro hôm nayChuẩn bị và Caches có kế hoạch độc lập cho mỗi bảng như vậy - nghĩa là ở đó là bộ nhớ cache cho từng chức năng kích hoạt và kết hợp bảng, không Chỉ cho mỗi chức năng. Điều này làm giảm bớt kèo tỷ số bóng đá euro hôm nay số vấn đề với các loại dữ liệu khác nhau; ví dụ, chức năng kích hoạt sẽ có thể làm việc thành công với kèo tỷ số bóng đá euro hôm nay cột có tênKeyNgay cả khi nó có các loại khác nhau trong các bảng khác nhau.

23256_23488

23499_23678

Tạo hàm logfunc1 (văn bản logtxt) trả về void kèo tỷ số bóng đá euro hôm nay dạng $$
    BẮT ĐẦU
        Chèn vào các giá trị logtable (logtxt, 'now');
    KẾT THÚC;
$$ ngôn ngữ plpgsql;

và:

Tạo hàm logfunc2 (văn bản logtxt) trả về void kèo tỷ số bóng đá euro hôm nay dạng $$
    TUYÊN BỐ
        Dấu thời gian Curtime;
    BẮT ĐẦU
        Curtime: = 'Bây giờ';
        Chèn vào các giá trị logtable (logtxt, curtime);
    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 gian24457_24494logtablelà của loại đó. Do đó,'bây giờ'sẽ là được chuyển đổi thành hằng số khiChènđược lên kế hoạch, và sau đó được sử dụng trong tất cả Những lời mời củalogfunc1Trong Cuộc sống của phiên. Không cần phải nói, đây không phải là những gì 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, Thekèo tỷ số bóng đá euro hôm nayPhiên dịch chuyển chuỗi này đến TheTimestampgõ bằng cách gọiText_outTimestamp_inHàm cho chuyển đổi. Vì vậy, dấu thời gian 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.