sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur anger man kolumntyper för CTE (Common Table Expressions) i PostgreSQL?

Jag tror att du måste ange typerna i uttrycket VALUES i ditt fall:

WITH t (f0, f1) as (
  values 
     (1::bigint, 10::bigint),
     (2, 20)
)...

Du behöver bara typerna på den första uppsättningen värden, PostgreSQL kan sluta sig till resten.

Anta till exempel att vi har två funktioner:

create function f(bigint, bigint) returns bigint as $$
begin
    raise notice 'bigint';
    return $1 * $2;
end;
$$ language plpgsql;

create function f(int, int) returns int as $$
begin
    raise notice 'int';
    return $1 * $2;
end;
$$ language plpgsql;

Sedan

WITH t (f0, f1) as (
    values
        (1, 10),
        (2, 20)
)
select f(f0, f1) from t;

ger dig två int meddelanden medan

WITH t (f0, f1) as (
    values
        (1::bigint, 10::bigint),
        (2, 20)
)
select f(f0, f1) from t;

skulle ge dig två bigint meddelanden.



  1. MySQL:Begränsa två kolumner så att en av dem alltid är NULL

  2. Sökkommando för att söka efter kolumn/fält i SQLPLUS för Oracle 10.2

  3. .Net - Skapa en On-Demand-postuppsättning istället för att dra in allt i minnet på en gång

  4. utföra datetime-relaterade operationer i PHP