2013-06-06 29 views
18

Tôi đang cố tạo hàm trả về kết quả được chọn. Khi tôi gọi postgres tôi chức năng như select * from tst_dates_func() này, tôi nhận được một lỗi như hình dưới đây:Chức năng với truy vấn SQL không có đích cho dữ liệu kết quả

ERROR: query has no destination for result data 
HINT: If you want to discard the results of a SELECT, use PERFORM instead. 
CONTEXT: PL/pgSQL function "tst_dates_func" line 3 at SQL statement 

********** Error ********** 

ERROR: query has no destination for result data 
SQL state: 42601 
Hint: If you want to discard the results of a SELECT, use PERFORM instead. 
Context: PL/pgSQL function "tst_dates_func" line 3 at SQL statement 

Dưới đây là chức năng tôi đã tạo:

CREATE OR REPLACE FUNCTION tst_dates_func() 
    RETURNS TABLE(date_value date, date_id int, date_desc varchar) as 
$BODY$ 
BEGIN 
    select a.date_value, a.date_id, a.date_desc from dates_tbl a; 
END; 
$BODY$ 
     LANGUAGE plpgsql; 

Tôi không chắc chắn lý do tại sao tôi nhận được lỗi trên . Tôi muốn chạy select * from tst_dates_func(); và nhận lại dữ liệu. Hoặc tiếp tục tham gia tập kết quả nếu cần. vấn đề ở đây là gì?

+0

Hãy xem các ví dụ trong cuốn hướng dẫn: http://www.postgresql.org/docs/current /static/plpgsql-control-structures.html#PLPGSQL-STATEMENTS-RETURNING và http://www.postgresql.org/docs/current/static/sql-createfunction.html#SQL-CREATEFUNCTION-EXAMPLES –

+0

LANGUAGE phải là SQL, phải không? –

+0

Tôi cần nó là hàm plpgsql. Cộng với ngôn ngữ là SQL, tôi sẽ cần phải đặt câu lệnh truy vấn vào chuỗi với các trích dẫn và tôi không muốn làm điều đó. –

Trả lời

31

Làm điều đó như SQL đồng bằng

CREATE OR REPLACE FUNCTION tst_dates_func() 
    RETURNS TABLE(date_value date, date_id int, date_desc varchar) as 
$BODY$ 
    select a.date_value, a.date_id, a.date_desc from dates_tbl a; 

$BODY$ 
     LANGUAGE sql; 

Nếu bạn thực sự cần plpgsql sử dụng return query

CREATE OR REPLACE FUNCTION tst_dates_func() 
    RETURNS TABLE(date_value date, date_id int, date_desc varchar) as 
$BODY$ 
BEGIN 
    perform SELECT dblink_connect('remote_db'); 
    return query 
    select a.date_value, a.date_id, a.date_desc from dates_tbl a; 

END; 
$BODY$ 
     LANGUAGE plpgsql; 
+0

Cảm ơn bạn đã trả lời. Tôi cần phải thiết lập một dblink trong hàm. Trước khi thực hiện kết quả truy vấn trả về. Vì vậy, đây là một cái gì đó tôi muốn thêm trước khi điều khoản truy vấn trở lại và khi tôi thêm nó, tôi nhận được một lỗi tương tự như đã đề cập ở trên. 'SELECT dblink_connect ('remote_db')' Làm thế nào tôi có thể đưa nó vào hàm plpgsql ở trên? Cảm ơn bạn trước –

+0

@ImtiazAhmad Sử dụng 'perform' như trong câu trả lời đã chỉnh sửa của tôi. –

+0

@Clodoaldo Neto, +1 tuyệt vời !. – Meem