2016-09-22 19 views
0

Ich versuche, eine gespeicherte MySQL-Prozedur zu schreiben, die (1) Werte in eine Employee-Tabelle einfügt und (2) die Abteilungsnummer des neuen Mitarbeiters übernimmt und die Projekttabelle nach Projekten durchsucht on und (3) fügt diese Projekte mit der SSN des Mitarbeiters in die Works_On-Tabelle ein.Gespeicherte MySQL-Prozedur mit Cursorfehler

Ich versuche, dies mit einem Cursor zu tun, aber immer wieder in Syntaxfehler, die ich nicht herausfinden kann. Der aktuelle Fehler ist an dem Punkt, an dem ich den Cursor deklariere, aber ich habe keine Ahnung, wie ich ihn beheben soll. Ich habe einiges versucht und hoffe, dass jemand den Fehler sehen kann.

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

Der Fehlercode ist 1064 ..... in der Nähe von Cursor für – cisstudent123

+0

Besser, Kommentar statt zu beantworten, zuerst müssen Sie den Cursor deklarieren als 'DECLARE cur_saving_acc CURSOR FÜR', der Code ist durcheinander, so nicht sicher, ob andere Probleme existiert nicht – Susang

+0

Das war das erste Problem .... Ich verwechselte MySQL und SQL Server Cursorsyntax. Vielen Dank! – cisstudent123

Antwort

2

Wir löschten Ihre Frage auf meine Anfrage, damit Sie nicht herum dort herum verwirren würden. Ihr Code hatte mehrere Syntaxfehler. Einige wurden nur sql gemacht, andere fehlten Kommas und verirrte Dollarzeichen. Hoffentlich hilft das.

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 ; 

Folgen Sie der Handbuchseite genau hier: CURSORS.

Verwandte Themen