2010-08-04 23 views
5

Prosedürleri kullanmakta yeniyim ve çalışmamı sağlıyorum. MySQL v5.1.36 kullanıyorum ve bir WAMPP sunucusunda MySQL Konsolunu kullanarak kodumu giriyorum. Eğer (yeniden) prosedürü oluşturursam. Hata # 1304 (42000) alıyorum. Ben prosedürü kullanmaya çalışırsanızmysql yordamları ile ilgili hata HATA 1304 & HATA 1305

mysql> DELIMITER // 
mysql> 
mysql> CREATE PROCEDURE modx.getCRID (IN x VARCHAR(255),OUT y INT) 
    -> BEGIN 
    ->   DECLARE y INT; 
    ->   SELECT id INTO y 
    ->   FROM `modx`.coverage_region 
    ->   WHERE `coverage_region`.name = x; 
    -> END// 
ERROR 1304 (42000): PROCEDURE getCRID already exists 
mysql> 
mysql> DELIMITER ; 

Ancak, hata # 1305 (42000) olsun.

mysql> USE modx; 
Database changed 
mysql> SET @crID = modx.getCRID("South East"); 
ERROR 1305 (42000): FUNCTION modx.getCRID does not exist 

Prosedürün biri için var ise, diğeri için nasıl bulunamaz? Neyi yanlış yapıyorum.

cevap

3

Ben sorunlar varolan prosedür yeniden oluşturulmaya çalışılırken, çünkü ilk hata oluşur

  1. olduğuna inanıyoruz. Prosedürü ilk olarak düşürdüyseniz, bu hatayı alamazsınız,
  2. İkinci hata, PROCEDURE'lerin CALL deyimleriyle çağrılmasından, FUNCTIONs kodunuzda olduğu gibi işlev referansları olarak çağrılmasından kaynaklanır. PROSEDÜR olmayan bir FONKSİYON tanımlamanız gerekir. (MySQL documentation) der ki:

CREATE FUNCTION deyimi de UDF'ler (kullanıcı tanımlı işlevler) desteklemek için MySQL kullanılan olduğunu. Bkz. Bölüm 21.2, “MySQL'e Yeni İşlevler Ekleme”. Bir UDF harici saklı fonksiyon olarak kabul edilebilir. Kayıtlı işlevler ad alanlarını UDF'lerle paylaşır. numaralı kuralların işlevlerinin işlevlerinin farklı işlevlerine nasıl dönüştüğünü açıklayan Bölüm 8.2.3, “İşlev Adı Ayrıştırma ve Çözünürlük” bölümüne bakın.

Bir saklı yordamı çağırmak için CALL deyimini kullanın (bkz. Bölüm 12.2.1, “CALL Sözdizimi”). Depolanmış bir işlevini çağırmak için, bir ifadesine bakın. İşlev, ifade değerlendirmesi sırasında değerini döndürür.

+0

Teşekkür ederiz! Bu çok açık, ama bunu geçemedim çünkü SQL Server gibi bir SP'yi çalıştırdığına ikna oldum. :-) – CobaltBlue