Câu trả lời:
Bạn chỉ có thể có một tuyên bố sau CTE. Tuy nhiên, bạn có thể xác định các CTE tiếp theo dựa trên một CTE trước đó:
WITH t1 AS (
SELECT a, b, c
FROM table1
)
, t2 AS (
SELECT b
FROM t1
WHERE a = 5
)
SELECT *
FROM t2;
Cho rằng bạn đang cố gắng đếm các hàng và điền một con trỏ ref từ cùng một tập kết quả, có thể phù hợp hơn để thực hiện một trong các thao tác sau:
Cuối cùng, nếu truy vấn đủ đơn giản, chỉ cần viết nó một lần cho số đếm và một lần nữa cho con trỏ. Đơn giản và dễ đọc là nguyên tắc DRY trong trường hợp này.
Không, CTE hoặc with
mệnh đề được xác định trong phạm vi của một câu lệnh
Đôi khi, bạn có thể làm nhiều hơn những gì bạn mong đợi chỉ với một câu lệnh, ví dụ:
with w as (select v from t3)
insert all into t1(v) values(v)
into t2(v) values(v)
select v from w;
Cách Oracle 'bình thường' để lưu trữ các tập kết quả tạm thời (nếu bạn phải) là sử dụng bảng GTT :
GLOBAL TEMPORARY
.