Массовое слияние записей Oracle Pro*C в C/C++ с использованием массивов хостов

Используя Oracle Pro*C в C/C++, мы можем использовать массивы хостов для управления массовыми вставками в таблицу EMP, как показано в следующем примере:

struct 
{ 
    char ename[3][10]; 
    int eno[3]; 
} emp_rec1; 
struct 
{ 
    int dno[3]; 
} emp_rec2; 

... 
strcpy(emp_rec1.ename[0], "e1"); 
strcpy(emp_rec1.ename[1], "e2"); 
strcpy(emp_rec1.ename[2], "e3"); 
emp_rec1.eno[0] = 1964; emp_rec2.dno[0] = 5; 
emp_rec1.eno[1] = 1974; emp_rec2.dno[1] = 5; 
emp_rec1.eno[2] = 1985; emp_rec2.dno[2] = 5; 

EXEC SQL INSERT INTO emp (ename, eno, dno) 
    VALUES (:emp_rec1, :emp_rec2);

Могу ли я выполнить MERGE, используя EXEC SQL MERGE, чтобы сначала попробовать обновить (если существуют ename и eno) с обновлением dno, если не существует, то, конечно, вставьте, чтобы выполнить массовое слияние вместо того, чтобы пытаться объединить одну запись за раз, например, сначала сделайте выбор, запись существует, попробуйте обновить, иначе примените вставку. Пожалуйста, помогите с аналогичным примером и синтаксисом для массового слияния, как встроенный SQL в Pro*C.


person Dr. Debasish Jana    schedule 30.07.2016    source источник


Ответы (1)


Я смотрю код pro*c, который использует команду слияния. Он делает следующее.

 EXEC SQL
 EXECUTE 
 BEGIN
         MERGE INTO aTable
         USING
         ...
         WHEN MATCHED THEN
             UPDATE SET
         ...
END;
END-EXEC;
person Robert Jacobs    schedule 26.01.2017