Phiên kèo bóng đá euro được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên kèo bóng đá euro phát triển:18 / Devel
Phiên kèo bóng đá euro 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
9362_9433
Bạn có thể muốn xem cùng kèo bóng đá euro trang chohiện tạiPhiên bản hoặc một trong kèo bóng đá euro phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

39,5. Các kèo bóng đá euro

Trong phần này và những cái sau đây, chúng tôi mô tả tất cả Các loại câu kèo bóng đá euro được hiểu rõ ràng bởiPL/PGSQL. Bất cứ điều gì không được công nhận là một trong những Các loại câu kèo bóng đá euro này được coi là một kèo bóng đá euro SQL và là được gửi đến công cụ cơ sở dữ liệu chính để thực thi, như được mô tả trongPhần 39.5.2Phần 39.5.3.

39.5.1. Phân công

kèo bóng đá euro gán giá trị cho APL/PGSQLBiến được viết là:

Biến: =Biểu thức;

Như đã giải thích trước đây, biểu thức trong kèo bóng đá euro tuyên bố như vậy được đánh giá bằng phương pháp SQLChọn11821_12185

Nếu kiểu dữ liệu kết quả của biểu thức không khớp với Kiểu dữ liệu của biến hoặc biến có kèo bóng đá euro kích thước/độ chính xác (nhưChar (20)), The Giá trị kết quả sẽ được chuyển đổi hoàn toàn bởiPL/PGSQLThông dịch viên sử dụng kết quả Chức năng đầu ra của loại và chức năng đầu vào của loại biến. Lưu ý rằng điều này có khả năng có khả năng dẫn đến lỗi thời gian chạy được tạo bởi hàm đầu vào, nếu dạng chuỗi của Giá trị kết quả không được chấp nhận cho chức năng đầu vào.

ví dụ:

thuế: = Subtotal * 0,06;
my_record.user_id: = 20;

39.5.2. Thực hiện một kèo bóng đá euro Không có kết quả

Đối với bất kỳ kèo bóng đá euro SQL nào không trả lại hàng, ví dụChènkhông cóTrở vềmệnh đề, bạn có thể thực thi kèo bóng đá euro trong aPL/PGSQLHàm Chỉ bằng cách viết kèo bóng đá euro.

bất kỳPL/PGSQLTên biến xuất hiện trong văn bản kèo bóng đá euro được coi là một tham số và sau đó giá trị hiện tại của biến được cung cấp dưới dạng Giá trị tham số tại thời gian chạy. Điều này giống hệt như xử lý được mô tả trước đó cho các biểu thức; Để biết chi tiết, xemPhần 39.10.1.

Khi thực hiện kèo bóng đá euro SQL theo cách này,PL/PGSQLLập kế hoạch kèo bóng đá euro chỉ một lần và tái sử dụng kế hoạch thực hiện tiếp theo, cho cuộc sống của Kết nối cơ sở dữ liệu. Ý nghĩa của điều này được thảo luận trong Chi tiết trongPhần 39.10.2.

Đôi khi rất hữu ích khi đánh giá kèo bóng đá euro biểu thức hoặcChọnTruy vấn nhưng loại bỏ kết quả, ví dụ khi gọi kèo bóng đá euro hàm có tác dụng phụ nhưng Không có giá trị kết quả hữu ích. Để làm điều này trongPL/PGSQL, Sử dụngthực hiệncâu kèo bóng đá euro:

thực hiệnTruy vấn;

Điều này thực thiTruy vấnvà loại bỏ kết quả. ViếtTruy vấngiống như cách bạn sẽ viết SQLChọnkèo bóng đá euro, nhưng thay thế Từ khóa ban đầuChọnvớithực hiện. VìvớiTruy vấn, sử dụngthực hiệnvà sau đó đặt kèo bóng đá euro truy vấn trong ngoặc đơn. (Trong trường hợp này, truy vấn chỉ có thể trả về một hàng.)PL/PGSQLBiến sẽ được thay thế vào truy vấn giống như đối với Các kèo bóng đá euro không trả lại kết quả và kế hoạch được lưu trong bộ nhớ cache trong cùng một cách. Ngoài ra, biến đặc biệt15305_15312được đặt thành true nếu truy vấn được tạo tại ít nhất kèo bóng đá euro hàng, hoặc sai nếu nó không tạo ra hàng (xemPhần 39.5.5).

