oracle 返回插入命令中有错误的列号

rjzwgtxy  于 2023-10-16  发布在  Oracle
关注(0)|答案(2)|浏览(149)

我有以下代码

insert into emp(empno,ename,deptno)

select 
      t.col001,t.col002,d.deptno 
from 
     testselect t
     left join dept d on d.code=t.dept_code
where t.linenum=3

当插入信息出现问题时,我希望它能告诉我哪一列出现了问题。例如,当它给出错误消息无效数字时,哪个列号有此错误。
事实上,我想写一个程序,告诉最终用户错误在哪里,所以我想用一个程序来写错误的确切位置,以显示给用户。

ttcibm8c

ttcibm8c1#

Oracle无论如何都要这样做;不过,不是通过告诉你一个列 * 编号 *(我假设你是在谈论它在select语句的列列表中的 * 位置 *),而是实际标记该列。
举例来说:

SQL> create table test
  2    (empno       number,
  3     ename       varchar2(10),
  4     deptno      number
  5    );

Table created.

我将尝试将作业名称(emp.jobvarchar2列,包含类似于CLERK或CLENER的值)插入到数据类型为numbertest.empno中,因此它将引发 invalid number 错误:

SQL> insert into test (empno, ename, deptno)
  2    select e.job, e.ename, d.deptno
  3    from emp e join dept d on d.deptno = e.deptno
  4    where e.sal > 2000;
  select e.job, e.ename, d.deptno
         *                                <-- this asterisk
ERROR at line 2:
ORA-01722: invalid number

看到指向e.job的星号了吗?他就是罪魁祸首。
我使用的工具是SQL*Plus。

emeijp43

emeijp432#

这很简单。你有三个表和三个列。在insert语句中,你有1个表(emp)和3个列(empno,deptno,empno)。在select语句中,有2个表(testselect,dept)和3个列(col 001,col 002,deptno)。
所有你需要做的-描述你的列的数据类型,像这样:
| 表插入|列插入|数据类型插入|表选择|列选择|数据类型选择|
| --|--|--|--|--|--|
| EMP| empno|什么?|测试选择|颜色001|什么?|
| EMP|易名中国|什么?|测试选择|Col002|什么?|
| EMP| deptno|什么?|部|deptno|什么?|
因此,在您填写此表后,您将能够意识到哪些数据类型兼容,哪些不兼容(这种不兼容性可能会引发错误)。

相关问题