在MySQL中创建临时表StoredProcedure返回该表不存在

时间:2016-10-12 09:24:49

标签: mysql stored-procedures temp-tables

我试图以这种方式从存储过程创建临时表;

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 个答案:

答案 0 :(得分:-1)

您是否使用MySQL自动提交?如果不是,您可能需要在尝试从临时表中进行选择之前提交您的事务。

如果这不起作用,为什么不创建一个普通的表并在之后丢弃它?如果继续使用特定的命名约定(前缀temp),您可以随时清理这些表,而不是依靠数据库引擎来完成工作。

编辑:

我找到了适合您的链接

MySQL stored procedures with temp tables