Lưu ý:Người ta có thể mong đợi rằng viếtChọntrực tiếp sẽ thực hiện điều này kết quả, nhưng hiện tại cách duy nhất được chấp nhận để làm điều đó làthực hiện. Một kèo bóng đá euro sql có thể trả lại hàng, chẳng hạn nhưChọn, Will bị từ chối như kèo bóng đá euro lỗi trừ khi nó cóthànhmệnh đề như được thảo luận trong tiếp theo phần.

kèo bóng đá euro ví dụ:

thực hiện created_mv ('cs_session_page_requests_mv', my_query);

39.5.3. Thực hiện kèo bóng đá euro truy vấn với kèo bóng đá euro kết quả kèo bóng đá euro hàng

Kết quả của kèo bóng đá euro SQL mang lại một hàng duy nhất (có thể của nhiều cột) có thể được gán cho một biến bản ghi, Biến kiểu hàng hoặc danh sách các biến vô hướng. Điều này được thực hiện bởi Viết kèo bóng đá euro SQL cơ sở và thêmthànhmệnh đề. Ví dụ,

Chọnselect_expressionsthành [nghiêm ngặt]TargetTừ ...;
Chèn ... trở vềBiểu thứcthành [nghiêm ngặt]Target;
Cập nhật ... Trả vềBiểu thứcthành [nghiêm ngặt]Target;
Xóa ... Trả vềBiểu thứcthành [nghiêm ngặt]Target;

WHERETargetcó thể là một bản ghi Biến, biến hàng hoặc danh sách đơn giản được phân tách bằng dấu phẩy kèo bóng đá euro biến và trường ghi/hàng.PL/PGSQLBiến sẽ được thay thế vào phần còn lại của truy vấn, và kế hoạch được lưu trữ, giống như Được mô tả ở trên cho các kèo bóng đá euro không trả lại hàng. Cái này hoạt động choChọn, Chèn/Cập nhật/XóavớiTrở về, và các kèo bóng đá euro tiện ích mà Trả về kết quả tập hợp hàng (chẳng hạn nhưGiải thích). Ngoại trừthànhmệnh đề, kèo bóng đá euro SQL giống như nó sẽ được viết bên ngoàiPL/PGSQL.

Tip:Lưu ý rằng cách giải thích này củaChọnvớithànhIS Khá khác vớiPostgreSQL'thường xuyênChọn vàokèo bóng đá euro, trong đóthànhTarget là kèo bóng đá euro bảng mới được tạo. Nếu bạn muốn tạo kèo bóng đá euro bảng từ kèo bóng đá euroChọnKết quả bên trong APL/PGSQLHàm, sử dụng cú phápTạo bảng ... như chọn.

Nếu một hàng hoặc danh sách biến được sử dụng làm mục tiêu, truy vấn của kèo bóng đá euro cột kết quả phải khớp chính xác với cấu trúc của mục tiêu Đối với số lượng và kèo bóng đá euro loại dữ liệu, hoặc nếu không xảy ra lỗi thời gian chạy. Khi biến bản ghi là mục tiêu, nó sẽ tự động Cấu hình chính nó theo loại hàng của kết quả truy vấn kèo bóng đá euro cột.

Thethànhmệnh đề có thể xuất hiện gần như Bất cứ nơi nào trong kèo bóng đá euro SQL. Theo thông thường nó được viết ngay trước hoặc ngay sau danh sáchselect_expressionstrong AChọnkèo bóng đá euro hoặc ở cuối kèo bóng đá euro cho kèo bóng đá euro cho Các loại kèo bóng đá euro khác. Bạn nên làm theo điều này quy ước trong trường hợpPL/PGSQLtrình phân tích cú pháp trở nên chặt chẽ hơn trong tương lai phiên kèo bóng đá euro.

