sql >> Databasteknik >  >> RDS >> PostgreSQL

CREATE VIEW anger fler kolumnnamn än kolumner

Tänk på det enkla exemplet:

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

När en funktion anropas i kolumn/variabelkontexten returnerar den det enda värdet av den angivna returnerande typen. Här är källan till felet:vyns select returnerar endast en kolumn.

Men om funktionen anropas i tabellkontexten returnerar den värdena som en sann tabell:

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

Så du bör använda den andra metoden när du skapar vyn:

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



  1. Hur man hittar kolumnnamn för alla tabeller i alla databaser i SQL Server

  2. Rekursiv MySQL-fråga med relationell innoDB

  3. MySQL/skrivfilfel (felkod 28) vid skapande av databas

  4. Hur tar man bort data från databasen genom att använda radioknappen i php?