如何使用输入用户的列名将数据插入数据库

Posted

技术标签:

【中文标题】如何使用输入用户的列名将数据插入数据库【英文标题】:how to insert data into database with column name from input user 【发布时间】:2018-10-05 02:13:17 【问题描述】:

我可以使用输入用户的列名将数据插入数据库吗?

示例:

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

【问题讨论】:

【参考方案1】:

我不知道 JBoss Fuse,但是 - 就 Oracle 而言 - 您会为此目的使用动态 SQL。

这是一个基于 Scott 架构的示例 - 我在 EMP 表中插入一行,插入到它的 EMPNO 和 ENAME 列中(这是强制性的)。我的程序的第三个和第四个参数是

自定义列名 该列的自定义值

这是 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 运行动态 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,不知道 - 如果你可以调用存储过程,很好 - 以上是你可能想要调整的代码。

【讨论】:

虽然它适用于 number 和 varchar2,但可能需要额外的代码来处理日期/时间戳列类型 当然,@Kaushik。这只是最简单的情况。

以上是关于如何使用输入用户的列名将数据插入数据库的主要内容,如果未能解决你的问题,请参考以下文章

SQLite3代码动态插入要删除的行数据的列值

在oracle中将数据从子集表插入超集表

如何使用 slick 将 Blob 类型的列插入数据库?

如何使用特定表中的列作为我需要从中删除、插入或更新数据的表名

如何使用 JDBC 将用户在 jsp 输入类型“时间”中输入的值插入 MYSQL 数据库

如何获得像editText这样的用户输入然后插入数据库sqlite?