nếunghiêm ngặtkhông được chỉ định trongthànhmệnh đề, sau đóTargetsẽ được đặt thành hàng đầu tiên được trả về bởi truy vấn, hoặc vô hiệu nếu truy vấn trả về không hàng. (Lưu ý rằng"Hàng đầu tiên"IS không được xác định rõ trừ khi bạn đã sử dụngĐặt hàng QUA.) Bất kỳ hàng kết quả nào sau khi hàng đầu tiên bị loại bỏ. Bạn có thể kiểm tra đặc biệttìm thấyBiến (xemPhần 39.5.5) Để xác định xem kèo bóng đá euro hàng đã được trả về:

Chọn * vào myRec từ empname = myname;
Nếu không tìm thấy thì
    Tăng ngoại lệ 'nhân viên % không tìm thấy', myname;
Kết thúc nếu;

Nếunghiêm ngặt20596_20711NO_DATA_FOUND(không hàng) hoặcTOUS_MANY_ROWS(nhiều hơn kèo bóng đá euro hàng ngang). Bạn có thể sử dụng kèo bóng đá euro khối ngoại lệ nếu bạn muốn bắt Lỗi, ví dụ:

20945_21222

21235_21276nghiêm ngặtluôn luôn đặtTìm thấyđến đúng.

choChèn/Cập nhật/XóavớiTrở về, PL/PGSQLBáo cáo lỗi cho nhiều hơn kèo bóng đá euro hàng đã trả lại, ngay cả khinghiêm ngặtIS không được chỉ định. Điều này là do không có tùy chọn nhưĐặt hàng bởiđể xác định cái nào Hàng bị ảnh hưởng nên được trả về.

Lưu ý:Thenghiêm ngặtTùy chọn khớp với hành vi của Oracle PL/SQL'sChọn vàovà các câu kèo bóng đá euro liên quan.

Để xử lý kèo bóng đá euro trường hợp bạn cần xử lý nhiều kết quả hàng từ truy vấn SQL, xemPhần 39.6.4.

39.5.4. Thực hiện động kèo bóng đá euro

22515_22587PL/PGSQLHàm, đó là, các kèo bóng đá euro sẽ liên quan đến các bảng khác nhau hoặc khác nhau Các loại dữ liệu mỗi khi chúng được thực thi.PL/PGSQLNhững nỗ lực bình thường đối với các kế hoạch bộ đệm cho các kèo bóng đá euro (như đã thảo luận trongPhần 39.10.2) sẽ không hoạt động trong kèo bóng đá euro tình huống như vậy. Để xử lý điều này loại vấn đề,thực thiTuyên bố được cung cấp:

thực thichuỗi kèo bóng đá euro[thành [nghiêm ngặt]Target ] [Sử dụngBiểu thức[, ...]];

WHEREchuỗi kèo bóng đá eurolà kèo bóng đá euro Biểu thức mang lại kèo bóng đá euro chuỗi (loạiText) chứa kèo bóng đá euro sẽ được thực thi. Các không bắt buộcTarget23658_23847Sử dụngBiểu thức Giá trị cung cấp được chèn vào kèo bóng đá euro.

Không thay thếPL/PGSQL24016_24216

Ngoài ra, không có bộ nhớ đệm kế hoạch cho các kèo bóng đá euro được thực hiện thông quathực thi. Thay vào đó, kèo bóng đá euro là Chuẩn bị mỗi lần tuyên bố được chạy. Do đó, kèo bóng đá euro Chuỗi có thể được tạo động trong hàm thực hiện các hành động trên các bảng và cột khác nhau.

Thethànhmệnh đề chỉ định nơi Kết quả của kèo bóng đá euro trả về kèo bóng đá euro SQL phải được gán. Nếu như một danh sách hàng hoặc danh sách biến được cung cấp, nó phải khớp chính xác với cấu trúc của kết quả của truy vấn (khi biến bản ghi là được sử dụng, nó sẽ tự cấu hình để phù hợp với cấu trúc kết quả tự động). Nếu nhiều hàng được trả lại, chỉ có hàng đầu tiên sẽ được gán chothànhBiến. Nếu không có hàng nào được trả về, null được gán chothànhBiến (s). Nếu khôngthànhmệnh đề được chỉ định, kết quả truy vấn là bị loại bỏ.

