sql >> Database >  >> RDS >> PostgreSQL

CREATE VIEW specificeert meer kolomnamen dan kolommen

Beschouw het eenvoudige voorbeeld:

postgres=# create function foofunc() returns table(a int, b text) language sql as $$ select 1, 'a'::text $$;
postgres=# select foofunc();
╔═════════╗
║ foofunc ║
╠═════════╣
║ (1,a)   ║
╚═════════╝

Wanneer een functie wordt aangeroepen in de kolom/variabele-context, wordt de enkele waarde van het opgegeven terugkerende type geretourneerd. Dit is de bron van de fout:select van de weergave geeft slechts één kolom terug.

Als de functie echter wordt aangeroepen in de tabelcontext, worden de waarden als een echte tabel geretourneerd:

postgres=# select * from foofunc();
╔═══╤═══╗
║ a │ b ║
╠═══╪═══╣
║ 1 │ a ║
╚═══╧═══╝

U moet dus de tweede benadering gebruiken bij het maken van de weergave:

CREATE VIEW v1 (c1, c2, c3, c4, c5) AS
  SELECT * FROM f1 (1, 2);



  1. Oracle Join-voorwaarde met Top 1

  2. MySQL Weekdag/Weekend tellen - Deel II

  3. Hoe een unieke sleutel uit de mysql-tabel te verwijderen

  4. MySQL LOAD DATA LOKAAL INFILE voorbeeld in python?