2016-06-17 12 views
0

pgAdmin IIIを使用して、PL/pgSQL関数を使用して私のpostgres DBにテーブルを作成します。次の一連のコマンドは、私の仕事をうまくやってくれます。plggqlを使用してpostgres DBにテーブルを作成する

Create or Replace Function mk_tbl() 
Returns Integer As $$ 
Declare 
Begin 
Drop Table if exists sel_streets; 
Create Table sel_streets 
(
id Integer, 
Geom geometry 
); 
Create Index sel_streets_indx 
ON sel_streets Using 
gist (geom); 
Return (1); 
End $$ Language plpgsql volatile; 

私は、このコマンドで関数を呼び出しています:私の問題は、私はこの関数を呼び出すたびにある

Select mk_tbl(); 

、それはPostgresのDBのテーブルを作成するだけでなく、それを返し、「1」(SQLにエディタの出力パネル)を使用します。

Create or Replace Function mk_tbl() 
Returns Void As $$ 
... 

をしかし、私がしたいことだけDB私potgresでテーブルを作成する必要がありますし、何も返さない必要があり、この関数を呼び出すことです。このように構築し、私は最終的には機能が何かを返す必要があることを認識していますし、私はまた、ボイド使用することができます。 PL/pgSQLを使ってこれを行うことは可能ですか?

+0

は、ストアドプロシージャを「本物」です。残念なことに、Postgresはそれらをサポートしていないので、 'returns void'を使う必要があります。(無関係:言語名は識別子です。一重引用符で囲まないでください:' language plpgsql'を使うべきです)。 –

+2

performがあなたを助けないかどうかわかりません - 'do $$ begin mk_tbl()を実行します;終了; $$; ' –

+0

@a_horse_with_no_name:ありがとうございます。私はコードを編集しました。次に、PL/PythonまたはPL/Rを使用してこの関数を呼び出すと、これを行うことは可能ですか? –

答えて

1

空の結果に問題がありますか? DOステートメントを使用して

は、あなたがやりたいでしょう:あなたが探しているものを

DO LANGUAGE plpgsql $$BEGIN 
    PERFORM mk_tbl(); 
END;$$; 
+0

フィードバックに感謝し、問題はありません空の結果。しかし、クエリを実行して結果を破棄するのは良いことです。同様に、私はテーブルを作成したいが何も返さない。 –

+0

このコードブロックの使用方法に関する回答を更新することをお勧めします。 PLpgSQLまたはスタンドアロンのいずれか。それは私がまだ必要なことをすることができないので、これを有効な答えとするのがより有益です。 –

+0

私の答えのステートメントはSQLステートメントです。他のSQLステートメントと同じように実行できます。 'CREATE TABLE'文を実行しても結果は決してありません。 –

関連する問題