Trong SQL Server, bạn có thể làm những việc như thế này:Có một Oracle tương đương với SQL Server's OUTPUT INSERTED. *?
INSERT INTO some_table (...) OUTPUT INSERTED.*
VALUES (...)
Vì vậy, bạn có thể chèn bộ tùy ý các cột/giá trị và có được những kết quả trở lại. Có cách nào để làm điều này trong Oracle?
Điều tốt nhất tôi có thể đưa ra là thế này:
INSERT INTO some_table (...)
VALUES (...)
RETURNING ROWID INTO :out_rowid
... sử dụng: out_rowid như là một biến ràng buộc. Và sau đó sử dụng truy vấn thứ hai như sau:
SELECT *
FROM some_table
WHERE ROWID = :rowid
... nhưng điều này không hoàn toàn giống như trả về mọi thứ trong cột, không chỉ các cột tôi đã chèn.
Có cách nào tốt hơn để làm điều này mà không cần sử dụng nhiều PL/SQL và tốt nhất là chỉ với một truy vấn?
Nếu đó là các cột bạn quan tâm (không phải là dữ liệu hàng) ... - Làm thế nào bạn có được (...)? Chắc chắn vào thời điểm đó bạn biết cột nào đang được tham chiếu trong chèn? –
Tôi chỉ đọc trên OUTPUT INSERTED (http://msdn.microsoft.com/en-us/library/ms177564.aspx). Dường như nó cho phép bạn chọn xem dữ liệu hàng trả về là trước hoặc sau khi bất kỳ trình kích hoạt bảng nào đã chạy. Mệnh đề RETURNING của Oracle không hỗ trợ điều này - nó chỉ cung cấp cho bạn dữ liệu sau khi các trình kích hoạt đã có cơ hội thay đổi nó. –
@ Jeffrey Kemp - Tôi sẽ biết những cột đó là gì. Tuy nhiên, cơ sở dữ liệu nên. :-) –