Қате коды: 1064 mysql ішінде

Мен қандай да бір операцияны жасауды жоспарлаған рәсімді жасадым, бірақ оны әр кезде мен деп атасам, MySQL қателігімен шығады, бұл мен түсінбеймін. Мен мұны босқа деп түсінуге тырыстым, мұнда кесте құрылымы сақталған рәсім, онда оны жасауға операция жасалды:

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
);

Сақталған рәсім:

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

Мен процедураны кез-келген уақытта:

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')

Мен қатты қателесемін, ол:

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

Дегенмен, мен жаңарту процедурасын қолмен сақтайтын процедураны орындаған кезде, ол жақсы жұмыс істейді.

жаңа хабарлама:  Құдайға шүкір, ақыр соңында мәселені шешіп қойдым, Мәселе бұйрыққа келді, бәрі мен тек параметрлерді тәртіпке айналдырдым, бірақ жаңартылған мәлімдеме тапсырыс туралы қамқорлық жасамайды, менің білуімше, мен сенімдімін , Сақталған процедура әдемі түрде жасалды, міне, жаңа код:

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 $$

көп рақмет

4

3 жауаптар

Сілтеме мәндері туралы ұмытып қалдыңыз.

Мысалға:

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

or use function quote

4
қосылды
Жақсы құтқару, мен сол мәселеге біраз уақыт қараймын. Рақмет сізге.
қосылды автор usumoio, көзі
huh ... мұнда динамикалық сұрауларды айқындаудың әдемі тәсілі. 1) орындауды/дайындалуды түсіндіріңіз 2) «select @your_query» таңдаңыз 3) сақталатын процедураны орындаңыз және нәтиже сұранымын алыңыз 4) сұранысты орындаңыз және сұрауыңызды қараңыз. Бұл жағдайда қате пайда болды, себебі кейбір кіріс параметрлері бос болды. Менің қадамдарымды орындаңыз.
қосылды автор ravnur, көзі
Әрине, бұл ... Сіз кез келген «өріс = NULL» болдырмау керек. NULL мәндерін өткізіп алуыңыз керек, мысалы егер егер @ivariable null емес болса, онда @stmt = concat (@stmt, AND AND yourfield = «', @variable,'» ') сияқты функционалдық шарттарында concat . Әрбір айнымалы үшін динамикалық сұрауыңызды бөлек құрастырып көріңіз және оларды кейін қосыңыз.
қосылды автор ravnur, көзі
бірақ бірнеше сақталған процедураны солай жасадым, өйткені мен сіздерге айтқандай өзгерттім, жаңа қатені таптым: Қате коды: 1064 Сізде SQL синтаксисінде қате бар; 1-жолдағы 'NULL' жанында пайдалану үшін дұрыс синтаксистің MySQL сервер нұсқасына сәйкес келетін нұсқауды тексеріңіз
қосылды автор Rehme, көзі
Мен сіздің барлық қадамдарыңыз бойынша жүрдім, қате бар, бәрібір рахмет.
қосылды автор Rehme, көзі
уақытты менің сұрағыма қойғаныңыз үшін рахмет.
қосылды автор Rehme, көзі

Мен үшін `(GRAVE ACCENT) кейіпкері көмектесті. Бұл бірде-бір сөз (')

2
қосылды
CREATE TABLE Order
( 
    Order_Id             integer  NOT NULL ,
    Order_Time           datetime  NULL ,
    Order_Status         char(50)  NULL ,
    Customer_Id          integer  NOT NULL 
)
2
қосылды