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à

name [ CONSTANT ] type [ COLLATE collation_name ] [ NOT NULL ] [ { DEFAULT | := | = } expression ];

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àm

Cá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

name [ CONSTANT ] type [ COLLATE collation_name ] [ NOT NULL ] [ { DEFAULT | := | = } expression ];
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à

name [ CONSTANT ] type [ COLLATE collation_name ] [ NOT NULL ] [ { DEFAULT | := | = } expression ];
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ụ

name [ CONSTANT ] type [ COLLATE collation_name ] [ NOT NULL ] [ { DEFAULT | := | = } expression ];
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

name [ CONSTANT ] type [ COLLATE collation_name ] [ NOT NULL ] [ { DEFAULT | := | = } expression ];
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

name [ CONSTANT ] type [ COLLATE collation_name ] [ NOT NULL ] [ { DEFAULT | := | = } expression ];
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ụ

name [ CONSTANT ] type [ COLLATE collation_name ] [ NOT NULL ] [ { DEFAULT | := | = } expression ];
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ụ

name [ CONSTANT ] type [ COLLATE collation_name ] [ NOT NULL ] [ { DEFAULT | := | = } expression ];
6

Với ví dụ này, một cuộc gọi như

name [ CONSTANT ] type [ COLLATE collation_name ] [ NOT NULL ] [ { DEFAULT | := | = } expression ];
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

name [ CONSTANT ] type [ COLLATE collation_name ] [ NOT NULL ] [ { DEFAULT | := | = } expression ];
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ụ

name [ CONSTANT ] type [ COLLATE collation_name ] [ NOT NULL ] [ { DEFAULT | := | = } expression ];
9

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