15

質問は取り下げました!すべてを正しくつづれば、問題は解決します。

一時テーブルを作成する MySQL ストアド プロシージャがあります。mysql プロンプトからプロシージャを呼び出すと、正常に実行されたように見えますが、一時テーブルから SELECT COUNT(*) を実行すると、テーブルが存在しないというエラーが表示されます。

ストアド プロシージャ内で作成された一時テーブルは、ストアド プロシージャが終了すると存在しなくなりますか?

mysql> delimiter //
mysql> drop procedure if exists sp_temp_reciepts//
mysql> create procedure sp_temp_receipts ()
begin
  drop temporary table if exists receipts;
  create temporary table receipts
  (  ... snip ...
  );
  insert into receipts
  select ... snip ...
end//
mysql> delimiter ;
mysql> call sp_temp_reciepts();
Query OK, 46903 rows affected, 1 warning (2.15 sec)
mysql> select count(*) from receipts;
ERROR 1146 (42S02): Table 'receipts' doesn't exist
4

1 に答える 1

16

この質問は 1 年以上前のものです。それは答えに値します。ここに行きます:

今日、DBA の StackExchange でこの質問を見たところです。一時 MEMORY テーブルをドロップしないと、どのくらい持続しますか (MySQL)。と答えただけです。部分的に私はこれを言った:

によると

kdsjx

第 5 章には、 Returning Result Sets to Another Stored Procedureという小見出しがあります。

117ページのパラグラフ2に次のように書かれています。

残念ながら、あるストアド プロシージャから別のストアド プロシージャに結果セットを渡す唯一の方法は、一時テーブルを介して結果を渡すことです。これは厄介な解決策であり、一時テーブルはセッション全体にわたって有効範囲を持つため、グローバル変数の使用によって発生する同様の保守性の問題が多数発生します。ただし、あるストアド プログラムが別のストアド プログラムに結果を提供する必要がある場合は、一時テーブルが最適なソリューションとなる可能性があります。

テーブルの綴りが間違っていたために質問は取り下げられましたが、この観点は、MySQL ストアド プロシージャを呼び出してデータを利用する必要があるすべての人が表現し、学習する必要があります。

于 2014-01-31T16:13:55.460 に答える