エラーコード:1064 in 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

しかし、ストアドプロシージャ内にあるupdate文を手動で実行しようとすると、うまく動作します。

新しい投稿:  感謝神、ついに問題を解決しました。問題は命令に下がりました。私がしたのは、パラメータを順番に作ることでしたが、更新声明は順序を気にしませんでしたが、私が知る限り、わかりませんしかし、私が確信していることは、ストアドプロシージャがきれいに作成されたことです。ここに新しいコードがあります:

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,
うーん...ここでは、動的クエリをデバッグするための素晴らしい方法です。 1)コメントの実行/準備2) "@ your_queryの選択" 3)ストアドプロシージャを実行して結果のクエリを取得する4)クエリを実行してクエリを見てください。この場合、いくつかの入力パラメータがnullだったのでエラーが発生します。私のステップに従ってください。
追加された 著者 ravnur,
もちろん、それは...あなたはどんな種類の "field = NULL"も避けるべきです。 @variableがnullでなく@stmt = concat(@stmt、 'AND yourfield = "'、@variable、 '"')の場合、 concat の関数条件を含むNULL値をスキップする必要があります。 。それぞれの変数ごとに動的クエリを個別に作成し、後で結合してみてください。
追加された 著者 ravnur,
しかし、私はいくつかのストアドプロシージャを作成しました。あなたが私に言ったように変更しただけで、新しく新しいエラーが発生しました: Error Code:1064 SQL構文にエラーがあります。あなたのMySQLサーバのバージョンに対応するマニュアルを調べて、正しい構文が第1行目の 'NULL'の近くで使用されるようにしてください。
追加された 著者 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
追加された