как вставить данные в базу данных с именем столбца от входного пользователя - PullRequest
0 голосов
/ 05 октября 2018

я могу вставить данные в базу данных с именем столбца от входного пользователя?

пример:

INSERT INTO res_booking_status
(AirlineCode,
flightnumber,
departuredate,
totalbooking,:#${header[Subclass]}) 
       Values (:#${header[AirlineCode]},
       :#${header[FlightNumber]},
       :#$ { header[departuredate] },
1,
1 );

1 Ответ

0 голосов
/ 05 октября 2018

Я не знаю JBoss Fuse , но - что касается Oracle - вы бы использовали динамический SQL для этой цели.

Вот пример, основанный на схеме Скотта - я вставляю строку в таблицу EMP, в ее столбцы EMPNO и ENAME (которые являются обязательными).3-й и 4-й параметры моей процедуры:

  • имя пользовательского столбца
  • пользовательское значение для этого столбца

Это таблица EMP:

SQL> desc emp
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 EMPNO                                     NOT NULL NUMBER(4)
 ENAME                                              VARCHAR2(10)
 JOB                                                VARCHAR2(9)
 MGR                                                NUMBER(4)
 HIREDATE                                           DATE
 SAL                                                NUMBER(7,2)
 COMM                                               NUMBER(7,2)
 DEPTNO                                             NUMBER(2)

Процедура:

  • PAR_EMPNO и PAR_ENAME - обязательные значения столбцов
  • PAR_COL1 - имя пользовательского столбца
  • PAR_VAL1 - значение пользовательского столбца
  • Переменная L_STR содержит инструкцию SQL
  • EXECUTE IMMEDIATE run динамический SQL с использованием переданных вами параметров:

.

SQL> CREATE OR REPLACE PROCEDURE p_userins (par_empno   IN NUMBER,
  2                                         par_ename   IN VARCHAR2,
  3                                         par_col1    IN VARCHAR2,
  4                                         par_val1    IN VARCHAR2)
  5  IS
  6     l_str   VARCHAR2 (500);
  7  BEGIN
  8     l_str :=
  9           'insert into emp (empno, ename, '
 10        || par_col1
 11        || ') values (:a, :b, :c)';
 12
 13     EXECUTE IMMEDIATE l_str USING par_empno, par_ename, par_val1;
 14  END;
 15  /

Procedure created.

Тестирование:

SQL> EXEC p_userins(1, 'LF', 'deptno', 20);

PL/SQL procedure successfully completed.

SQL> SELECT empno, ename, job, sal, deptno FROM emp WHERE empno = 1;

     EMPNO ENAME      JOB              SAL     DEPTNO
---------- ---------- --------- ---------- ----------
         1 LF                                      20

SQL>

Кажется, все в порядке.

Теперь, как вы будете его использовать? JBoss Fuse, не знаю - если вы можете вызвать хранимую процедуру, хорошо - выше приведен код, который вы можете настроить.

...