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

Декларирайте променлива от съставен тип в PostgreSQL с помощта на %TYPE

Използвайте %ROWTYPE в такъв случай.

Редактиране - прост случай

Тестовете на A.H. и DavidEG показаха, че това няма да работи. Интересен проблем!
Можете да опитате заобиколно решение . Стига вашето определение да е като примера, можете просто да прибягвате до

CREATE FUNCTION test(param1 comp_type)
  RETURNS integer AS
$BODY$ 
DECLARE
    myvar comp_type;
BEGIN
    return 1;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE;

Но вашият истински проблем вероятно не е толкова прост?

Редактиране 2 – истинският проблем

Както се очаква, истинският проблем е по-сложен:полиморфен тип вход .
Заобиколно решение тъй като този сценарий беше по-труден, но трябваше да работи безупречно:

CREATE FUNCTION test(param1 anyelement, OUT a integer, OUT myvar anyelement)
  RETURNS record AS
$BODY$
BEGIN
    myvar := $1;  -- myvar has now the required type.

    --- do stuff with myvar.

    myvar := NULL;  -- reset if you don't want to output ..
    a := 1;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE;

Обаждане:

SELECT a FROM test('("foo")'::comp_type); -- just retrieve a, ignore myvar

Вижте пълния резултат:

SELECT * FROM test('("foo")'::comp_type);

Забележка за PostgreSQL 9.0+

Има важна актуализация във v9.0. Цитирам бележките по изданието :

Следователно, в допълнение към моето решение, можете да използвате директно входни променливи.

Имена на динамични файлове




  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. Допълване на нули вляво в postgreSQL

  3. Параметризирана заявка:Проверете дали полето е в масив от стойности в израза SELECT

  4. Как да укажа „поръчка по“ на двусмислена колона с помощта на пролетна партида и postgres?

  5. Динамична UNION ALL заявка в Postgres