これにより、匿名の複合値が作成されます:
select (1, 'a');
例:
=> select (1, 'a');
row
-------
(1,a)
(1 row)
=> select row(1, 'a');
row
-------
(1,a)
(1 row)
これは単一の複合値であり、複数の値ではないことに注意してください。
細かいマニュアルから:
8.16.2。複合値入力
複合値をリテラル定数として書き込むには、フィールド値を括弧で囲み、コンマで区切ります。任意のフィールド値を二重引用符で囲むことができます。カンマまたは括弧が含まれている場合は、二重引用符で囲む必要があります。
[...]
ROW
式の構文を使用して、複合値を作成することもできます。ほとんどの場合、これは文字列リテラル構文よりもかなり簡単に使用できます。これは、引用符の複数のレイヤーについて心配する必要がないためです。上記ですでにこの方法を使用しています:ROW('fuzzy dice', 42, 1.99) ROW('', 42, NULL)
ROW
式に複数のフィールドがある限り、キーワードは実際にはオプションであるため、次のように簡略化できます。('fuzzy dice', 42, 1.99) ('', 42, NULL)
行コンストラクター セクションも興味深いかもしれません。
あなたがこれを言うとき:
INSERT INTO circuit (id_circuit, description, date_start, date_end, speed,
length, duration)
SELECT (...)
FROM segment seg, wgs cir where seg.id = 13077
SELECT
句には、全体として1つの列しかありません(...)
式は単一の値を表します。解決策は、これらの括弧を単に削除することです:
INSERT INTO circuit (id_circuit, description, date_start, date_end, speed, length, duration)
SELECT seg.id_segment, ..., (seg.date_end - seg.date_start)
FROM segment seg, wgs cir where seg.id = 13077