如图所示,使用updata语句时提示违反唯一约束条件:
语句如下:
update table_name set param1=‘xxx’,param2=‘xxx’ where param4=‘xxx’;
解决办法:
一、能用Navicat for Oracle或者sqlplus连接oracle
这里就不用说了,查询一下哪个是唯一键,那个是主键就行了哈哈
还是备注一下查询语句吧,万一你也不知道呢,比如我就是百度好久才找到!
连接远程数据库,如下:
sqlplus 用户名/密码@IP:端口号/数据库名
sqlplus name/key@192.168.66.66:1521/ORCL
查询表主键,如下(注意表名有单引号哈):
select col.column_name from user_constraints con,user_cons_columns col where con.constraint_name=col.constraint_name and con.constraint_type='P' and col.table_name='表名';
查找表的唯一性约束,如下(注意表名有单引号哈):
select column_name from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'U' and au.table_name = '表名';
查看表结构,如下(表名大写,没有单引号):
DESC 表名;
切换数据库实例
执行命令:
sqlplus /@ORCL as sysdba; //其中ORCL为具体的实例名称
其他一些命令:
select * from dba_users;// 查看数据库里面所有用户,前提是你是有dba权限的帐号,如sys,system
select * from all_users; // 查看你能管理的所有用户!
select * from user_users; //查看当前用户信息 !
二、不能用Navicat for Oracle或者sqlplus连接oracle
1、在上传前,将要上传的内容弹窗显示出来,方便修改,挨个删除param=‘xxx’,测试到底是哪个参数更新导致的。
2、将找到的违反唯一约束条件的变量 ,比如是param1 。在上传前根据条件where查询出来param1的值,不如等于‘123’,跟现有的要修改成的内容‘123’比较,如果与要修改成的内容一样,则updata语句不要对参数进行修改,即只更新其他值:
update table_name set param2=‘xxx’ where param4=‘xxx’;
如果与要修改成的内容不一致再更新其值:
update table_name set param1=‘xxx’,param2=‘xxx’ where param4=‘xxx’;
废话:
这个问题找遍了百度都没有找到解决办法(可能是大家解决了的都没有说出来吧),最后在蹲坑时才行到如此处理哈哈。