2016-10-12 4 views
0

この方法でストアドプロシージャからテンポラリテーブルを作成しようとしています。MySQL StoredProcedureで一時テーブルを作成すると、そのテーブルは存在しません。

CREATE TEMPORARY TABLE IF NOT EXISTS tempUvozTB engine = memory AS 
( 
    SELECT 
    `rnuvozstavke`.`BrojRacuna`, 
    `pfrnstavke_i`.`TB`, 
    `pfrnstavke_i`.`Kolicina`, 
    `pfrnstavke_i`.`Tezina`, 
    `pfrnstavke_i`.`Vrijednost`, 
    `rnuvozstavke`.`Kolicina` AS UvozKol 
FROM 
    `pfracun_i` 
    INNER JOIN `pfrnproizvodi_i` ON `pfracun_i`.`BrojRN` = 
`pfrnproizvodi_i`.`BrojRacuna` AND `pfracun_i`.`Godina` = 
`pfrnproizvodi_i`.`Godina` 
    INNER JOIN `pfrnstavke_i` ON `pfrnproizvodi_i`.`BrojRacuna` = 
`pfrnstavke_i`.`BrojRacuna` AND `pfrnproizvodi_i`.`Godina` = 
`pfrnstavke_i`.`Godina` 
    INNER JOIN `rnuvoz` ON `pfracun_i`.`BrojOdobrenja` = `rnuvoz`.`VezaKupca`, 
    `rnuvozstavke` 
WHERE 
    `pfracun_i`.`BrojOdobrenja` = pBrojOdobrenja AND 
    `rnuvozstavke`.`BrojRacuna` = pBrojRN 
GROUP BY 
    `pfrnstavke_i`.`SifraSirovine`, 
    `pfracun_i`.`BrojOdobrenja`, 
    `pfrnstavke_i`.`TB`, 
    `rnuvozstavke`.`BrojRacuna` 
); 

SELECT tempUvozTB.TB, SUM(tempUvozTB.Kolicina * tempUvozTB.Tezina * tempUvozTB.UvozKol) AS UkTezina, SUM(tempUvozTB.Vrijednost * tempUvozTB.UvozKol) AS UkVrijednost from tempUvozTB GROUP BY tempUvozTB.TB; 
DROP TEMPORARY TABLE IF EXISTS tempUvozTB; 

しかし、mydatabase.tempuvoztbが存在しないようなエラーが表示されます。私は間違っているの?

答えて

-1

MySQLで自動コミットを使用していますか?そうでない場合は、一時テーブルから選択する前にトランザクションをコミットする必要があります。

これが機能しない場合、通常のテーブルを作成して後でドロップするだけではどうですか?特定の命名規則(接頭辞)を使用し続ける場合は、データベースエンジンに頼って作業を行うのではなく、後でそれらの表をいつでもクリーンアップすることができます。

編集は:

私はまだ同じことを私が試したコミットしましたあなたの問題

MySQL stored procedures with temp tables

+0

に役立つかもしれないが、あなたのためにこのリンクを発見しました。また、ストアドプロシージャの内部にないときに、これがどのように動作するのか分かりません... – Josef

+0

今、私は行DROP TEMPORARY TABLE IFが存在することを追加しましたtempUvozTB;私は一時テーブルを作成する前に、その後私は新しい問題が発生します。 where句のパラメータは認識されません。私はUnknowカラム 'pBrojOdobrenja'のようなエラーを 'where句' – Josef