Сообщение об ошибке: у запроса нет места назначения для данных результата
Я новичок в 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)