Một số câu trả lời có thể cho bạn biết rằng Oracle có các biến bảng và nó có ở một mức độ nhất định. Tuy nhiên, hầu hết các câu trả lời sẽ cho bạn biết rằng bạn hoàn toàn không nên làm điều này trong Oracle; đơn giản là không cần.
Trong trường hợp của bạn, tôi chỉ cần sử dụng CTE:
with users as (
select 1001 as ID, 'Bob' as Name, 25 as Age, 'M' as Gender from dual
union
select 1021 as ID, 'Sam' as Name, 29 as Age, 'F' from dual
)
, grades as (
select 1001 as UserID , 120 as ClassID, 4 as Grade from dual
Union
select 1001 as UserID , 220 as ClassID, 2 as Grade from dual
Union
select 1021 as UserID , 130 as ClassID, 4 as Grade from dual
Union
select 1021 as UserID , 230 as ClassID, 4 as Grade from dual
Union
select 1021 as UserID , 340 as ClassID, 2 as Grade from dual
)
select u.ID, u.Name, AVG(g.grade) as gpa
from users u
join grades g on u.ID = g.UserID
group by u.ID, u.Name
CẬP NHẬT:Câu trả lời mà tôi đã cố gắng nhận được trong một thời gian dài là trong nhận xét của Ben bên dưới mà tôi đưa vào đây:"Không có biến nào, bạn có thể tạo nhanh và kết hợp với các bảng khác trong SQL tiêu chuẩn @wcm, vâng . Có một số loại đối tượng khác nhau có thể được tạo cho phép bạn thực hiện điều này, nhưng không chính xác như bạn làm trong T-SQL ".