2010-07-26 27 views
5

Gần đây tôi đã tìm hiểu về CTE trong SQL Server và đang cố gắng sử dụng nó trong PL/SQL. Tuy nhiên, tôi không cần những lợi ích lặp lại của nó, tôi muốn sử dụng nó thay cho việc tạo ra một khung nhìn và để cải thiện hiệu năng truy vấn. Chỉ cần tìm một số hướng về mã nào có thể tương tự.Có điều gì giống như Biểu thức bảng chung tồn tại trong PL/SQL không?

+0

Đó là SQL chứ không phải PL/SQL. –

Trả lời

11

Trong Oracle này được gọi là subquery bao thanh toán, và nó hoạt động giống như trong SQL Server AFAIK:

with cte as (select * from emp) 
select * from cte join dept on dept.deptno = cte.deptno; 

Xem SELECT documentation và tìm kiếm cho "bao thanh toán".

+8

+1: Được hỗ trợ từ 9i, truy vấn phụ không hỗ trợ phần đệ quy cho đến 11g (bây giờ là ANSI) vì Oracle đã hỗ trợ các truy vấn bằng cách sử dụng cú pháp CONNECT BY ... Tôi không nhớ khi PostgreSQL bắt đầu hỗ trợ cú pháp, có thể trong v8.x. Nhưng CTEs/Subquery Factoring không cải thiện hiệu năng truy vấn, chỉ cần cú pháp khác nhau cho các bảng có nguồn gốc/lượt xem nội tuyến. –

+1

Rất cám ơn. Tôi đang sử dụng Oracle 8i mà sẽ giải thích lý do tại sao tôi nổi bật. Tôi đánh giá cao sự giúp đỡ! –

+1

Hàm đệ quy của mệnh đề 'with' không được hỗ trợ cho đến 11g R2. (Không có sẵn trong 11g R1.) Xem: http://download.oracle.com/docs/cd/E11882_01/server.112/e10592/wnsql.htm#sthref6 –

Các vấn đề liên quan