2016-09-22 10 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

오류 코드는 근처에 – cisstudent123

+0

에 대한 커서 근처에 있습니다. DECELARE 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.