plsql insert into语句报错原因是

plsql insert into语句报错原因是,第1张

当oracle中报“ORA-00913: 值过多”错误的时候,那么说明写的sql语句中出了问题,这是由于我们向数据库中传递的参数的个数和数据库中相应的字段的数量不一致,所以就产生了一对多,或多对一的现象,

下面举个例子:

Insert into XX(,,) values(,,)

上面是我们自己写的sql语句,我们要插入的值是3个。而数据库中对表XX的定义字段却只有两个,即XX(,)。所以我们传的参数的个数多出一个,这样数据库就会报“ORA-00913: 值过多”。

所以我们需要把上面的sql语句改为

Insert into XX(?,?) values(,) 或者修改数据库表中字段的个数。

Select From v$sqlarea t Where tPARSING_SCHEMA_NAME In ('用户名') And SQL_TEXT Like 'insert into 用户名表名%' order by tLAST_ACTIVE_TIME desc

把用户名和用户名表名替换成你实际的,注意字母大小写(一般都为大写)!

提示违反唯一约束条件的意思:

在已有数据的表中,应该有建用约束列,而查询出的结果插入到该列时与已有的数据重复。这才出现错误提示。

建议:

1、取消约束列(确认此约束列是否有用)

2、在查询结果中筛选掉与约束列重复的数据(建议这样处理)

在SQLServer中,可以这样实现

但在Oracle中,你只能通过序列来实现

首先声明一个序列

CREATE SEQUENCE 序列名

[INCREMENT BY n] --用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表序列的值是按照此步长递减的

[START WITH n] --定义序列的初始值(即产生的第一个值),默认为1。

[{MAXVALUE/ MINVALUE n|NOMAXVALUE}] --序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。序列生成器能产生的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是10的26次方;对于递增序列,最小值是1

[{CYCLE|NOCYCLE}] --表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误

[{CACHE n|NOCACHE}];

实例:

CREATE SEQUENCE ABC INCREMENT BY 1 START WITH 10 MAXVALUE 9999999 NOCYCLE NOCACHE;

--依次插入序列号到表中

insert into tableName (column1,column2) values (abcnextval,'');

以上就是关于plsql insert into语句报错原因是全部的内容,包括:plsql insert into语句报错原因是、plsql获取手动插入一条记录的SQL、plsql中 如何将查询的结果插入到一个已有数据的表中 查询的结果是来自等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9765800.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存