Xử lý dữ liệu bằng Java trong Oracle
Oracle luôn là một công cụ hay ứng dụng tốt nhất để xử lý dữ liệu? Câu trả lời
nằm ở bên trong những gì bạn thực hiện. Thông thường, dữ liệu được biến đổi
thông qua ngôn ngữ xử lý dữ liệu, ngoài ra nó cũng có thể được biến đổi thông
qua việc xử lý các chuỗi hoặc số. Để phân biệt giữa các loại xử lý n
ày, hãy cho
rằng dữ liệu được lưu trữ trong phạm vi DML, đầu ra hoặc dữ liệu hiển thị là
những gì hoặc bằng cách nào dữ liệu lưu được hiển thị cho người dùng. Một ví
dụ đơn giản cho trường hợp này là ngày tháng. Những gì được lưu có thể được
yêu cầu để hiển thị theo những cách khác nhau. Ví dụ như là March 8th, 2007
cũng như 03/08/2007; nó phụ thuộc vào những gì mà bạn hoặc người dùng của
bạn muốn nhìn thấy như thế nào.
Tiêu điểm chính của bài viết này liên quan đến bằng cách nào bạn có thể lấy
được từ những thứ được lưu để hiển thị nó như thế nào đó. Tiêu điểm này liên
quan đến những vấn đề xử lý xung quanh một chuỗi hay một số nào đó. Cho
rằng bạn có một ứng dụng hỗ trợ các thống kê hoặc cung cấp phiếu cho người
dùng thông qua Internet. Việc kích chuột để đệ trình trong một biểu mẫu thống
kê trực tuyến, thống kê theo ID hoặc theo số tài khoản, để được qua như một
trong những cặp giá trị - tên trong một URL, đây là một vấn đề thường được
thực hiện trong các bộ nhận dạng của bạn.
Trường hợp sử dụng khác cho cơ chế truyền tải “truyền dữ liệu trở lại” này
dùng để hợp lệ hoặc giới hạn sự sử dụng của bạn. Các phiếu, dù trong biểu
mẫu bằng giấy hoặc điện tử đều được biểu hiện bằng những định dạng số. Các
số rất lớn làm cho chúng trở lên khó khăn hơn đối với việc làm giả mạo khi m
à
mật độ của nó được giãn cách nhiều hơn.
Mặc dù vậy vấn đề ở đây là việc truyền trở lại số mã vạch 22 con số chẳng hạn
sẽ tiêu tốn đến không gian hay chiều dài trong URL (giới hạn 255 hoặc 256 kí
tự). Những gì cần thiết ở đây là cách làm ngắn một số lớn trở thành m
BEGIN
v_number := i_coupon_number;
while ( v_true = 0 ) loop
v_curinc := v_curinc * 36;
v_curval := v_number / v_curinc;
if ( v_curval < 1 ) then
v_true := 1;
else
v_pos := v_pos + 1;
end if;
end loop;
v_dec_count := v_pos;
v_new_val := NULL;
v_cur_num := v_number;
WHILE ( v_dec_count > 0) LOOP
v_pos_val := power(36,v_dec_count - 1);
v_test_num := trunc(v_cur_num/v_pos_val);
select decode(v_test_num,35,'z', 34,'y', 33,'x',
32,'w', 31,'v', 30,'u',
29,'t', 28,'s', 27,'r',
26,'q', 25,'p', 24,'o',
23,'n', 22,'m', 21,'l',
20,'k', 19,'j', 18,'i',
17,'h', 16,'g', 15,'f',
14,'e', 13,'d', 12,'c',
11,'b', 10,'a', 9,'9',
8,'8', 7,'7', 6,'6',
5,'5', 4,'4', 3,'3',
2,'2', 1,'1', '0')
INTO v_cur_digit FROM DUAL;
Position: 2821109907456 current number: 8
Position 8 current value: 1950zn8
Position: 78364164096 current number: 15
Position 7 current value: 1950zn8f
Position: 2176782336 current number: 26
Position 6 current value: 1950zn8fq
Position: 60466176 current number: 33
Position 5 current value: 1950zn8fqx
Position: 1679616 current number: 19
Position 4 current value: 1950zn8fqxj
Position: 46656 current number: 34
Position 3 current value: 1950zn8fqxjy
Position: 1296 current number: 16
Position 2 current value: 1950zn8fqxjyg
Position: 36 current number: 24
Position 1 current value: 1950zn8fqxjygo
Position: 1 current number: 32
Position 0 current value: 1950zn8fqxjygow
Final value: 1950zn8fqxjygow
Điều đó không có nghĩa là bảo mật thông qua tình trạng ít người biết đến. Mặc
dù vậy, một chuỗi lạ sẽ làm khó hầu hết người dùng muốn tính toán những gì
hiển thị.
N
ếu tính đến một giá trị thì hiệu suất xử lý dữ liệu là “OK”, nhưng sẽ mất bao
lâu nếu tạo ra một triệu giá trị? Hãy tạo một bảng có 3 cột. Cột đầu tiên là cột
cơ số 10, cột thứ hai là giá trị đã được xử lý cơ số 36 bằng sử dụng m
ã PL/SQL
Server ở trên và cột thứ ba được dành riêng cho đ
ầu ra bằng sử dụng một nghĩa
khác kèm theo (cho chuỗi).
Làm thế nào để đưa mã Java vào cơ sở dữ liệu?
Đầu tiên, chúng ta cần phải có một file Java có mã thích hợp trong đó. Thứ hai
là để upload mã (nguồn hoặc phiên bản đã biên dịch) vào cơ s
ở dữ liệu. Thứ ba
là biên dịch mã, và sau đó bước cuối cùng là tạo một chức năng bao bọc hoặc
thủ tục xung quanh mã Java. Chức năng đó được gọi là đối tượng tên Oracle,
nó sẽ gọi đối tượng tên Java.
Mã nguồn.
import java.math.BigInteger;
import java.lang.String;
public class BCUtils
{
public static String getBarcode36(String barcode10)
{
String value = new String(barcode10);
BigInteger bigI = new BigInteger(value.toString());
StringBuffer result = new StringBuffer(bigI.toString(36));
return result.toString();
}
}
Tải file nguồn và biên dịch nó.
Tạo chức năng bao bọc/ công bố lớp
SQL> create or replace function get_bc36(bc_10 varchar2)
2 return varchar2
3 as language java name