ORA-00001: 违反唯一约束条件收藏 function change_alt1(btn,style){var btn=document.getElementById(btn);btn.style...

<p>如何查出违反唯一关键子的类似SQLERRM<br><br>
有个过程 每天更新用户信息表<br>
原本采用MERGE 来做的,可是有人嫌它慢,建议采用DELETE INSERT来做<br>
我先 delete userinfo wehre logtime > trunc(sysdate)-15 ; commit;<br>
insert into userinfo <br>
select * fromt_cache_userinfo a,t_cache_usertype b,t_cache_expuserinfo c<br>
where a.ui_usertype=b.ut_id <br>
and a.ui_username=c.ui_username<br>
and c.ui_lasttime > trunc(sysdate)-15;<br><br>
ORA-00001: 违反唯一约束条件<br><br>
oracle 可有 sql%count sqlcode sqlerrm 获得被违反了关键字哪行数据 最好是ROWID</p>


<p>The failure causes the whole insert to roll back, regardless of how
many rows were inserted successfully. Adding the DML error logging
clause allows us to
complete the insert of the valid rows.</p>
<blockquote>
<pre>INSERT INTO dest<br>

SELECT *<br>

FROM source<br>

LOG ERRORS INTO err$_dest ('INSERT') REJECT LIMIT UNLIMITED;<br><br>

99998 rows created.<br><br>

SQL></pre>
</blockquote>
<p>
The rows that failed during the insert are stored in the <code>ERR$_DEST</code>
table, along with the reason for the failure.</p>
<pre>COLUMN ora_err_mesg$ FORMAT A70<br>

SELECT ora_err_number$, ora_err_mesg$<br>

FROM err$_dest<br>

WHERE ora_err_tag$ = 'INSERT';<br><br>

ORA_ERR_NUMBER$ ORA_ERR_MESG$<br>

--------------- ---------------------------------------------------------<br>

1400 ORA-01400: cannot insert NULL into ("TEST"."DEST"."CODE")<br>

1400 ORA-01400: cannot insert NULL into ("TEST"."DEST"."CODE")<br><br><br><br><br><span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">oracle10g</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">新功能,</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">log error</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">的实验<br><br></span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">当你通过</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">DML</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">语句对一个表进行</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">DML</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">操作时</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">,</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">如果一个违反某种约束的错误记录发生</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">,</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">则整个事务会中止并回滚</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">,<br></span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">这样会严重影响数据的刷新和浪费系统的性能</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">,</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">为了解决这种问题</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">,oracle10g</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">提供了一个错误记录日志表的功能</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">,<br></span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">拿</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">insert</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">操作举例</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">,</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">得用该功能可以将一个源记录集合中满足约束条件的记录插入目的表中</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">,</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">而将违反约束的记录</span>
</span>
</span>
<span lang="en-us"><span style=""><br></span>
</span>
<span lang="en-us"><span style=""><span style="">插入错误日志表</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">,</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">这样既充分利用了系统的资源</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">,</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">又可以延迟处理错误记录</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">.</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">对于数据仓库是一个非常有用的方法</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">.<br><br></span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">具体使用该方法一般包括三个步骤</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">:<br>
1</span>
</span>
</span>
<span lang="en-us"><span style=""> <span style="">创建错误日志表</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">,</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">共有二种方法</span>
</span>
</span>
<span lang="en-us"><span style=""><br><span style="font-family: Verdana; color: #000000; font-size: x-small;"></span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">法一</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">:</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">利</span>
<span style="">用</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">DBMS_ERRLOG.create_error_log</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">函数</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">;<br>
EXEC DBMS_ERRLOG.create_error_log(dml_table_name => 'A')<br></span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">创建出来错误日志表名为</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">err$_a,</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">即创建的</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">error</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">表以</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">err$_</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">开头,加上表名</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">,</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">我们也可指定错误日志表名</span>
</span>
</span>
<span lang="en-us"><span style=""><br><span style="font-family: Verdana; color: #000000; font-size: x-small;"></span>
<span style="font-family: Verdana; color: #000000; font-size: x-small;">DBMS_ERRLOG.create_error_log(dml_table_name => 'A',err_log_table_name => 'A_LOG');<br></span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">法二</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">:</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">手工创建错误日志表</span>
</span>
</span>
<span lang="en-us"><span style=""><br><span style="font-family: Verdana; color: #000000; font-size: x-small;"></span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">但需要注意</span>
<span style="">的是手工创建的错误日志表结构需要满足</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">oracle</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">规定</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">,</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">否则会报错</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">.<br>
2</span>
</span>
</span>
<span lang="en-us"><span style=""> <span style="">执行带</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;"> error logging</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">参数的</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">DML</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">语句</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">,</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">其</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">insert</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">语法结构如下</span>
<span style="">其实我也没有找到</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">update</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">或者</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">delete</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">相关语法</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">^_^)<br>
insert_into_clause<br>
{ values_clause [ returning_claus</span>
<span style="font-family: Verdana; color: #000000; font-size: x-small;">e ]<br>
| subquery<br>
}<br>
[ error_logging_clause ]<br>
3</span>
</span>
</span>
<span lang="en-us"><span style=""> <span style="">查询错误日志表</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">,</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">和一般的</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">select</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">语句一样</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">.<br><br></span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">下边我拿</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">insert</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">操作做测试用例</span>
</span>
</span>
<span lang="en-us"><span style=""><br><br><span style="font-family: Verdana; color: #000000; font-size: x-small;">--</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">创建测试表</span>
</span>
</span>
<span lang="en-us"><span style=""><br><span style="font-family: Verdana; color: #000000; font-size: x-small;">CREATE TABLE a<br>
AS<br>
SELECT ROWNUM id,rownum+1 VALUE<br>
FROM all_objects<br>
WHERE rownum<3;<br><br>
--</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">创建唯一性索引</span>
</span>
</span>
<span lang="en-us"><span style=""><br><span style="font-family: Verdana; color: #000000; font-size: x-small;">CREATE UNIQUE INDEX unq_a ON</span>
<span style="font-family: Verdana; color: #000000; font-size: x-small;"> a(id);<br><br>
--</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">利用系统包来创建相应</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">error log</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">表</span>
</span>
</span>
<span lang="en-us"><span style=""><br><span style="font-family: Verdana; color: #000000; font-size: x-small;">EXEC DBMS_ERRLOG.create_error_log(dml_table_name => 'A',err_log_table_name => 'A_LOG');<br>
PL/SQL procedure successfully completed.<br><br>
SQL> desc A_LOG<br>
Name Null? Type<br>
--------------------- -------- -----------</span>
<span style="font-family: Verdana; color: #000000; font-size: x-small;">------<br>
ORA_ERR_NUMBER$ NUMBER --</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">错误记录数</span>
</span>
</span>
<span lang="en-us"><span style=""><br><span style="font-family: Verdana; color: #000000; font-size: x-small;">ORA_ERR_MESG$ VARCHAR2(2000) --</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">错误信息</span>
</span>
</span>
<span lang="en-us"><span style=""><br><span style="font-family: Verdana; color: #000000; font-size: x-small;">ORA_ERR_ROWID$ ROWID --</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">错误记录的</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">rowid(</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">仅对</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">update</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">或</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">delete)<br>
ORA_ERR_OPTYP$ VARCHAR2(2) --</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">操作类型</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">(I-INSERT,U-UP</span>
<span style="font-family: Verdana; color: #000000; font-size: x-small;">DATE,D-DELETE)<br>
ORA_ERR_TAG$ VARCHAR2(2000) --</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">自定义标志说明</span>
</span>
</span>
<span lang="en-us"><span style=""><br><span style="font-family: Verdana; color: #000000; font-size: x-small;">ID VARCHAR2(4000) --</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">原表字段</span>
</span>
</span>
<span lang="en-us"><span style=""><br><span style="font-family: Verdana; color: #000000; font-size: x-small;">VALUE VARCHAR2(4000) --</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">原表字段</span>
</span>
</span>
<span lang="en-us"><span style=""><br></span>
</span>
<span lang="en-us"><span style=""><span style="">其中前五个字段是固定的</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">,</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">后边字段根据原表确定</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">.<br><br><br></span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">请注意</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">:</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">原表和对应</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">error log</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">表的字段类型是不完全匹配的</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">,</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">其转换规则如下</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">:<br>
NUMBER </span>
<span style="font-family: Verdana; color: #000000; font-size: x-small;"> VARCHAR2(4000)<br>
CHAR/VARCHAR2(n) VARCHAR2(4000)<br>
NCHAR/NVARCHAR2(n) NVARCHAR2(4000)<br>
DATE/TIMESTAMP VARCHAR2(4000)<br>
RAW RAW(2000)<br>
ROWID UROWID<br>
LONG/LOB </span>
</span>
</span>
<span lang="en-us"><span style=""> <span style="">不支持</span>
</span>
</span>
<span lang="en-us"><span style=""><br></span>
</span>
<span lang="en-us"><span style=""><span style="">自定义类型</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;"></span>
<span style="font-family: Verdana; color: #000000; font-size: x-small;"> </span>
</span>
</span>
<span lang="en-us"><span style=""> <span style="">不支持</span>
</span>
</span>
<span lang="en-us"><span style=""><br><br><span style="font-family: Verdana; color: #000000; font-size: x-small;">--</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">插入数据</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">,rownum<3</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">的记录违反约束</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">,ROWNUM=3</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">的记录正常插入</span>
</span>
</span>
<span lang="en-us"><span style=""><br><span style="font-family: Verdana; color: #000000; font-size: x-small;">SQL> INSERT INTO a<br>
2SELECT ROWNUM id, rownum+1 VALUE<br>
3FROM all_objects<br>
4WHERE rownum<4<br>
5LOG ERRORS INTO A_LOG REJECT LIMIT UNLIMITED<br>
6;<br>
1 ROWS creat</span>
<span style="font-family: Verdana; color: #000000; font-size: x-small;">ed.<br><br>
--</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">请注意:此处为</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">UNLIMITED</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">,即不限制错误记录的条数,默认为</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">0</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">,即有错误记录就停止整个事务并回滚,我们也可人为设置一个数目,</span>
</span>
</span>
<span lang="en-us"><span style=""><br><span style="font-family: Verdana; color: #000000; font-size: x-small;">--</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">假设为</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">20</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">,即插入时错误记录数超过</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">20</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="">则停止整个事务并回滚</span>
</span>
</span>
<span lang="en-us"><span style=""><span style="font-family: Verdana; color: #000000; font-size: x-small;">~</span>
</span>
</span>
<br></pre>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值