NAME_IN tích hợp sẵn trong Oracle D2k Forms
Mô tả
Trả về giá trị của biến được chỉ định.
Giá trị trả về có dạng một chuỗi ký tự. Tuy nhiên, bạn có thể sử dụng NAME_IN để trả về
số và ngày tháng dưới dạng chuỗi ký tự, sau đó chuyển đổi các chuỗi đó sang kiểu dữ liệu thích hợp. Bạn
có thể sử dụng giá trị trả về như khi bạn sử dụng bất kỳ giá trị nào trong một câu lệnh thực thi.
Nếu bạn lồng hàm NAME_IN, thì Trình tạo biểu mẫu sẽ đánh giá các hàm NAME_IN riêng lẻ từ
hàm trong cùng đến ngoài cùng một.
Cú pháp
FUNCTION NAME_IN
(tên_biến VARCHAR2);
Chức năng không hạn chế Kiểu tích hợp
Trả về VARCHAR2
Vào Chế độ truy vấn có
Tham số
tên_biến được chỉ định một biến hoặc mục văn bản hợp lệ. Kiểu dữ liệu của tên là
VARCHAR2.
Ghi chú Sử dụng
Nếu giá trị trả về là một chuỗi ngày, NAME_IN sẽ sử dụng mặt nạ định dạng được chỉ định trong thuộc tính
BUILTIN_DATE_FORMAT. Nếu thuộc tính DATE_FORMAT_COMPATIBILITY_MODE
được đặt thành 4.5, định dạng Mỹ mặc định sẽ được sử dụng để định dạng chuỗi trả về.
NAME_IN ví dụ
/ *
** Tích hợp sẵn:NAME_IN
** Ví dụ:Triển khai đơn giản cơ chế ngăn xếp Cuối cùng vào Đầu ra
** bằng cách sử dụng các biến Toàn cục.
** Đối với mỗi ngăn xếp được đặt tên, một biến toàn cục
** GLOBAL.
** lớn nhất trên ngăn xếp. PUSH tăng giá trị
** này khi các phần tử mới được thêm vào. Các giá trị
** PUSH'ed on hoặc POP'ed off stack đã đặt tên
** thực sự được lưu trữ trong các biến TOÀN CẦU của một
** tên được tạo thuận tiện:GLOBAL.
** trong đó 'nnn' là số phần tử trên ngăn xếp
**.
**
** Cách sử dụng:
** Push ('MYSTACKNAME' , '1');
** Push ('MYSTACKNAME', '2');
**
** str_var:=Pop ('MYSTACKNAME'); - Gets ’2’
** str_var:=Pop (’MYSTACKNAME’); - Gets ’1’
** str_var:=Pop (’MYSTACKNAME’); - Gets ’EOS’
**
* /
PROCEDURE Push (the_stackname VARCHAR2,
the_value VARCHAR2) IS
ptr_name VARCHAR2 (40); - Tiền tố
tên con trỏ của ngăn xếp này VARCHAR2 (40); - Tiền tố chung cho kho lưu trữ
elt_name VARCHAR2 (40); - Tên phần tử lưu trữ
new_idx VARCHAR2 (4); - Giá trị con trỏ ngăn xếp mới
BEGIN
/ *
** Đối với bất kỳ ngăn xếp được đặt tên nào mà chúng tôi tham chiếu, các biến
** toàn cục được sử dụng để lưu trữ các giá trị của ngăn xếp và
** con trỏ của ngăn xếp đều bắt đầu bằng tiền tố chung:
** GLOBAL.
* /
tiền tố:='GLOBAL.' || the_stackname;
/ *
** Con trỏ của ngăn xếp có tên này nằm trong
** GLOBAL.
** của con trỏ.
* /
ptr_name:=prefix || '_PTR';
/ *
** Khởi tạo con trỏ ngăn xếp với giá trị mặc định là
** 0 nếu trước đó con trỏ ngăn xếp không tồn tại, tức là
** GLOBAL .
* /
Default_Value ('0', ptr_name);
/ *
** Vì chúng tôi đang PUSH phần tử mới trên ngăn xếp,
** tăng con trỏ ngăn xếp để phản ánh vị trí của phần tử
** mới này. Hãy nhớ rằng các biến TOÀN CẦU là
** luôn thuộc loại VARCHAR2, vì vậy chúng ta phải chuyển đổi chúng thành TO_NUMBER
** trước bất kỳ phép tính nào.
* /
new_idx:=TO_CHAR (TO_NUMBER (Name_In (ptr_name)) + 1);
Copy (new_idx, ptr_name);
/ *
** Xác định tên của biến toàn cục sẽ
** lưu trữ giá trị được truyền vào in, GLOBAL.
** Đây chỉ đơn giản là tiền tố được nối với chỉ mục mới
** số mà chúng tôi vừa tính toán ở trên.
* /
elt_name :=prefix || new_idx;
Copy (the_value, elt_name);
END;
FUNCTION Pop (the_stackname VARCHAR2)
RETURN VARCHAR2 IS
ptr_name VARCHAR2 (40); - Tiền tố
tên con trỏ của ngăn xếp này VARCHAR2 (40); - Tiền tố chung cho kho lưu trữ
elt_name VARCHAR2 (40); - Tên phần tử lưu trữ
new_idx VARCHAR2 (4); - Giá trị con trỏ ngăn xếp mới
cur_idx VARCHAR2 (4); - Giá trị con trỏ ngăn xếp hiện tại
the_val VARCHAR2 (255);
EMPTY_STACK CONSTANT VARCHAR2 (3):='EOS';
NO_SUCH_STACK CONSTANT VARCHAR2 (3):='NSS';
BEGIN
/ *
** Đối với bất kỳ ngăn xếp được đặt tên nào mà chúng tôi tham chiếu, các biến
** toàn cục được sử dụng để lưu trữ các giá trị của ngăn xếp và con trỏ của ngăn xếp
** đều bắt đầu với tiền tố chung:
** GLOBAL.
* /
prefix:='GLOBAL.' || the_stackname;
/ *
** Con trỏ của ngăn xếp có tên này nằm trong
** GLOBAL.
** của con trỏ.
* /
ptr_name:=prefix || ’_PTR’;
/ *
** Buộc giá trị mặc định là NULL để chúng tôi có thể kiểm tra xem con trỏ
** có tồn tại hay không (dưới dạng biến toàn cục). Nếu nó không
** tồn tại, chúng tôi có thể kiểm tra NULL trong giây lát và tránh
** lỗi điển hình do tham chiếu đến các biến toàn cục
** không tồn tại.
* /
Default_Value (NULL, ptr_name);
/ *
** Nếu giá trị * * trong con trỏ là NULL, thì
** con trỏ không được đã tồn tại trước câu lệnh
** Default_Value ở trên. Trả về hằng số
** NO_SUCH_STACK trong trường hợp này và xóa biến
** toàn cục mà Default_Value đã ngầm tạo ra.
* /
NẾU Name_In (ptr_name) LÀ KHÔNG ĐẦY ĐỦ
the_val:=NO_SUCH_STACK;
Erase (ptr_name);
/ *
** Nếu không, ngăn xếp được đặt tên đã tồn tại. Nhận chỉ số
** của phần tử ngăn xếp lớn nhất từ con trỏ
** của ngăn xếp này.
* /
ELSE
cur_idx:=Name_In (ptr_name);
/ *
** Nếu chỉ mục bằng 0, thì ngăn xếp được đặt tên đã
** trống, vì vậy hãy trả lại hằng số EMPTY_STACK và để
** con trỏ của ngăn xếp xung quanh để sau sử dụng, tức là không
** LỖI nó.
**
** Lưu ý rằng ngăn xếp chỉ có thể trống nếu một số giá trị
** đã được PUSH'ed và thì tất cả các giá trị sau đó đều
** POP'ed. Nếu không có giá trị nào được PUSH'ed trên ngăn xếp có tên
** này, thì sẽ không có con trỏ ngăn xếp nào được liên kết
** được tạo và chúng tôi sẽ gắn cờ lỗi đó bằng
** NO_SUCH_STACK trường hợp trên.
* /
IF cur_idx ='0' THEN
the_val:=EMPTY_STACK;
/ *
** Nếu chỉ mục khác 0, thì :
** (1) Xác định tên của biến toàn cục trong
** mà giá trị sẽ được POP'ed được lưu trữ,
** GLOBAL.
** (2) Nhận giá trị của phần tử (cur_idx) -th thành
** return
** (3) Giảm thiểu con trỏ ngăn xếp
** (4) Xóa biến toàn cục được sử dụng để lưu trữ giá trị
**
* /
ELSE
elt_name:=prefix || cur_idx;
the_val:=Name_In (elt_name);
new_idx:=TO_CHAR (TO_NUMBER (Name_In (ptr_name)) - 1);
Copy (new_idx, ptr_name);
Xóa (elt_name);
HẾT IF;
KẾT THÚC IF;
RETURN the_val;
HẾT;
-
SQL chọn hàng theo ngày gần đây nhất với hai cột duy nhất
-
Luôn bật tính năng truyền bá trong các luồng Oracle
-
Làm cách nào để chọn tất cả các cột từ bảng, cùng với các cột bổ sung như ROWNUM?
-
Làm thế nào để tạo và sử dụng bảng tạm thời trong thủ tục lưu trữ oracle?
-
Chính xác thì dấu ngoặc kép xung quanh tên bảng làm gì?