2009-10-27 8 views
21

は、我々はテーブルから何かを選択するストアドプロシージャを持っているとしましょう:私は後で選択するには、この手順からの結果を使用することができますどのようにMySqlストアドプロシージャ:プロシージャテーブルからの選択方法

 
CREATE PROCEDURE database.getExamples() 
SELECT * FROM examples; 

? (私はしかし、誰成功し

 
SELECT * FROM (CALL database.getExamples()) 

を試してみた。) 私は手順にoutVariable INTO ... SELECT使用する必要がありますか?または、代わりにテーブルを返す関数を使用する必要がありますか?

+0

解決策を見つけようとしていますが、私は以下のことを試していますが、明らかに戻り値の型( 'TABLE')は機能しません。

 CREATE PROCEDURE database.getExamples( OUT examplesTable TABLE /* <<< What datatype to use for a table? */ ) SELECT * FROM examples INTO examplesTable 
私はここに正しい道にいますか? – Cambiata

答えて

5

このスレッドの質問を再編集しました:Can a stored procedure/function return a table?。 明らかに、一時テーブルを使用しなければ不可能です。

+3

一時表なしでは不可能であることは明らかなのはなぜですか?これは質問に答えません。 – circuitry

+2

@circuitry文法は、MySQLが 'select * from getExmaples()... 'を許可しないことを明確にしています。必ずしもそれを行う方法が他にありません。これは不都合な問題です。 PostgreSQLでは、getExamples()...から '*を選択するのは簡単です。 –

+0

PSQLにマイグレーションする時間が来たようです... –

-2

あなたはその後、「手順」を再使用する場合は、その後、SELECT * FROM database.getExamples()

を行うことができますSQLサーバーでは、はい、私は、テーブル値関数に入れてしまいます。

そうでなければ、ストアドプロシージャ内の#temporaryテーブルにSELECT INTOすることができます。

+0

こんにちは!私はこれを試していますが、明らかにデータ型 "TABLE"は無効です。 CREATE PROCEDURE database.getExamples( OUT tablesTable/* <<<テーブルに使用するデータ型* /) SELECT * FROMの例INTO examplesTable – Cambiata

+3

SQL Server = Microsoft SQL Serverであり、MySQLとは異なる機能を持っています。これは、あなたがMS SQLで行うことができることの多くは、MySQLとその逆に行うことができないことを意味します。 OPはMySQLを要求します。 – Erk

2
CREATE TABLE #TempTable 
(OID int IDENTITY (1,1), 
VAr1 varchar(128) NOT NULL, 
VAr2 varchar(128) NOT NULL) 

Populate temporary table 

INSERT INTO #TempTable(VAr1 , VAr2) 
SELECT * FROM examples 
+1

ありがとうダニ! これは、毎回テーブル全体を再構築する必要があることを意味します。 それは私にとって余分な仕事のようです。 getExamples()を実行するだけで、明らかに必要なデータが得られます。select文でアクセスする方法は... – Cambiata

+1

これはSQL Serverのコードです。 mysqlの - あなたはそれを使用して一時的なテーブルを作成し、それをドロップすることができます。 – Dani

+0

パフォーマンス面からは、私はプロではありませんが、ネストされたステートメントでそれを使用するのとほぼ同じだと思います。ネストされたオプションではおそらくいくつかの最適化の可能性があります。あなたは気付かないでしょう。 – Dani

関連する問題