PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zadeklaruj zmienną typu złożonego w PostgreSQL za pomocą %TYPE

Użyj %ROWTYPE w takim przypadku.

Edytuj – prosty przypadek

Testy przeprowadzone przez AH i DavidEG wykazały, że to nie zadziała. Interesujący problem!
Możesz wypróbować obejście . Dopóki twoja definicja jest podobna do przykładu, możesz po prostu się do niej odwołać

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

Ale twój prawdziwy problem prawdopodobnie nie jest taki prosty?

Edytuj 2 — prawdziwy problem

Zgodnie z oczekiwaniami, prawdziwy problem jest bardziej złożony:polimorficzny typ danych wejściowych .
Obejście dla tego scenariusza było trudniej, ale powinno działać bezbłędnie:

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;

Zadzwoń:

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

Zobacz pełne dane wyjściowe:

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

Uwaga dla PostgreSQL 9.0+

W wersji 9.0 pojawiła się kluczowa aktualizacja. Cytuję informacje o wydaniu :

Ergo, oprócz mojego obejścia, możesz bezpośrednio wykorzystać zmienne wejściowe.

Dynamiczne nazwy pól




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Obliczenia n-tego percentyla w postgresql

  2. błąd połączenia z bazą danych związany z kodowaniem

  3. Kolumna PostgreSQL nie istnieje, ale faktycznie istnieje

  4. Generowanie uporządkowanej rangi sekwencji na złożonym zapytaniu

  5. Jak stworzyć unikalny indeks z warunkowym i podzapytaniem w PostgreSQL?