Nếunghiêm ngặttùy chọn được đưa ra, kèo bóng đá euro lỗi được báo cáo trừ khi truy vấn tạo chính xác kèo bóng đá euro hàng ngang.

Chuỗi kèo bóng đá euro có thể sử dụng các giá trị tham số, đó là được tham chiếu trong kèo bóng đá euro là$ 1, $ 2, v.v ... Những biểu tượng này đề cập đến kèo bóng đá euro giá trị được cung cấp trongSử dụng25578_25883

Thực thi 'Chọn đếm (*) từ mytable trong đó chèn_by = $ 1 và chèn <= $ 2'
   Vào c
   Sử dụng Check_user, secoSed_date;

26065_26377

Thực thi 'Chọn đếm (*) từ'
    || TabName :: RegClass
    || 'Trong đó chèn_by = $ 1 và chèn <= $ 2'
   Vào c
   Sử dụng Check_user, secoSed_date;

Một hạn chế khác đối với kèo bóng đá euro ký hiệu tham số là chúng chỉ làm việc trongChọn, Chèn, Cập nhậtXóa26801_26955

ANthực thivới hằng số đơn giản Chuỗi kèo bóng đá euro và một sốsử dụngtham số, như trong ví dụ đầu tiên ở trên, có chức năng tương đương với chỉ viết kèo bóng đá euro trực tiếp trongPL/PGSQLvà cho phép thay thếPL/PGSQLBiến sẽ xảy ra tự động. Sự khác biệt quan trọng làthực thisẽ lập kế hoạch lại kèo bóng đá euro trên mỗi thực thi, tạo ra một kế hoạch cụ thể cho hiện tại Giá trị tham số; trong khiPL/PGSQLThông thường tạo ra một kế hoạch chung và lưu trữ nó để sử dụng lại. Trong những tình huống mà kế hoạch tốt nhất phụ thuộc mạnh vào kèo bóng đá euro giá trị tham số,thực thicó thể nhanh hơn đáng kể; trong khi khi nào Kế hoạch không nhạy cảm với kèo bóng đá euro giá trị tham số, lập kế hoạch lại ý chí là một sự lãng phí.

Chọn vàohiện tại không được hỗ trợ trongthực thi; thay vì, thực hiện kèo bóng đá euro đơn giảnChọnkèo bóng đá euro và chỉ địnhthànhlà kèo bóng đá euro phần củathực thichính nó.

Lưu ý:ThePL/PGSQL thực thiCâu kèo bóng đá euro không liên quan đếnthực thiTuyên bố SQL được hỗ trợ bởiPostgreSQLMáy chủ. Máy chủthực thiTuyên bố không thể được sử dụng trực tiếp trongPL/PGSQLHàm (và không cần thiết).

Ví dụ 39-1. Trích dẫn kèo bóng đá euro giá trị trong động Truy vấn

Khi làm việc với các kèo bóng đá euro động, bạn thường phải Xử lý thoát khỏi các trích dẫn đơn. Phương pháp được đề xuất cho Trích dẫn văn bản cố định trong cơ thể chức năng của bạn là trích dẫn đô la. (Nếu bạn có mã di sản không sử dụng báo giá đô la, Vui lòng tham khảo tổng quan trongPhần 39.11.1, có thể giúp bạn tiết kiệm kèo bóng đá euro số nỗ lực khi dịch Mã đã nói cho kèo bóng đá euro sơ đồ hợp lý hơn.)

kèo bóng đá euro giá trị động sẽ được chèn vào Truy vấn được xây dựng yêu cầu xử lý cẩn thận vì chúng có thể bản thân chúng chứa kèo bóng đá euro ký tự trích dẫn. Một ví dụ (điều này giả định rằng bạn đang sử dụng báo giá đô la cho chức năng như một toàn bộ, vì vậy kèo bóng đá euro dấu ngoặc kép không cần phải nhân đôi):

Thực thi 'Cập nhật TBL Set'
        || quote_ident (colname)
        || '='
        || quote_literal (newValue)
        || 'WHERE KEY ='
        || quote_literal (keyValue);

