-3

我正在编写将技术人员添加到数据库中的 sql 和 c++ 代码。必须执行 3 条 sql 插入语句。我的代码中包含该内容,但我的代码不符合要求或不符合要求。这是要问的。

程序应提示用户输入 ssn。

如果该 ssn/employee 已经在 Employee 表中,程序应该通知用户该员工已经在 DB 中,并询问用户是否要更新该员工的 union-membership-number;如果用户的回答是肯定的,程序应该向用户询问新的 union-member-number 并在 DB 中更新它。

如果 ssn/employee 尚未在数据库中,程序应向用户询问该员工的 union-membership-number,然后将该记录存储在 Employee 表中。假设员工是技术人员,程序应询问用户要存储的有关该技术人员的信息(姓名、地址和电话号码)并将其存储在 Technician 表中;那么程序应该向用户询问技术人员是专家的飞机型号,并将相应的记录添加到专家表中。

这是我的代码:

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; }                

}

当我运行程序时,它会跳过我的前两个 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 回答