2017-11-21 14 views
0

iは、一時テーブル、Postgresqlの

CREATE TEMPORARY TABLE temp_location 
    (
     city VARCHAR(30), 
     street VARCHAR(30) 
    ) 
    ON COMMIT DELETE ROWS; 

を持っていると私は私の手順

CREATE OR REPLACE FUNCTION fexample(
    pcity character varying) 
    RETURNS void AS 
$BODY$ 
DECLARE 
BEGIN 

    select * from temp_location where city = pcity; 
end; 
$BODY$ 
    LANGUAGE plpgsql VOLATILE SECURITY DEFINER 
    COST 100; 

オラクルで働いて、この方法では、この表を使用したいが、ありませんでpostgresqlのあなたが使用することができ

+1

。 Oracleは - ちょうどPostgresのように - クエリの結果をどこかに保存する必要があります。 OracleまたはPostgresのストアド・プロシージャにselect文を書くだけでは意味がありません。あなたはそのデータで_何かをする必要があります。それを返すか、列の値をローカル変数に格納します。 –

答えて

2

CREATE OR REPLACE FUNCTION fexample(pcity VARCHAR(30)) 
    RETURNS TABLE(c VARCHAR(30),a VARCHAR(30)) AS 
$$ 
    select * from temp_location where city = pcity; 
$$ 
    LANGUAGE sql; 

DBFiddle Demo

+0

いいえ、私は手順で使用する必要があります。例えば、forループなどのC(Qを選択* TEMP_LOCATION Qから。)のループ 端ループの 。 – piscu

+1

@piscu:あなたは間違っている、そのコードはうまく動作します:あなただけのデータを返すようにしたい場合は、これは –

0

私はボートを逃していない限り、私はあなたがこのような何かをしたいと思う:

CREATE OR REPLACE FUNCTION fexample(pcity character varying) 
    RETURNS void AS 
$BODY$ 
DECLARE 
    rw temp_location%rowtype; 
BEGIN 

    for rw in select * from temp_location where city = pcity 
    loop 
     -- do stuff with rw 
    next rw; 

end; 
$BODY$ 
    LANGUAGE plpgsql VOLATILE SECURITY DEFINER 
    COST 100; 

あなたが変数として行型を宣言する場合は、あなたがして、クエリの中でそれを消費することができます。オラクルでは動作しません

+0

あなたのコードは、PostgreSQLが手順で – piscu

+0

@piscuを一時テーブルを呼び出していないため、作業をしない行う方法はありますPostgresで –