Ví dụ này thể hiện việc sử dụngquote_identquote_literalChức năng (xemPhần 9.4). Cho an toàn, kèo bóng đá euro biểu thức chứa định danh cột hoặc bảng phải được đi quaquote_identTrước khi chèn vào truy vấn động. Biểu thức chứa các giá trị nên là chuỗi theo nghĩa đen trong kèo bóng đá euro phải được truyền quaquote_literal. kèo bóng đá euro chức năng này lấy kèo bóng đá euro bước thích hợp để trả về văn bản đầu vào được đặt trong gấp đôi hoặc trích dẫn đơn tương ứng, với bất kỳ đặc biệt nhúng nào ký tự đã thoát ra đúng cách.

quote_literalIS được dán nhãnnghiêm ngặt, nó sẽ luôn luôn trả lại null khi được gọi với kèo bóng đá euro đối số null. Ở trên Ví dụ, nếuNewValuehoặcKeyValue31081_31177thực thi. Bạn có thể tránh được vấn đề này bằng cách sử dụng Thequote_nullablechức năng, hoạt động giống nhưquote_literalngoại trừ khi được gọi với kèo bóng đá euro đối số null nó trả về chuỗinull. Ví dụ,

Thực thi 'Cập nhật bộ TBL'
        || quote_ident (colname)
        || '='
        || quote_nullable (newValue)
        || 'WHERE KEY ='
        || quote_nullable (keyValue);

Nếu bạn đang xử lý kèo bóng đá euro giá trị có thể là NULL, bạn thường nên sử dụngQUOTE_NULLABLEthay choquote_literal.

Như mọi khi, phải cẩn thận để đảm bảo rằng kèo bóng đá euro giá trị null Trong một truy vấn không cung cấp kết quả ngoài ý muốn. Ví dụWHEREmệnh đề

'trong đó khóa =' || quote_nullable (keyValue)

Sẽ không bao giờ thành công nếuKeyValueIS null, vì kết quả của việc sử dụng toán tử bình đẳng=32384_32526

'trong đó khóa không khác biệt với' || quote_nullable (keyValue)

(Hiện tại,không khác biệt vớiđược xử lý kém hiệu quả hơn=, vì vậy đừng làm điều này trừ khi bạn phải. Nhìn thấyPhần 9.2Để biết thêm thông tin về nulls vàIS RIÊNG BIỆT.)

Lưu ý rằng trích dẫn đô la chỉ hữu ích để trích dẫn cố định chữ. Nó sẽ là kèo bóng đá euro ý tưởng rất tồi để cố gắng viết điều này Ví dụ như:

Thực thi 'Cập nhật bộ TBL'
        || quote_ident (colname)
        || '= $$'
        || NewValue
        || '$$ trong đó key ='
        || quote_literal (keyValue);

Bởi vì nó sẽ bị hỏng nếu nội dung của33400_33410tình cờ chứa$$. Sự phản đối tương tự sẽ áp dụng cho bất kỳ Dấu phân cách vận chuyển đô la khác mà bạn có thể chọn. Vì vậy, để an toàn Trích dẫn văn kèo bóng đá euro không được biết trước, bạnphảisử dụngquote_literal, QUOTE_NULLABLEhoặcQUOTE_IDENT, khi thích hợp.

Một ví dụ lớn hơn nhiều về kèo bóng đá euro động vàthực thi33965_33983Ví dụ 39-7,, mà xây dựng và thực hiện kèo bóng đá euroTạo CHỨC NĂNGkèo bóng đá euro xác định chức năng mới.

39.5.5. Có được kết quả Trạng thái

Có một số cách để xác định ảnh hưởng của kèo bóng đá euro. Phương pháp đầu tiên là sử dụngNhận Chẩn đoánkèo bóng đá euro, có biểu mẫu:

Nhận chẩn đoánBiến=Mục[, ...];

kèo bóng đá euro này cho phép truy xuất các chỉ báo trạng thái hệ thống. MỗiMục34822_35015ROW_COUNT, số lượng hàng được xử lý bởi cuối cùngSQLkèo bóng đá euro được gửi đếnSQLĐộng cơ vàresult_oid, oid của hàng cuối cùng được chèn bởi gần đây nhấtSQLkèo bóng đá euro. Lưu ý rằngresult_oidchỉ hữu ích Sau kèo bóng đá euroChènkèo bóng đá euro vào bảng chứa oids.

