За да получите отделни колони вместо типа ред, извикайте функцията с:
SELECT * FROM testfunction();
Точно както бихте избрали всички колони от таблица.
Помислете също и за тази прегледана форма на вашата тестова функция:
CREATE OR REPLACE FUNCTION testfunction()
RETURNS TABLE(a int, b int)
LANGUAGE plpgsql AS
$func$
DECLARE
_a int := 0;
_b int := 0;
BEGIN
CREATE TABLE tempTable AS SELECT _a, _b;
RETURN QUERY SELECT * FROM tempTable;
DROP TABLE tempTable;
END
$func$;
По-специално:
DECLARE
ключовата дума е необходима само веднъж.
Избягвайте да декларирате параметри, които вече са (имплицитно) декларирани като OUT
параметри в RETURNS TABLE (...)
клауза.
Не използвайте идентификатори на CaMeL без кавички в Postgres. Работи, идентификаторите без кавички се прехвърлят към малки букви, но това може да доведе до объркващи грешки. Вижте:
- Именната на колоните в PostgreSQL зависят ли от малките букви?
Временната таблица в примера е напълно безполезна (вероятно прекалено опростена). Примерът, както е даден, се свежда до:
CREATE OR REPLACE FUNCTION testfunction(OUT a int, OUT b int)
LANGUAGE plpgsql AS
$func$
BEGIN
a := 0;
b := 0;
END
$func$;