sql >> Database teknologi >  >> RDS >> PostgreSQL

Deklarer variabel af sammensat type i PostgreSQL ved hjælp af %TYPE

Brug %ROWTYPE i så fald.

Rediger - simpel sag

Tests fra A.H. og DavidEG har vist, at dette ikke virker. Interessant problem!
Du kan prøve en løsning . Så længe din definition er som eksemplet, kan du simpelthen ty til

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

Men dit egentlige problem er nok ikke så enkelt som det?

Rediger 2 - det virkelige problem

Som forventet er det virkelige problem mere komplekst:en polymorf inputtype .
Løsning for det scenarie var sværere, men burde fungere fejlfrit:

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;

Ring til:

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

Se det fulde output:

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

Bemærkning til PostgreSQL 9.0+

Der har været en afgørende opdatering i v9.0. Jeg citerer udgivelsesbemærkningerne :

Ergo, ud over min løsning, kan du bruge inputvariabler direkte.

Dynamiske filnavne




  1. Kom godt i gang med Oracle LiveSQL

  2. vælg tilfældig værdi baseret på sandsynlighed chance

  3. NULL-kompleksiteter – Del 3, Manglende standardfunktioner og T-SQL-alternativer

  4. MySQL indsætter ikke en omvendt skråstreg