Chọn số lượng trong html
Tất cả các biến được sử dụng trong một khối phải được khai báo trong phần khai báo của khối. (Các trường hợp ngoại lệ duy nhất là biến vòng lặp của vòng lặp quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();9 lặp qua một phạm vi giá trị số nguyên được tự động khai báo là biến số nguyên và tương tự như vậy, biến vòng lặp của vòng lặp quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();9 lặp qua kết quả của con trỏ được tự động khai báo là biến bản ghi. ) Dưới đây là một số ví dụ về khai báo biến user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD; Cú pháp chung của một khai báo biến là
Mệnh đề DECLARE x integer := 1; y integer := x + 1;1, nếu được đưa ra, chỉ định giá trị ban đầu được gán cho biến khi khối được nhập. Nếu mệnh đề DECLARE x integer := 1; y integer := x + 1;1 không được đưa ra thì biến được khởi tạo thành giá trị null SQL. Tùy chọn DECLARE x integer := 1; y integer := x + 1;3 ngăn không cho biến được gán sau khi khởi tạo, do đó giá trị của nó sẽ không đổi trong suốt thời gian của khối. Tùy chọn DECLARE x integer := 1; y integer := x + 1;4 chỉ định một đối chiếu để sử dụng cho biến (xem Phần 43. 3. 6). Nếu DECLARE x integer := 1; y integer := x + 1;5 được chỉ định, việc gán giá trị null sẽ dẫn đến lỗi thời gian chạy. Tất cả các biến được khai báo là DECLARE x integer := 1; y integer := x + 1;5 phải có một giá trị mặc định không null được chỉ định. Bằng ( DECLARE x integer := 1; y integer := x + 1;7) có thể được sử dụng thay cho PL/SQL tuân thủ DECLARE x integer := 1; y integer := x + 1;8 Giá trị mặc định của biến được đánh giá và gán cho biến mỗi khi khối được nhập (không chỉ một lần cho mỗi lần gọi hàm). Vì vậy, ví dụ, gán DECLARE x integer := 1; y integer := x + 1;9 cho một biến kiểu quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();30 khiến biến đó có thời gian của lệnh gọi hàm hiện tại, không phải thời gian khi hàm được biên dịch trước ví dụ quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now(); Sau khi được khai báo, giá trị của một biến có thể được sử dụng trong các biểu thức khởi tạo sau này trong cùng một khối, chẳng hạn DECLARE x integer := 1; y integer := x + 1; 43. 3. 1. Khai báo tham số hàmCác tham số được truyền cho các hàm được đặt tên bằng các mã định danh quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();31, quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();32, v.v. Tùy chọn, bí danh có thể được khai báo cho tên tham số quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();33 để tăng khả năng đọc. Sau đó, bí danh hoặc mã định danh số có thể được sử dụng để chỉ giá trị tham số Có hai cách để tạo bí danh. Cách ưa thích là đặt tên cho tham số trong lệnh quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();34, ví dụ quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();3 Một cách khác là khai báo rõ ràng bí danh, sử dụng cú pháp khai báo user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;1 Ví dụ tương tự trong phong cách này trông giống như user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;2 Ghi chúHai ví dụ này không hoàn toàn tương đương. Trong trường hợp đầu tiên, quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();35 có thể được gọi là quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();36, nhưng trong trường hợp thứ hai thì không thể. (Nếu chúng tôi gắn nhãn vào khối bên trong, thì quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();35 có thể đủ tiêu chuẩn với nhãn đó, thay vào đó. ) Một số ví dụ khác user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;6 user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;7 Lưu ý rằng chúng tôi đã bỏ qua quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();38 — chúng tôi có thể đưa nó vào, nhưng sẽ thừa Để gọi một hàm có tham số quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();39, hãy bỏ qua (các) tham số đầu ra trong lệnh gọi hàm 0 Tham số đầu ra hữu ích nhất khi trả về nhiều giá trị. Một ví dụ tầm thường là 0 Như đã thảo luận trong Phần 38. 5. 4, điều này tạo ra một loại bản ghi ẩn danh một cách hiệu quả cho kết quả của hàm. Nếu một mệnh đề user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;10 được đưa ra, thì nó phải ghi là user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;11 Điều này cũng hoạt động với các thủ tục, ví dụ 1 Khi gọi một thủ tục, tất cả các tham số phải được chỉ định. Đối với các tham số đầu ra, user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;12 có thể được chỉ định khi gọi thủ tục từ SQL thuần túy 2____33 Điều này hoàn toàn tương đương với việc khai báo một hoặc nhiều tham số quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();39 và chỉ định user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;14 4 Có thể đạt được hiệu ứng tương tự bằng cách khai báo một hoặc nhiều tham số đầu ra dưới dạng các kiểu đa hình. Trong trường hợp này, tham số user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;15 đặc biệt không được sử dụng; . Ví dụ 5 Trong thực tế, có thể hữu ích hơn khi khai báo một hàm đa hình bằng cách sử dụng họ kiểu user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;16, để việc tự động thăng cấp các đối số đầu vào thành một kiểu chung sẽ xảy ra. Ví dụ 6 Với ví dụ này, một cuộc gọi như 7 sẽ hoạt động, tự động thăng cấp các đầu vào số nguyên thành số. Hàm sử dụng user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;17 sẽ yêu cầu bạn chuyển ba đầu vào cùng loại theo cách thủ công 8 Cú pháp user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;18 tổng quát hơn so với đề xuất trong phần trước. bạn có thể khai báo bí danh cho bất kỳ biến nào, không chỉ các tham số hàm. Việc sử dụng thực tế chính cho điều này là gán một tên khác cho các biến có tên được xác định trước, chẳng hạn như user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;19 hoặc user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;20 trong hàm kích hoạt ví dụ 9 Vì user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;18 tạo ra hai cách khác nhau để đặt tên cho cùng một đối tượng nên việc sử dụng không hạn chế có thể gây nhầm lẫn. Tốt nhất là chỉ sử dụng nó cho mục đích ghi đè tên được xác định trước quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();0 user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;22 cung cấp kiểu dữ liệu của biến hoặc cột của bảng. Bạn có thể sử dụng điều này để khai báo các biến sẽ chứa các giá trị cơ sở dữ liệu. Ví dụ: giả sử bạn có một cột tên là user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;23 trong bảng user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;24 của mình. Để khai báo một biến có cùng kiểu dữ liệu với user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;25 bạn viết quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();1 Bằng cách sử dụng user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;22, bạn không cần biết kiểu dữ liệu của cấu trúc mà bạn đang tham chiếu và quan trọng nhất là liệu kiểu dữ liệu của mục được tham chiếu có thay đổi trong tương lai hay không (ví dụ:. bạn thay đổi loại user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;23 từ user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;28 thành user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;29), bạn có thể không cần thay đổi định nghĩa hàm của mình user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;22 đặc biệt có giá trị trong các hàm đa hình, vì các kiểu dữ liệu cần thiết cho các biến nội bộ có thể thay đổi từ lần gọi này sang lần gọi tiếp theo. Các biến phù hợp có thể được tạo bằng cách áp dụng user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;22 cho các đối số của hàm hoặc trình giữ chỗ kết quả quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();2 Biến kiểu tổng hợp được gọi là biến hàng (hay biến kiểu hàng). Một biến như vậy có thể chứa toàn bộ một hàng của kết quả truy vấn user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;62 hoặc quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();9, miễn là tập hợp cột của truy vấn đó khớp với loại khai báo của biến. Các trường riêng lẻ của giá trị hàng được truy cập bằng ký hiệu dấu chấm thông thường, ví dụ: user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;64 Một biến hàng có thể được khai báo để có cùng loại với các hàng của một bảng hoặc dạng xem hiện có, bằng cách sử dụng ký hiệu user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;65 user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;66; . (Vì mọi bảng đều có một loại kết hợp có cùng tên, nên việc bạn viết user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;66 hay không thực sự không quan trọng trong PostgreSQL. Nhưng biểu mẫu với user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;66 dễ mang theo hơn. ) Các tham số cho một hàm có thể là các loại hỗn hợp (các hàng trong bảng hoàn chỉnh). Trong trường hợp đó, mã định danh tương ứng quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();33 sẽ là một biến hàng và có thể chọn các trường từ biến đó, ví dụ: user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;70 Dưới đây là một ví dụ về việc sử dụng các loại tổng hợp. user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;71 và user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;72 là các bảng hiện có có ít nhất các trường được đề cập quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();3 quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();4 Biến bản ghi tương tự như biến kiểu hàng, nhưng chúng không có cấu trúc được xác định trước. Chúng đảm nhận cấu trúc hàng thực tế của hàng mà chúng được chỉ định trong lệnh user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;62 hoặc quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();9. Cấu trúc con của một 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 một biến bản ghi được gán lần đầu tiên, nó không có cấu trúc con và mọi nỗ lực truy cập vào một trường trong đó sẽ gây ra lỗi thời gian chạy quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();5 Lần sử dụng đầu tiên của user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;75 sẽ sử dụng đối chiếu chung của user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;76 và user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;77 để so sánh, trong khi lần sử dụng thứ hai sẽ sử dụng đối chiếu user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.columnname%TYPE; arow RECORD;78 Hơn nữa, đối chiếu được xác định cũng được coi là đối chiếu của bất kỳ biến cục bộ nào thuộc loại có thể đối chiếu. Do đó, chức năng này sẽ không hoạt động khác đi nếu nó được viết là quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();6 Nếu không có tham số của kiểu dữ liệu có thể đối chiếu hoặc không thể xác định đối chiếu chung cho chúng, thì các tham số và biến cục bộ sẽ sử dụng đối chiếu mặc định của loại dữ liệu của chúng (thường là đối chiếu mặc định của cơ sở dữ liệu, nhưng có thể khác đối với các biến của miền Ví dụ: một biến cục bộ của kiểu dữ liệu có thể đối chiếu có thể có một đối chiếu khác được liên kết với nó bằng cách bao gồm tùy chọn DECLARE x integer := 1; y integer := x + 1;4 trong phần khai báo của nó quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();7 Tùy chọn này sẽ ghi đè đối chiếu mà lẽ ra sẽ được cấp cho biến theo các quy tắc ở trên Ngoài ra, tất nhiên, các mệnh đề DECLARE x integer := 1; y integer := x + 1;4 rõ ràng có thể được viết bên trong một hàm nếu muốn buộc một phép đối chiếu cụ thể được sử dụng trong một thao tác cụ thể. Ví dụ, quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; transaction_time CONSTANT timestamp with time zone := now();8 Thao tác này sẽ ghi đè các đối chiếu được liên kết với các cột trong bảng, tham số hoặc biến cục bộ được sử dụng trong biểu thức, giống như sẽ xảy ra trong một lệnh SQL thuần túy |