- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对表进行了合并,如果数据不同则需要更新数据。在 MSSQL 中,我通常通过这种方式检查校验和:
WHEN MATCHED AND
CHECKSUM(TARGET.Field1,TARGET.Field2, ... TARGET.Field25)
<>
CHECKSUM(TARGET.Field1,TARGET.Field2, ... TARGET.Field25)
THEN UPDATE
SET FIELD1 = FIELD1
如何在 Oracle 中实现同样的功能?
最佳答案
Oracle 的 STANDARD_HASH 函数“计算给定表达式的哈希值”(参见 documentation)。在 UPDATE 的 WHERE 子句中使用校验和(在 MERGE 语句中)。
用于测试的表 (Oracle 12c)
-- 2 tables
create table table1 as
select 1 id, 1 a1, 1 b1, 1 c1, 1 d1, 1 e1, 1 f1 from dual;
create table table2 as
select 2 id, 2 a2, 2 b2, 2 c2, 2 d2, 2 e2, 2 f2 from dual;
SHA256校验和
-- eg
select
standard_hash ( T.id || T.a1 || T.b1 || T.c1 || T.d1 || T.e1 || T.f1, 'SHA256' )
from table1 T ;
-- output
SHA256
2558A34D4D20964CA1D272AB26CCCE9511D880579593CD4C9E01AB91ED00F325
合并
merge into table1 T
using (
select id, a2, b2, c2, d2, e2, f2
from table2
) T2 on ( T.id = T2.id )
when matched then
update
set T.a1 = T2.a2
, T.b1 = T2.b2
, T.c1 = T2.c2
, T.d1 = T2.d2
, T.e1 = T2.e2
, T.f1 = T2.f2
where
standard_hash ( T.id || T.a1 || T.b1 || T.c1 || T.d1 || T.e1 || T.f1, 'SHA256' )
<>
standard_hash ( T2.id || T2.a2 || T2.b2 || T2.c2 || T2.d2 || T2.e2 || T2.f2, 'SHA256' )
when not matched then
insert ( T.id, T.a1, T.b1, T.c1, T.d1, T.e1, T.f1 )
values ( T2.id, T2.a2, T2.b2, T2.c2, T2.d2, T2.e2, T2.f2 )
;
-- 1 row merged
执行 MERGE 语句后,表包含:
SQL> select * from table1;
ID A1 B1 C1 D1 E1 F1
1 1 1 1 1 1 1
2 2 2 2 2 2 2
SQL> select * from table2;
ID A2 B2 C2 D2 E2 F2
2 2 2 2 2 2 2
修改table2,再次MERGE:
update table2
set a2 = 20, c2 = 30, f2 = 50
where id = 2 ;
insert into table2 ( id, b2, d2, e2 )
values (3, 33, 333, 3333 ) ;
select * from table2;
ID A2 B2 C2 D2 E2 F2
2 20 2 30 2 2 50
3 33 333 3333
再次执行MERGE语句。表 1 现在包含:
SQL> select * from table1;
ID A1 B1 C1 D1 E1 F1
1 1 1 1 1 1 1
2 20 2 30 2 2 50
3 33 333 3333
关于oracle - Oracle中如何计算校验和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49351935/
如何在 PHP 中生成 CRC-8 校验和? 最佳答案 function crcnifull ($dato, $byte) { static $PolyFull=0x8c; for ($i=0
我正在编写代码来使用 32 位无符号整数计算 CRC16。当尝试打印执行 CRC 操作的 XOR 函数的返回值时,它总是打印 0。我尝试了各种调试方法,例如打印语句,但是,我似乎无法弄清楚! 这是我的
ThinkPHP3.2.3验证码显示、刷新、校验 ,具体如下: 显示验证码 首先在Home/Controller下创建一个公共控制器PublicController
我想将自定义验证绑定(bind)到 TimePicker 自定义控件,但下面的代码显示“无法将内容添加到 TimePicker 的对象类型。”。
目录 Spring 校验(validator,JSR-303)实现 什么是JSR-303规范 与Spring MVC结合 实体类添加
导包和配置 导入 JSR 303 的包、hibernate valid 的包 ?
我是一名优秀的程序员,十分优秀!