PDA

View Full Version : [Q] SQL Server .Vs Oravle



Ara
27-11-2002, 14:06
Ở trong store procedure của SQL Server chỉ cần câu lệnh:
SELECT * INTO #GLMMTMP FROM GLMAST
thì SQL Server sẽ tự tạo ra một bảng ảo GLMMTMP, sau khi kết thúc store thì sẽ tự xoá bảng đó đi.

Xin các bạn chỉ giúp trong oracle thì có giải pháp nào tương đương không?

ctr_alt_del
29-11-2002, 10:35
Trong store của Oracle8i chỉ tồn tại khái niệm Cursor implicit và Explict có chức năng tương đương là tạo ra một kiểu dữ liệu có cấu trúc giống một câu lệnh select mà ta tạo ra. Có thể duyệt dọc.
Tôi nghe nói hình như trên Oracle 9i có hỗ trợ câu lệnh như vậy nhưng chưa thử qua hoặc thấy ví dụ nào, Hi vọng có thể trả lời sớm hơn. Các cursor của Oracle 9i có thể duyệt ngược được(đã được thử nghiêm)
Ngoài ra trong Oracle có một loại bảng TEMPORARY cho phép dữ liệu chỉ sử dụng trong một transaction hoặc trong một session.

Ara
01-12-2002, 20:57
Cám ơn bạn, tôi đã thử loại bảng Global Temporary rồi và thấy nó khá hiệu quả, nhưng khi lựa chọn option ON COMMIT PRESERVE thì khi chạy lệnh COMMIT thì không thấy dữ liệu trong bảng temporary này tự xoá dữ liệu, chỉ khi đóng hẳn SQLPlus thì data trong bảng mới được xóa, vậy bạn có thể giải thích cho tôi về sự khác biệt giữa transaction và session trong Oracle được không? Cám ơn nhiều

ctr_alt_del
02-12-2002, 10:57
Tùy chọn của bạn là dữ liệu tồn tại trong cae session, nếu muốn nó chỉ tồn tại trong một transaction thì phải dùng tuỳ chọn là ON COMMIT DELETE ROWS khi tạo bảng này.

ctr_alt_del
02-12-2002, 11:04
Ta có thể hiểu một session là một quá trình từ lúc connect vào CSDL đến khi disconnect hoặc chuyển sang sử dụng với user khác nhưng vẫn dùng chương trình đó.
Sử dụng lệnh :
Select usrenv('sessionid') from dual; để biết số session của mình.
Trong một session ta có thể có nhiều transaction. Được tính từ lúc ta bắt đầu thực hiện một lệnh DML đến lúc ta thực hiện lệnh rollback hoặc commit.

Ara
02-12-2002, 12:06
Cám ơn Ctrl_Alt_Del nha.

Ara
13-12-2002, 15:30
Có vấn đề gì không khi mà declare một cursor trỏ đến temporary table?

ctr_alt_del
14-12-2002, 13:30
không ảnh hưởng gì cả vì ta có được cấu trúc đúng và dữ liệu của ta trong bảng temporary luôn consistency.

Ara
14-12-2002, 17:56
Vậy temporary table có tối ưu không, khi mà cứ phải tạo ra một bảng có cấu trúc giống với cấu trúc của một recordset mà ta muốn procedure trả về?.

ctr_alt_del
15-12-2002, 10:14
Vậy thì bạn cứ dùng cursor của PLSQL là xong vừa không phải tạo bảng, chỉ cần tối ưu bộ nhớ cho nó đừng load cả cái bảng to tướng là được