- PostgreSQL có thể thực hiện liên kết giữa hai thủ tục ~ trong đó các cột không được biết cho đến thời gian chạy không?
Câu trả lời cơ bản là đơn giản vì hiện tại không có thủ tục nào được lưu trữ trong Postgres (lên đến Postgres 10), chỉ là các chức năng - cung cấp hầu như nhưng không hoàn toàn giống chức năng, như bạn đã trình bày trong câu hỏi.
Và bất kỳ chức năng nào cũng có thể được sử dụng trong FROM
mệnh đề của một SELECT
truy vấn giống như bất kỳ bảng nào khác.
Cập nhật:
Thủ tục SQL ("thủ tục được lưu trữ") được giới thiệu với Postgres 11.
Hướng dẫn sử dụng cho CREATE PROCEDURE
.
Bản thân SQL yêu cầu biết kiểu trả về trong thời gian chạy. Có một viền-hoa :bạn có thể khai báo kiểu trả về bằng lệnh gọi hàm bằng cách sử dụng kiểu đa hình . Hướng dẫn chi tiết tại đây (chương cuối phù hợp nhất với bạn):
- Cấu trúc lại một hàm PL / pgSQL để trả về kết quả đầu ra của các truy vấn SELECT khác nhau
- Nó có thể làm tương tự không, ngoại trừ việc sử dụng các thủ tục được lưu trữ trong cơ sở dữ liệu của bên thứ 3 bên ngoài (có thể thông qua trình bao bọc dữ liệu nước ngoài hoặc một số cơ chế khác)?
Đó là một KHÔNG , cũng dựa trên cùng một nguyên tắc. Nếu bạn sử dụng các bảng nước ngoài, bạn phải cung cấp kiểu trả về được xác định rõ ràng bằng cách này hay cách khác.
Bạn có thể có thể gộp toàn bộ hàng kết quả từ một thủ tục được lưu trữ trên SQL-Server thành một biểu diễn văn bản được phân tách bằng tab duy nhất, nhưng sau đó (ngoài việc dễ xảy ra lỗi và không hiệu quả) bạn có một cột duy nhất và cần thông tin meta xác định các cột riêng lẻ một hoặc cách khác để trích xuất các cột - bắt 22.