Bạn không thể trả về giá trị từ một DO
bản tường trình. Thay vào đó, hãy tạo một hàm plpgsql.
Có một số cách để xác định kiểu trả về với RETURNING
mệnh đề hoặc với OUT
thông số. Đọc hướng dẫn về CREATE FUNCTION
.
Có một số cách để trả về giá trị từ hàm. Đọc chương Trả về từ một hàm trong sách hướng dẫn.
Đặc biệt, vì bạn đang cố gắng trả về toàn bộ các hàng từ một bảng, bạn có thể sử dụng kiểu đã đăng ký của bảng cho khai báo hàm:
CREATE FUNCTION foo ()
RETURNING SETOF test_log
$func$
BEGIN
IF 'a' = 'a' THEN
RETURN QUERY
SELECT * FROM test_log LIMIT 10;
ELSE
RAISE WARNING $$Didn't work!$$;
END IF;
END
$func$ LANGUAGE plpgsql;
Gọi:
SELECT * FROM foo ();
Hoặc thử tìm kiếm tại đây trên SO. Tôi đã đăng nhiều ví dụ mã liên quan .
Giải pháp cho DO
tuyên bố
Nếu bạn không thể sử dụng một hàm, cách giải quyết hợp lý duy nhất với câu lệnh DO là sử dụng bảng tạm thời:
CREATE TEMP TABLE tbl_tmp AS
SELECT * FROM test_log LIMIT 0;
$do$
BEGIN
IF 'a' = 'a' THEN
INSERT INTO tbl_tmp
SELECT * FROM test_log LIMIT 10;
ELSE
RAISE WARNING $$Didn't work!$$;
END IF;
END
$do$ LANGUAGE plpgsql;
SELECT * FROM tbl_tmp;
Bảng tạm thời tự động bị xóa vào cuối phiên .