sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man skickar anpassad typ array till Postgres funktion

Du kan använda den alternativa syntaxen med en array literal istället för arraykonstruktorn, som är en Postgres funktionsliknande konstruktion och kan orsaka problem när du behöver skicka värden - som i ett förberett uttalande:

SELECT myschema.myfunc('0d6311cc-0d74-4a32-8cf9-87835651e1ee'
                  , '{"(0d6311cc-0d74-4a32-8cf9-87835651e1ee, 25)"
                    , "(6449fb3b-844e-440e-8973-31eb6bbefc81, 10)"}'::mytype[]);

Jag lade till en radbrytning mellan de två radtyperna i arrayen för visning. Det är lagligt.

Hur man hittar rätt syntax för alla bokstavligt?

Fråga bara Postgres. Här är en demo:

CREATE TABLE mytype (id uuid, amount numeric(13,4));

INSERT INTO mytype VALUES
  ('0d6311cc-0d74-4a32-8cf9-87835651e1ee', 25)
 ,('6449fb3b-844e-440e-8973-31eb6bbefc81', 10);

SELECT ARRAY(SELECT m FROM mytype m);

Returnerar:

{"(0d6311cc-0d74-4a32-8cf9-87835651e1ee,25.0000)","(6449fb3b-844e-440e-8973-31eb6bbefc81,10.0000)"}

db<>spela här

Alla tabeller (inklusive temporära tabeller) skapar implicit en radtyp med samma namn.



  1. Använd en utlösare för att stoppa en infogning eller uppdatering

  2. INFORMATION_SCHEMA vs sysobjects

  3. MySQL för lång varchar trunkering/felinställning

  4. Hur man subtraherar 30 dagar från det aktuella datumet med SQL Server