Hata Kodu: mysql içinde 1064

Bazı işlemleri yapması gereken bir prosedür oluşturdum ama her dediğimde, MySQL bunun ne anlama geldiğine dair ipucu vermediğim bir hata ile çıkıyor. Bunu boş yere anlamaya çalıştım, işte burada bir işlem yapmak için yapılan depolanmış prosedürün bulunduğu tablo yapısı:

CREATE  TABLE `recruitment`.`job_seeker` (
    `user_id` INT Null ,
    `fname` VARCHAR(45) Null ,
    `lname` VARCHAR(45) Null ,
    `mname` VARCHAR(45) Null ,
    `gender` VARCHAR(10) Null ,
    `dob` DATE Null ,
    `marital_status` VARCHAR(45) Null ,
    `address` VARCHAR(45) Null ,
    `city` VARCHAR(45) Null ,
    `nationality` VARCHAR(45) Null ,
    `phone` VARCHAR(45) Null ,
    `mobile` VARCHAR(45) Null ,
    `degree_id` INT Null ,
    `education` VARCHAR(100) Null ,
    `experience` VARCHAR(250) Null ,
    `other` VARCHAR(250) Null ,
    `job_target` VARCHAR(250) Null ,
    PRIMARY KEY (`user_id`) ,
    INDEX `user_id` (`user_id` ASC) ,
    INDEX `degree_id` (`degree_id` ASC) ,
    CONSTRAINT `user_id`
    FOREIGN KEY (`user_id` )
    REFERENCES `recruitment`.`user_authentication` (`user_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
    CONSTRAINT `degree_id`
    FOREIGN KEY (`degree_id` )
    REFERENCES `recruitment`.`degree` (`degree_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
);

Saklı yordam İşte:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `createSeekerProfile`(in userName varchar(45),
    in fn varchar(45),in mn varchar(45), in ln varchar(45),
    in gender varchar(6),in nationality varchar(45),
    in ad varchar(45),in city varchar(45),in phone varchar(15),in mob varchar(15),

    in   maritalStatus varchar(45), in degId int, in educ varchar(100),
    in exper varchar(250), in other   varchar(250),
    in dob date,in jtarg varchar(250))
    begin
    declare returned_ID int;
    set @dyn_que = CONCAT('select user_id into @returned_ID
    from user_authentication where user_name =  ? ');
    prepare s1 from @dyn_que ;
set @usn = userName;
execute s1 using @usn ;

set @dyn_update =CONCAT('update job_seeker set fname =',fn,', lname = ',ln,' ,mname = ',mn,' ,
nationality =',nationality,',address =',ad,',city =',city,',phone=',phone,',
mobile =',mob,', gender = ',gender,',other =',other,',
degree_id =',degId,', job_target=',jtarg,', dob =',dob,', education =',educ,',
experience=',exper,', marital_status=',maritalStatus,' where user_id [email protected]_ID');
prepare s2 from @dyn_update;
execute s2;
end

Her prosedürü ne zaman arayacağım?

call createSeekerProfile('realsilhouette','robert','marie','david','male'
,'earthal','an address here','capital of earth','012178152',
'1111111111','single',2,'engineering','looking forward','determined',
'2008-7-04','Oracle CEO')

Korkunç bir hata alıyorum:

Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near 'address here,
city =capital of earth,phone=012178152,
mobile =1111111111, gender' at line 2

Ancak saklı yordamın içinde bulunan el ile güncelleştirme deyimini çalıştırmayı denediğimde, çok iyi çalışıyor.

yeni posta :  teşekkürler tanrı, nihayet sorunu çözdüm, sorun siparişe geldi, tüm yaptığım sadece sırayla parametreleri yapmak, güncelleme bildirimi sipariş hakkında umurumda değil, bildiğim kadarıyla emin değilim , Ama eminim saklı yordam güzelce oluşturuldu, yeni kod:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `createSeekerProfile`(
in un varchar(45),
in fn varchar(45),
in ln varchar(45), 
in mn varchar(45),
in g varchar(10),
in dateOfBirth date,
in ms varchar(45),
in ad varchar(45),
in city varchar(45),
in nat varchar(45),
in ph varchar(45),
in mob varchar(45),
in degid int,
in educ varchar(100),
in exp varchar(250),
in other varchar(250),
in jtarg varchar(250))
begin

declare returned_ID int(11);

 set @dyn_que = CONCAT('select user_id into @returned_ID from user_authentication
 where user_name =  ? ');
 prepare s1 from @dyn_que ;
 set @usn = un;
 execute s1 using @usn ;


 set @dyn_update =CONCAT('update job_seeker set fname  
 ="',fn,'",lname="',ln,'",mname="',mn,'",lname ="',ln,'",
 gender ="',g,'",dob="',dateOfBirth,'",marital_status="',ms,'",
 address="',ad,'",city="',city,'",
 nationality="',nat,'",phone="',ph,'",mobile="',mob,'",degree_id="',
 degid,'",education="',educ,'",
 experience="',exp,'",other="',other,'",job_target="',jtarg,'" 
 where user_id = @returned_ID');
 prepare stm from @dyn_update;
 execute stm;
 end $$

çok teşekkürler

4

3 cevap

Dize değerlerini alıntılamayı unuttun.

Örneğin:

concat('update yourTable
set address ="',  @address, '" 
where id = 1');

or use function quote

4
katma
İyi kaydet, bir süredir aynı konuya bakıyorum. Teşekkür ederim.
katma yazar usumoio, kaynak
huh ... burada dinamik sorguları ayıklamak için güzel bir yol. 1) yürütme/hazırlama 2) "@your_query öğesini seçin" 3) saklı yordamı yürütün ve sonuçta oluşan bir sorguyu elde edin 4) sorguyu çalıştırın ve sorgunuza bir göz atın. Bu durumda, bazı girdi parametreleri null olduğu için hatayı aldınız. Lütfen adımlarımı takip edin.
katma yazar ravnur, kaynak
Elbette ki ... Herhangi bir "alan = NULL" türünden kaçınmalısınız. concat işlev koşullarını içeren gibi işlev koşullarını atlamanız gerekir. Eğer @variable boş değilse @stmt = concat (@stmt, 'AND yourfield = "', @variable, '"') . Her bir değişken için dinamik sorgunuzu ayrı ayrı oluşturmaya ve sonra da onlara katılmaya çalışın.
katma yazar ravnur, kaynak
ama bu şekilde birkaç saklı yordam oluşturdum, her şeyden sonra bana söylediğin gibi değiştirdim, yeni bir hata aldım: Hata Kodu: 1064 SQL sözdiziminde bir hata var; 1. satırda 'NULL' yakınında kullanmak için doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen kılavuzu kontrol edin
katma yazar Rehme, kaynak
Tüm adımlarınızı takip ettim, hata hala mevcut, teşekkürler zaten.
katma yazar Rehme, kaynak
Zamanımı soruma koyduğun için teşekkür ederim.
katma yazar Rehme, kaynak

Benim için karakter ekleme (GRAVE ACCENT) yardımcı oldu. Tek bir teklif değil (')

2
katma
CREATE TABLE Order
( 
    Order_Id             integer  NOT NULL ,
    Order_Time           datetime  NULL ,
    Order_Status         char(50)  NULL ,
    Customer_Id          integer  NOT NULL 
)
2
katma