坂井です。

 POLYGON 関数、そのように線の断片を与えると結合してくれるようなものではなく(そういう関数もほしいのですが=LineMerge()みたいに=まだ見あたらないですね)、
閉じた LineString 、つまり、単なるポリゴンの縁取り部分の線を、中身の詰まったPOLYGON にしてくれるものだと思います。

なので、
 SELECT ST_AsText(
POLYGON(
ST_LineFromText('LINESTRING(1 1, 1 5, 5 5, 5 1, 1 1)'),
ST_LineFromText('LINESTRING(2 2, 3 3, 3 2, 2 2)')
)
);

のようにして使います。
第2引数以下は、WKTのPOLYGONの書き方と同様、くり抜く部分かと思います。

 @変数が使えないのは、渡辺さんもかかれているとおり、何故ですかね。。使えても良さそうな場所でもあり、若干バグ報告な香りもしますが、他の皆さんからの情報も伺いたいところです。




2019年2月18日(月) 11:47 落合 司郎 <s.ochiai@taiyokakuchi.co.jp>:
お世話になります。

関数Polygon(ls1,ls2,...)を以下のように試してみましたが、以下のエラーが出てポリゴンを作れません。
MySQL ver5.7とver8.0の二つで試しましたが、結果は同じでした。
ちなみに、Polygon(ls1,ls2,...)の引数として渡したパラメータの型を確認しましたが、全て'LINESTRING'となっています。
何がいけないのか、教えてください。

Error Code: 1367. Illegal non geometric '(@`ls1`)' value found during
parsing

実行したスクリプト
SET
@ls1 = ST_LineFromText('linestring(4010 5009,4015 5005)'),
@ls2 = ST_LineFromText('linestring(4015 5005,4018 5010)'),
@ls3 = ST_LineFromText('linestring(4018 5010,4012 5010)'),
@ls4 = ST_LineFromText('linestring(4012 5010,4018 5013)'),
@ls5 = ST_LineFromText('linestring(4018 5013,3995 5013)'),
@ls6 = ST_LineFromText('linestring(3995 5013,3995 5000)'),
@ls7 = ST_LineFromText('linestring(3995 5000,4010 5009)');
select
ST_GeometryType(@ls1),ST_GeometryType(@ls2),ST_GeometryType(@ls3),ST_GeometryType(@ls4),ST_GeometryType(@ls5),ST_GeometryType(@ls6),ST_GeometryType(@ls7);
select ST_AsText(@ls1);
SET @npoly = POLYGON(@ls1,@ls2,@ls3,@ls4,@ls5,@ls6,@ls7);# ここでエラー
select @npoly,ST_GeometryType(@npoly),ST_AsText(@npoly);

実行環境:
OS:Windows 8.0 64ビット
MySQL:Ver.5.7.18-log
Workbench:Ver.6.3.9