34

SELECT INTO関数の1つで一時テーブルを作成するために使用したいと思います。SELECT INTOSQLでは機能しますが、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でタイプの変数を使用できますが、そのレコードからデータを取得するときに構造を定義する必要があります。本当に簡単です-クエリの同じ構造のテーブルを自動的に作成します。これが関数内で機能しない理由について誰かが説明していますか?recordSELECT INTOSELECT

SELECT INTO宣言した変数を選択できるため、PL/pgSQLでは動作が異なるようです。ただし、一時テーブル構造を宣言したくありません。SQLの場合と同じように、構造が自動的に作成されることを望みます。

4

1 に答える 1

55

試す

CREATE TEMP TABLE mytable AS
SELECT *
FROM orig_table;

http://www.postgresql.org/docs/current/static/sql-selectinto.htmlによる

CREATE TABLE ASは、機能的にはSELECTINTOに似ています。この形式のSELECTINTOは、INTO句の解釈が異なるため、ECPGまたはPL / pgSQLでは使用できないため、CREATETABLEASが推奨される構文です。さらに、CREATE TABLE ASは、SELECTINTOによって提供される機能のスーパーセットを提供します。

于 2012-08-16T00:38:59.187 に答える