如何使用输入用户的列名将数据插入数据库
how to insert data into database with column name from input user
我可以使用输入用户的列名将数据插入数据库吗?
示例:
INSERT INTO res_booking_status
(AirlineCode,
flightnumber,
departuredate,
totalbooking,:#${header[Subclass]})
Values (:#${header[AirlineCode]},
:#${header[FlightNumber]},
:#$ { header[departuredate] },
1,
1 );
我不知道 JBoss Fuse,但是 - 就 Oracle 而言 - 你会为此目的使用动态 SQL .
这是一个基于 Scott 架构的示例 - 我在 EMP table 中插入一行到它的 EMPNO 和 ENAME 列(这是强制性的)。我程序的第三个和第四个参数是
- 自定义列名
- 该列的自定义值
这是 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)
程序:
- PAR_EMPNO 和 PAR_ENAME 是必填列的值
- PAR_COL1 是自定义列名
- PAR_VAL1 是自定义列的值
- L_STR变量包含SQL语句
- 立即执行运行动态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,不知道 - 如果您可以调用存储过程,那很好 - 以上是您可能想要调整的代码。
我可以使用输入用户的列名将数据插入数据库吗?
示例:
INSERT INTO res_booking_status
(AirlineCode,
flightnumber,
departuredate,
totalbooking,:#${header[Subclass]})
Values (:#${header[AirlineCode]},
:#${header[FlightNumber]},
:#$ { header[departuredate] },
1,
1 );
我不知道 JBoss Fuse,但是 - 就 Oracle 而言 - 你会为此目的使用动态 SQL .
这是一个基于 Scott 架构的示例 - 我在 EMP table 中插入一行到它的 EMPNO 和 ENAME 列(这是强制性的)。我程序的第三个和第四个参数是
- 自定义列名
- 该列的自定义值
这是 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)
程序:
- PAR_EMPNO 和 PAR_ENAME 是必填列的值
- PAR_COL1 是自定义列名
- PAR_VAL1 是自定义列的值
- L_STR变量包含SQL语句
- 立即执行运行动态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,不知道 - 如果您可以调用存储过程,那很好 - 以上是您可能想要调整的代码。