Search code examples
oracle-databaseplsqloracle11goracle-sqldeveloperjbossfuse

how to insert data into database with column name from input user


can I insert data into database with column name from input user ?

example:

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

Solution

  • I don't know JBoss Fuse, but - as far as Oracle is concerned - you'd use dynamic SQL for such a purpose.

    Here's an example based on Scott's schema - I'm inserting a row into the EMP table, into its EMPNO and ENAME columns (which are obligatory). The 3rd and 4th parameters of my procedure are

    • custom column name
    • custom value for that column

    This is the EMP table:

    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)
    

    A procedure:

    • PAR_EMPNO and PAR_ENAME are obligatory columns' values
    • PAR_COL1 is custom column name
    • PAR_VAL1 is custom column's value
    • L_STR variable contains SQL statement
    • EXECUTE IMMEDIATE runs dynamic SQL, using parameters you passed:

    .

    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.
    

    Testing:

    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>
    

    Seems to be OK.

    Now, how will you use it JBoss Fuse, no idea - if you can call a stored procedure, fine - above is the code you might want to adjust.