kèo bóng đá euro ví dụ:

Nhận chẩn đoán integer_var = row_count;

Phương pháp thứ hai để xác định các hiệu ứng của kèo bóng đá euro là Để kiểm tra biến đặc biệt có têntìm thấy, thuộc loạiBoolean. Tìm thấyBắt đầu Sai trong mỗiPL/PGSQLCuộc gọi chức năng. Nó được đặt bởi từng loại sau của Các câu kèo bóng đá euro:

  • AChọn vàoBộ câu kèo bóng đá eurotìm thấyĐúng nếu kèo bóng đá euro hàng được gán, Sai nếu không có hàng được trả về.

  • Athực hiệnBộ câu kèo bóng đá euroTìm thấyĐúng nếu nó sản xuất (và loại bỏ) kèo bóng đá euro hoặc nhiều hàng, sai nếu không có hàng được sản xuất.

  • Cập nhật, ChènXóaCâu kèo bóng đá eurotìm thấyĐúng nếu tại ít nhất kèo bóng đá euro hàng bị ảnh hưởng, sai nếu không có hàng bị ảnh hưởng.

  • AFetchBộ câu kèo bóng đá euroTìm thấyĐúng nếu nó trả lại kèo bóng đá euro hàng, Sai nếu không có hàng được trả về.

  • ADi chuyểnBộ câu kèo bóng đá eurotìm thấyĐúng nếu nó thành công định vị lại con trỏ, sai nếu không.

  • Achobộ câu kèo bóng đá eurotìm thấyĐúng nếu nó lặp lại kèo bóng đá euro hoặc nhiều lần, khác sai. Điều này áp dụng cho cả bốn biến thể củachocâu kèo bóng đá euro (số nguyênchovòng lặp, tập hợp kèo bóng đá euro ghichovòng lặp, tập hợp kèo bóng đá euro ghi độngchovòng lặp và con trỏchovòng lặp).tìm thấyđược đặt theo cách này khichoVòng lặp thoát; bên trong việc thực hiện vòng lặp,tìm thấykhông được sửa đổi bởichoTuyên bố, mặc dù nó có thể được thay đổi bằng cách thực hiện các câu kèo bóng đá euro khác trong vòng lặp thân hình.

  • Truy vấn trả vềTruy vấn trả về thực thiCâu kèo bóng đá eurotìm thấyĐúng nếu truy vấn trả về tại ít nhất kèo bóng đá euro hàng, sai nếu không có hàng được trả về.

khácPL/PGSQLCâu kèo bóng đá euro Không thay đổi trạng thái củatìm thấy. Ghi chú đặc biệt làthực thiThay đổi đầu ra củaNhận chẩn đoán, nhưng không không thay đổitìm thấy.

tìm thấylà kèo bóng đá euro biến cục bộ bên trong mỗiPL/PGSQLHàm; bất kì kèo bóng đá euro thay đổi đối với nó chỉ ảnh hưởng đến chức năng hiện tại.

39.5.6. Không làm gì cả

Đôi khi một câu kèo bóng đá euro trình giữ chỗ không có gì hữu ích. Ví dụ, nó có thể chỉ ra rằng một cánh tay của một Nếu/sau đó/chuỗi khác được cố tình trống. Đối với mục đích này, sử dụng ThenullTuyên bố:

null;

Ví dụ: hai đoạn mã sau đây là tương đương:

Bắt đầu
    y: = x / 0;
NGOẠI LỆ
    Khi Division_by_zero sau đó
        VÔ GIÁ TRỊ;  - Bỏ qua lỗi
KẾT THÚC;
Bắt đầu
    y: = x / 0;
NGOẠI LỆ
    Khi phân chia_by_zero sau đó - bỏ qua lỗi
KẾT THÚC;

Thể hơn là kèo bóng đá euro vấn đề của hương vị.

Lưu ý:Trong PL/SQL của Oracle không được phép, và vì vậynullCâu kèo bóng đá euroYêu cầuĐối với kèo bóng đá euro tình huống như vậy Như thế này.PL/PGSQLCho phép bạn chỉ viết không có gì, thay vào đó.