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

时间:2018-10-05 02:13:18

标签: oracle plsql oracle11g oracle-sqldeveloper jbossfuse

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

示例:

10.128.0.3

1 个答案:

答案 0 :(得分:2)

我不知道 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语句
  • 使用传递的参数
  • 立即执行运行动态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,不知道-如果可以调用存储过程,很好-以上是您可能要调整的代码。