-3

データベースに技術者を追加する SQL および C++ コードを書いています。実行する必要がある 3 つの SQL 挿入ステートメントがあります。私のコードにはそれが含まれていますが、私のコードは準拠していないか、求められていることを実行していません。問われるのはこちら。

プログラムはユーザーに ssn を要求する必要があります。

その ssn/employee がすでに Employee テーブルにある場合、プログラムはその従業員がすでに DB にあることをユーザーに通知し、その従業員の組合員番号を更新するかどうかをユーザーに尋ねます。ユーザーの答えが「はい」の場合、プログラムはユーザーに新しい組合メンバー番号を尋ね、DB でそれを更新する必要があります。

ssn/employee がまだ DB にない場合、プログラムはユーザーにその従業員の組合員番号を尋ね、そのレコードを Employee テーブルに保存する必要があります。従業員が技術者であると仮定すると、プログラムはその技術者に関する情報 (名前、住所、電話番号) を保存するようにユーザーに要求し、それを Technician テーブルに保存する必要があります。次に、プログラムは、技術者がエキスパートである飛行機のモデル番号をユーザーに尋ね、対応するレコードを Experts テーブルに追加する必要があります。

ここに私のコードがあります:

void add_technician() {
EXEC SQL BEGIN DECLARE SECTION;
    char sn[9];
    int s=0;
    char answer;
    int umn;
    char tname[30];
    char tadd[30];
    char tpho[10];
    char tmod[15];
EXEC SQL END DECLARE SECTION;

cout << "Enter social security number:";
cin >> sn;  

EXEC SQL SELECT SSN into :s from Employee where SSN= :sn;

          if (s == sn)
   { 
cout << "Employee already exists in the database."; 
   cout <<"Would you like to update the union-membership-number?";
   cin >> answer;
   if (answer == 'y'|| 'Y')
   {cout <<"Enter new union member number:";
   cin >> umn;
EXEC SQL 
    INSERT INTO Employee (ssn, union_member_no)
    VALUES (:sn, :umn);
 } 
   }
         else {
 cout << "Enter in union membership number of the new employee: ";
            cin >> umn;
            EXEC SQL INSERT INTO Employees (ssn, union_member_no) 
                   VALUES (:sn, :umn);
            EXEC SQL COMMIT WORK;
             cout << "Enter the address of the technician.";
             cin >> tadd;
 cout << "Enter the name technician name.";
             cin >> tname;

            EXEC SQL INSERT INTO Technicians (address, name, phone)
       VALUES (:tadd, :tname, :tpho);
EXEC SQL COMMIT WORK;
            cout << "Enter airplane model number that you are an expert on." ;
            cin >> tmod;
EXEC SQL INSERT INTO Experts (model_no, ssn)
    VALUES (:tmod);
EXEC SQL COMMIT WORK; }                

}

プログラムを実行すると、最初の 2 つの IF ステートメントがスキップされます。理由が分からないようです。

4

1 に答える 1

0

値を s に戻す方法は正しくありません。

ESQL Programmer's Guide の良い例を見てみましょう

問題に対してMySQLのアプローチを取っていると思います。代わりに、次のようなことを行います (大まかなアプローチ):

int s = 0;
EXEC SQL SELECT rowSSN into :s from Employee where SSN= :sn;

if (s == sn) 
...

s の値は、実際にはそれ自体の行の値です。CURSOR を調べて、クエリから返される行数をカウンターすることを検討してください。

于 2012-04-16T02:22:06.230 に答える