2016-03-24 17 views
0

Aşağıdaki MySQL komut dosyasına sahibim ve çalışmıyor. IF (INSERT INTO'dan sonra) ikinci sorguyu (SELECT) sildiğimde, çalışmaya başladı. Sorum şu: Hazırlanmış bir Deyimde birden fazla sorguyu yürütebilirim, ancak bir Prosedür kullanmamayı başarabilir miyim (son bölüm bunun için yeni bir soru açmamın sebebidir)? peşinMySQL Hazır Bildirimi'nde birden çok sorgu (Prosedür olmadan)

Teşekkür ...

SQL:

SET @data1 = 'DATA_HERE' COLLATE utf8_general_ci 
; 

/* Random key */ 
SET @randomKey = CONCAT('rnd', DATE_FORMAT(NOW(), '%Y%m%d') , FLOOR(RAND() * 100)) COLLATE utf8_general_ci 
; 

/* If not exists do an INSERT else SELECT a warning message */ 
SET @stmt = IF(
     (SELECT EXISTS (
       SELECT 
        t0.id 
       FROM 
        table t0 
       WHERE 1 
        AND t0.key = @randomKey COLLATE utf8_general_ci 
        AND t0.data = @data1 COLLATE utf8_general_ci 
      ) 
     ) = 0 
     , CONCAT(" 
      INSERT INTO 
       table 
      SET 
       key = @randomKey COLLATE utf8_general_ci 
       , data = @data1 COLLATE utf8_general_ci; 

      SELECT 
       t0.* 
      FROM 
       table t0 
      WHERE 1 
       AND t0.id = LAST_INSERT_ID(); " 
     ) 
     , CONCAT("SELECT CONCAT('This random key already exists with this data!');") 
    ) 
; 

PREPARE stmt FROM @stmt 
; 
EXECUTE stmt 
; 
+0

Aldığınız hata nedir? –

+0

"Sorgu: HESAP stmt FROM @stmt Hata kodu: 1064 SQL sözdiziminde bir hata var, 'SELECT t0. * FROM table t0 WHERE yakınında kullanmak için doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen elkitabına bakın. 1 VE t0.id = '15 satırında' Bir sabitleme kimliğini kullandığımda ('LAST_INSERT_ID()' olmadan) sorun aynıdır. –

cevap

0

masanız sadece t0 denir o zaman table t0 söylemeye gerek yoktur. Sadece kullanın SELECT * FROM t0 WHERE /* your predicate */

İlgili konular