Сообщение об ошибке: у запроса нет места назначения для данных результата

Я новичок в postgreSQL. Я пытаюсь конвертировать SQL store procedure в postgreSQL store function. Я попытался, как показано ниже, функция магазина успешно создана, но когда я пытаюсь выполнить, я получаю следующее сообщение об ошибке. Я не понимаю, где мне нужно заменить PERFORM,

ERROR:  query has no destination for result data
HINT:  If you want to discard the results of a SELECT, use PERFORM instead.

Процедура хранения SQL

CREATE  PROCEDURE [dbo].[roomType]
    @intInstId int
AS
BEGIN
    SELECT 
        nClientRoomTypeID,sClientRTDesc,sClientRTName,sClientRTCode
    FROM 
        ClientRoomType
    WHERE 
        ClientRoomType.nInstID=@intInstId
    ORDER BY 
        ClientRoomType.sClientRTCode
END
GO

Функция PostgreSQl Store

CREATE OR REPLACE  FUNCTION roomType (int_inst_id int)
RETURNS VOID
AS $$
BEGIN
    SELECT 
        nclient_room_type_id,sclient_rt_desc,sclient_rt_name,sclient_rt_code
    FROM 
        clientroomtype
    WHERE 
        clientroomtype.ninst_id=int_inst_id
    ORDER BY 
        clientroomtype.sclient_rt_code;
END;
$$ LANGUAGE plpgsql;

1 ответ

Решение

Я предполагаю, что вы пытаетесь вернуть результат запроса с помощью вашей функции. Вам на самом деле не нужно plpgsql язык для этого, но в случае, если вам нужно что-то еще, используйте этот синтаксис:

CREATE OR REPLACE FUNCTION roomType (int_inst_id int)
RETURNS TABLE (res_nclient_room_type_id INT,res_sclient_rt_desc TEXT,res_sclient_rt_name TEXT, res_sclient_rt_code TEXT)
AS $$
BEGIN
    RETURN QUERY 
    SELECT 
        nclient_room_type_id,sclient_rt_desc,sclient_rt_name,sclient_rt_code
    FROM 
        clientroomtype
    WHERE 
        clientroomtype.ninst_id=int_inst_id
    ORDER BY 
        clientroomtype.sclient_rt_code;
END;
$$ LANGUAGE plpgsql;

Как это использовать?

SELECT * FROM roomType(1);

Поскольку у меня нет ваших данных, я не могу их проверить. Но следует этому принципу:

CREATE OR REPLACE FUNCTION f ()
RETURNS TABLE (b boolean, x int)
AS $$
BEGIN
    RETURN QUERY SELECT TRUE, 1;
END;
$$ LANGUAGE plpgsql;

SELECT * FROM f();

 b | x 
---+---
 t | 1
(1 Zeile)
Другие вопросы по тегам