SELECT INTO
を使用して、関数の1つで一時テーブルを作成したい。 SELECT INTO
はSQLで機能しますが、PL/pgSQLでは機能しません。
次のステートメントは、mytableというテーブルを作成します(orig_table
がリレーションとして存在する場合):
SELECT *
INTO TEMP TABLE mytable
FROM orig_table;
しかし、この関数をPostgreSQLに入れると、エラーが発生します:ERROR: "temp" is not a known variable
CREATE OR REPLACE FUNCTION whatever()
RETURNS void AS $$
BEGIN
SELECT *
INTO TEMP TABLE mytable
FROM orig_table;
END; $$ LANGUAGE plpgsql;
PL/pgSQL内でSELECT INTO
型の変数record
を使用できますが、そのレコードからデータを取得するときに構造を定義する必要があります。 SELECT INTO
は本当にシンプルです-SELECT
クエリと同じ構造のテーブルを自動的に作成します。これが関数内で機能しない理由について誰にも説明がありますか?
SELECT INTO
は、宣言した変数を選択できるため、PL/pgSQLでは異なる動作をするようです。ただし、一時テーブル構造を宣言したくありません。 SQLの場合と同じように、構造を自動的に作成するだけでいいのですが。
試して
CREATE TEMP TABLE mytable AS
SELECT *
FROM orig_table;
http://www.postgresql.org/docs/current/static/sql-selectinto.html
CREATE TABLE ASは、機能的にはSELECT INTOに似ています。この形式のSELECT INTOは、INTO句の解釈が異なるため、ECPGまたはPL/pgSQLでは使用できないため、CREATE TABLE ASが推奨される構文です。さらに、CREATE TABLE ASは、SELECT INTOによって提供される機能のスーパーセットを提供します。