2016-09-22 7 views
0

(1)Employeeテーブルに値を挿入し、(2)新しい従業員の部門番号をとり、その部門が働くすべてのプロジェクトのProjectテーブルをスキャンするMySQLストアドプロシージャを作成しようとしています。 onおよび(3)は、従業員のSSNを持つプロジェクトをWorks_Onテーブルに挿入します。カーソル付きMySQLストアドプロシージャー

私はカーソルでこれを行おうとしていますが、私が把握できない構文エラーが続いています。現在のエラーはカーソルを宣言している時点ですが、修正方法はわかりません。私はかなりのことを試して、誰かが間違いを見ることができることを願っています。

Use Company 
DELIMITER // 

Create Procedure SP_Insert_NewEmployee 
(
    IN fname varchar(30), 
    IN minit char(1), 
    IN lname varchar(30), 
    IN ssn char(9), 
    IN bdate date, 
    IN address varchar(50), 
    IN sex char(1), 
    IN salary decimal(10,1), 
    IN super_ssn char(9), 
    IN dno int 
) 
Begin 
Declare projectNumber Integer; 
Declare myCursor2 = CURSOR FOR 
    SELECT Pnumber 
    FROM PROJECT 
    Where Dnum = @dno; 

#Insert into Employee 
Insert into EMPLOYEE 
    (
     Fname, 
     Minit , 
     Lname , 
     Ssn , 
     Bdate , 
     Address , 
     Sex, 
     Salary , 
     Super_ssn, 
     Dno 
    ) 
Values 
    (
     $fname , 
     $minit , 
     $lname, 
     $ssn , 
     $bdate , 
     $address , 
     $sex , 
     $salary , 
     $super_ssn , 
     $dno 
    ); 
    END 

#Find projects by new employee's dept 




OPEN myCursor2; 

FETCH NEXT 
    FROM myCursor2 
    INTO 
     projectNumber 


WHILE @@FETCH_STATUS = 0 

BEGIN 
Insert Into WORKS_ON 
Values 
    (
     ssn, 
     projectNumber, 
     0 
    ) 

FETCH NEXT 
FROM myCursor2 
    INTO 
     projectNumber 
END 

CLOSE myCursor2; 
DEALLOCATE myCursor2; 
END 
END 
// 
DELIMITER ; 
+0

エラーコードは1064です。 – cisstudent123

+0

の場合はカーソルの近くに表示されます。答えは「DECLARE cur_saving_acc CURSOR FOR」と宣言する必要があります。存在しない – Susang

+0

これは最初の問題でした....私はMySQLとSQL Serverのカーソル構文を混在させました。ありがとう! – cisstudent123

答えて

2

私のリクエストであなたの質問を元に戻してしまったので、あなたは混乱してしまうかもしれません。コードにいくつかの構文エラーがありました。いくつかはSQLだけで構成され、他はカンマとドル記号が間違っていました。うまくいけば、これは役に立ちます。

USE Company; 
DROP PROCEDURE IF EXISTS SP_Insert_NewEmployee; 
DELIMITER // 
CREATE PROCEDURE SP_Insert_NewEmployee 
(
    IN fname varchar(30), 
    IN minit char(1), 
    IN lname varchar(30), 
    IN ssn char(9), 
    IN bdate date, 
    IN address varchar(50), 
    IN sex char(1), 
    IN salary decimal(10,1), 
    IN super_ssn char(9), 
    IN dno int 
) 
Begin 
DECLARE done INT DEFAULT FALSE; 
Declare projectNumber Integer; 
Declare myCursor2 CURSOR FOR SELECT Pnumber FROM PROJECT Where Dnum = dno; 

#Insert into Employee 
Insert into EMPLOYEE 
    ( Fname, 
     Minit , 
     Lname , 
     Ssn , 
     Bdate , 
     Address , 
     Sex, 
     Salary , 
     Super_ssn, 
     Dno 
    ) 
Values 
    ( fname , 
     minit , 
     lname, 
     ssn , 
     bdate , 
     address , 
     sex , 
     salary , 
     super_ssn , 
     dno 
    ); 

#Find projects by new employee's dept 

OPEN myCursor2; 

do_something: LOOP 
    FETCH myCursor2 INTO projectNumber; 
    IF done THEN 
     LEAVE do_something; 
    END IF; 
    Insert Into WORKS_ON Values (ssn,projectNumber,0); 
END LOOP; 

CLOSE myCursor2; 

END // 
DELIMITER ; 

マニュアルページの詳細は、CURSORSに従ってください。

関連する問題