PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Функцията Postgres, връщаща таблица, не връща данни в колони

За да получите отделни колони вместо типа ред, извикайте функцията с:

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$;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL - как да изобразя дата в различна часова зона?

  2. Намерете зависими обекти за таблица или изглед

  3. Подготвено изявление за Postgresql в Rails

  4. Rails 3.1 - Натискане към Heroku - Грешки при инсталиране на postgres адаптер?

  5. Създаване на дъмп на база данни за конкретни таблици и записи Postgres