1

mysqlプロシージャ用のこのコードを持っていますが、プロシージャを作成できません

DELIMITER @@
CREATE PROCEDURE hrpayroll.sal_gen_init
(IN `emp_id` INT)
BEGIN
    DECLARE branch_cd varchar(20)
    DECLARE comp_cd varchar(20)
    SELECT p.BRANCH_CD IN branch_cd,p.COMP_CD IN comp_cd FROM p_employee_mst p WHERE p.EMPL_ID = emp_id
    INSERT INTO p_sal_hdr (COMP_CD,BRANCH_CD,EMPL_ID) VALUES(comp_cd,branch_cd,emp_id)
END @@ 
DELIMITER ; 

このエラーが発生します

エラーコード1064、SQL状態42000:SQL構文にエラーがあります。5行目の「DECLAREcomp_cdvarchar(20)SELECT p.BRANCH_CD IN branch_cd、p.COMP_CD IN com」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

4

2 に答える 2

0

;宣言ステートメントの後に(セミコロン)を使用します。元、

BEGIN
    DECLARE branch_cd varchar(20);
    DECLARE comp_cd varchar(20);
于 2012-06-20T10:09:45.330 に答える
0

いくつかの構文エラーがありました。この手順を試してください-

CREATE PROCEDURE sal_gen_ini(IN `emp_id` INT)
BEGIN
  DECLARE branch_cd_var varchar(20);
  DECLARE comp_cd_var varchar(20);

  SELECT
    p.BRANCH_CD, p.COMP_CD INTO branch_cd_var, comp_cd_var
  FROM
    p_employee_mst p
  WHERE
    p.EMPL_ID = emp_id;

  INSERT INTO p_sal_hdr (COMP_CD,BRANCH_CD,EMPL_ID)
    VALUES(comp_cd_var,branch_cd_var,emp_id);
END

フィールドと変数の値の問題を回避するために、宣言された変数の名前も変更したことに注意してください。


2つのSELECTとINSERTの代わりに1つのSELECT...INTOステートメントを使用してみてください。

于 2012-06-20T10:54:58.747 に答える