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

Вземете резултат от заявка в изявление DO

Вие не можете връща стойности от DO изявление. Вместо това създайте функция plpgsql.

Има няколко начина за дефиниране на типа връщане с RETURNING клауза или с OUT параметри. Прочетете ръководството за CREATE FUNCTION .

Има няколко начина за връщане на стойности от функцията. Прочетете главата Връщане от функция в ръководството.

По-специално, тъй като се опитвате да върнете цели редове от таблица, можете да използвате регистрирания тип на таблицата за декларацията на функцията:

CREATE FUNCTION foo ()
  RETURNING SETOF test_log 
$func$
BEGIN

IF 'a' = 'a' THEN
  RETURN QUERY
  SELECT * FROM test_log LIMIT 10;
ELSE
   RAISE WARNING $$Didn't work!$$;
END IF;

END
$func$ LANGUAGE plpgsql;

Обаждане:

SELECT * FROM foo ();

Или опитайте да търсите тук в SO. Публикувах много свързани примери за код .

Заобиколно решение за DO изявление

Ако не можете да използвате функция, единственото половинчато разумно решение с израз DO е да използвате временна таблица:

CREATE TEMP TABLE tbl_tmp AS
SELECT * FROM test_log LIMIT 0;

$do$
BEGIN

IF 'a' = 'a' THEN
  INSERT INTO tbl_tmp
  SELECT * FROM test_log LIMIT 10;
ELSE
   RAISE WARNING $$Didn't work!$$;
END IF;

END
$do$ LANGUAGE plpgsql;

SELECT * FROM tbl_tmp;

Временните таблици се премахват автоматично в края на сесията .



  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 и ActiveRecord подизбират за състояние на състезание

  2. Как документирате кода на вашата база данни, за да видите зависимостите между обектите на базата данни?

  3. Rails автоматично присвояване на идентификатор, който вече съществува

  4. Как да заредите данни в pandas от голяма база данни?

  5. SELECT EXISTS срещу LIMIT 1