2012-08-16 53 views
22

SELECT INTOを使用して、自分の関数の1つに一時テーブルを作成したいと考えています。 SELECT INTOはSQLでは動作しますが、PL/pgSQLでは動作しません。SELECT .. INTOを使ってPL/pgSQLにテーブルを作成する

この文は、テーブルは(orig_tableが関係として存在する場合)mytableは呼ば作成します。

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; 

私ができますSELECT INTO PL/pgSQL内のタイプrecordの変数ですが、そのレコードからデータを取得するときに構造体を定義する必要があります。 SELECT INTOは本当に簡単です - SELECTクエリと同じ構造のテーブルを自動的に作成します。なぜ誰かが関数内で動作しない理由について説明していますか?

宣言した変数を選択できるので、SELECT INTOはPL/pgSQLで動作が異なるようです。私は一時的なテーブル構造を宣言したくありません。 SQLのように自動的に構造体を作成したいと思っています。

答えて

36

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

CREATE TABLE AS is functionally similar to SELECT INTO. CREATE TABLE AS is the recommended syntax, since this form of SELECT INTO is not available in ECPG or PL/pgSQL, because they interpret the INTO clause differently. Furthermore, CREATE TABLE AS offers a superset of the functionality provided by SELECT INTO.

+0

おかげパー

CREATE TEMP TABLE mytable AS SELECT * FROM orig_table; 

をお試しください!私は以前この問題を解決していたことを知っていました。私はpostgresqlの文書からその文章を覚えています。私はちょうどCREATE TABLE ASについて完全に忘れてしまった。 – nnyby

+0

それは私がちょっと困ってしまった - ありがとう。 – mvexel

関連する問題