sql >> Database >  >> RDS >> PostgreSQL

Declareer variabele van samengesteld type in PostgreSQL met %TYPE

Gebruik %ROWTYPE in dat geval.

Bewerken - eenvoudig geval

Tests door A.H. en DavidEG hebben aangetoond dat dit niet werkt. Interessant probleem!
Je zou een oplossing kunnen proberen . Zolang je definitie hetzelfde is als het voorbeeld, kun je gewoon je toevlucht nemen tot

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

Maar uw echte probleem is waarschijnlijk niet zo eenvoudig?

Bewerken 2 - het echte probleem

Zoals verwacht is het echte probleem complexer:een polymorf invoertype .
Oplossing voor dat scenario was moeilijker, maar zou feilloos moeten werken:

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;

Bel:

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

Zie volledige output:

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

Opmerking voor PostgreSQL 9.0+

Er is een cruciale update geweest in v9.0. Ik citeer de release-opmerkingen :

Ergo, naast mijn tijdelijke oplossing, kun je invoervariabelen direct gebruiken.

Dynamische bestandsnamen




  1. PARTITIE DOOR met en zonder KEEP in Oracle

  2. Hoe verbinding maken met MySQL met X509 met behulp van JDBC?

  3. kan geen externe sleutel in mySQL laten vallen

  4. Hoe de waarden van identiteitskolommen programmatisch te wijzigen?