0

そのため、変数を設定するために select ステートメントで渡された FName と LName のパラメーターを使用して、ストアド プロシージャ内で以前にデータベースに追加した患者から、PatientID (null ではなく主キー、自動インクリメント) を取得しようとしています。しかし、構文エラーが発生します。そのため、構文が失敗する理由についての助けをいただければ幸いです。

関連するコードは次のとおりです。pFName と pLName は、ストアド プロシージャに渡されるパラメーターです。

DECLARE pPolicyHolder INT;
SET pPolicyHolder = (SELECT PatientID FROM Patient WHERE Fname = pFName AND LName = pLName);

そして、これが全体の手順です。これはおそらく最善/最もクリーンな方法ではないことは承知していますが、テーブルの設定方法は、患者を追加する前に MedicalHistory を追加する必要があり、PatientInsurance を追加する前に患者を追加する必要があるためです。外部キー制約の。

DELIMITER //
CREATE PROCEDURE AddNewPatient(
    IN pAllergies TEXT, IN pMedications TEXT, IN pExistingConditions TEXT, IN pMisc       
    TEXT, IN pFName VARCHAR(30), IN pLName VARCHAR(45), IN pGender CHAR(1), IN pDOB 
    DATE, IN pSSN DOUBLE, IN pMedicalHistory INT, IN pPrimaryPhysician INT, IN 
    pInsuranceCompany INT, IN pCoPay INT)
BEGIN
    START TRANSACTION;
         INSERT INTO MedicalHistory(Allergies, Medications, ExistingConditions, Misc) 
         VALUES(pAllergies, pMedications, pExistingConditions, pMisc);
    COMMIT;
        START TRANSACTION;
              INSERT INTO Patient(FName, LName, Gender, DOB, SSN, 
              MedicalHistory,PrimaryPhysician) VALUES(pFName, 
              LName,pGender,pDOB,pSSN,pMedicalHistory,pPrimaryPhysician);
        COMMIT;

       DECLARE pPolicyHolder INT;
       SET pPolicyHolder = (SELECT PatientID FROM Patient WHERE Fname = pFName AND 
                            LName = pLName);
    START TRANSACTION;
       INSERT INTO PatientInsurance(PolicyHolder, InsuranceCompany, CoPay) 
       VALUES(pPolicyHolder, pInsuranceCompany, pCoPay);
    COMMIT;
    END //
DELIMITER ;

エラー:

ERROR 1064 (42000): 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 'DECLARE pPolicyHolder INT;
   SELECT PatientID into pPolicyHolder FROM Patient W' at line 15
4

1 に答える 1

2

プロシージャの途中ではなく、最初に変数を宣言する必要があります。

CREATE PROCEDURE AddNewPatient(...)
BEGIN
   DECLARE pPolicyHolder INT;  <------declare here

   START TRANSACTION;
   ...
   COMMIT;

   SET pPolicyHolder = (SELECT PatientID FROM Patient WHERE Fname = pFName AND 
                        LName = pLName);
   ...
于 2013-04-14T15:19:22.547 に答える