oracle当中的 ‘a:=b’,‘a=b‘,‘a:=:b’,‘a=:b‘傻傻分不清楚?

':'符号放在字母前面:意思是将b设置为变量
‘:’放在=前面,意思是把b值赋值给变量a
':=:'不难理解,这个搭配就是,将变量b的值赋值给变量a
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CREATE OR REPLACE FUNCTION Murmurhash3(input_data VARCHAR2, seed NUMBER) RETURN NUMBER IS h NUMBER := seed; c1 NUMBER := 3458204593; -- 0xcc9e2d51 c2 NUMBER := 1735298763; -- 0x1b873593 r1 NUMBER := 15; r2 NUMBER := 13; m NUMBER := 5; n NUMBER := 364292196; -- 0xe6546b64 blkNums NUMBER := LENGTH(input_data) / 4; remaining_bytes VARCHAR2(4); k NUMBER := 0; res NUMBER := 0; BEGIN FOR i IN 0..blkNums-1 LOOP res := 0; FOR j IN 0..3 LOOP res := res + ASCII(SUBSTR(input_data, i*4+j+1, 1)) * POWER(2, (3-j)*8); END LOOP; res := res * c1; res := MOD(res, POWER(2, 32)); res := BITAND(res, POWER(2, 32)-1); res := res || 0; res := BITAND(res, POWER(2, 32)-1); res := BITAND(res * POWER(2, r1), POWER(2, 32)-1); res := res || 0; res := BITAND(res, POWER(2, 32)-1); res := BITAND(res * c2, POWER(2, 32)-1); res := res || 0; res := BITAND(res, POWER(2, 32)-1); h := BITAND(h*m + n, POWER(2, 32)-1); h := BITAND(h+res, POWER(2, 32)-1); END LOOP; remaining_bytes := SUBSTR(input_data, blkNums*4+1); FOR i IN 1..LENGTH(remaining_bytes) LOOP k := k + ASCII(SUBSTR(remaining_bytes, i, 1)) * POWER(2, (4-i)*8); END LOOP; k := k * c1; k := MOD(k, POWER(2, 32)); k := BITAND(k, POWER(2, 32)-1); k := BITAND(k * POWER(2, r1), POWER(2, 32)-1); k := BITAND(k * c2, POWER(2, 32)-1); k := BITAND(k || 0, POWER(2, 32)-1); h := BITXOR(h, k); h := BITXOR(h, LENGTH(input_data)); h := BITAND(h, POWER(2, 32)-1); h := BITAND(h XOR (h SHR 16), POWER(2, 32)-1); h := BITAND(h * 2246822507, POWER(2, 32)-1); h := BITAND(h XOR (h SHR 13), POWER(2, 32)-1); h := BITAND(h * 3226489909, POWER(2, 32)-1); h := BITAND(h XOR (h SHR 16), POWER(2, 32)-1); RETURN h; END; /
最新发布
06-08
以上是一个 Oracle PL/SQL Function 函数的示例代码,实现了 MurmurHash3 哈希算法,以下是逐行解释: - `CREATE OR REPLACE FUNCTION Murmurhash3(input_data VARCHAR2, seed NUMBER) RETURN NUMBER IS`:声明一个名为 `Murmurhash3` 的函数,它有两个参数,分别是 `input_data` 和 `seed`,返回值是一个数字。 - `h NUMBER := seed;`:初始化一个变量 `h`,赋值为 `seed`。 - `c1 NUMBER := 3458204593;`:初始化一个常量 `c1`,值为 `3458204593`。 - `c2 NUMBER := 1735298763;`:初始化一个常量 `c2`,值为 `1735298763`。 - `r1 NUMBER := 15;`:初始化一个常量 `r1`,值为 `15`。 - `r2 NUMBER := 13;`:初始化一个常量 `r2`,值为 `13`。 - `m NUMBER := 5;`:初始化一个常量 `m`,值为 `5`。 - `n NUMBER := 364292196;`:初始化一个常量 `n`,值为 `364292196`。 - `blkNums NUMBER := LENGTH(input_data) / 4;`:计算 `input_data` 的长度并除以 4,得到块数。 - `remaining_bytes VARCHAR2(4);`:声明一个变量 `remaining_bytes`,表示剩余未处理的字节数。 - `k NUMBER := 0;`:初始化一个变量 `k`,值为 `0`。 - `res NUMBER := 0;`:声明一个变量 `res`,表示哈希值。 - `FOR i IN 0..blkNums-1 LOOP`:循环处理每个数据块。 - `FOR j IN 0..3 LOOP`:循环处理每个字节。 - `res := res + ASCII(SUBSTR(input_data, i*4+j+1, 1)) * POWER(2, (3-j)*8);`:计算哈希值。 - `END LOOP;`:内层循环结束。 - `res := res * c1;`:乘以常量 `c1`。 - `res := MOD(res, POWER(2, 32));`:对 2^32 取模。 - `res := BITAND(res, POWER(2, 32)-1);`:按位与,清除高位。 - `res := res || 0;`:将结果转换为 32 位无符号整数。 - `res := BITAND(res, POWER(2, 32)-1);`:按位与,清除高位。 - `res := BITAND(res * POWER(2, r1), POWER(2, 32)-1);`:左移 r1 位,按位与,清除高位。 - `res := res || 0;`:将结果转换为 32 位无符号整数。 - `res := BITAND(res, POWER(2, 32)-1);`:按位与,清除高位。 - `res := BITAND(res * c2, POWER(2, 32)-1);`:乘以常量 `c2`,按位与,清除高位。 - `res := res || 0;`:将结果转换为 32 位无符号整数。 - `res := BITAND(res, POWER(2, 32)-1);`:按位与,清除高位。 - `h := BITAND(h*m + n, POWER(2, 32)-1);`:计算哈希值。 - `h := BITAND(h+res, POWER(2, 32)-1);`:计算哈希值。 - `END LOOP;`:外层循环结束。 - `remaining_bytes := SUBSTR(input_data, blkNums*4+1);`:获取剩余未处理的字节。 - `FOR i IN 1..LENGTH(remaining_bytes) LOOP`:循环处理剩余字节。 - `k := k + ASCII(SUBSTR(remaining_bytes, i, 1)) * POWER(2, (4-i)*8);`:计算哈希值。 - `END LOOP;`:循环结束。 - `k := k * c1;`:乘以常量 `c1`。 - `k := MOD(k, POWER(2, 32));`:对 2^32 取模。 - `k := BITAND(k, POWER(2, 32)-1);`:按位与,清除高位。 - `k := BITAND(k * POWER(2, r1), POWER(2, 32)-1);`:左移 r1 位,按位与,清除高位。 - `k := BITAND(k * c2, POWER(2, 32)-1);`:乘以常量 `c2`,按位与,清除高位。 - `k := BITAND(k || 0, POWER(2, 32)-1);`:将结果转换为 32 位无符号整数。 - `h := BITXOR(h, k);`:异或运算。 - `h := BITXOR(h, LENGTH(input_data));`:异或运算。 - `h := BITAND(h, POWER(2, 32)-1);`:按位与,清除高位。 - `h := BITAND(h XOR (h SHR 16), POWER(2, 32)-1);`:右移 16 位,按位异或,按位与,清除高位。 - `h := BITAND(h * 2246822507, POWER(2, 32)-1);`:乘以常量,按位与,清除高位。 - `h := BITAND(h XOR (h SHR 13), POWER(2, 32)-1);`:右移 13 位,按位异或,按位与,清除高位。 - `h := BITAND(h * 3226489909, POWER(2, 32)-1);`:乘以常量,按位与,清除高位。 - `h := BITAND(h XOR (h SHR 16), POWER(2, 32)-1);`:右移 16 位,按位异或,按位与,清除高位。 - `RETURN h;`:返回最终计算出的哈希值。 该函数的作用是计算输入字符串的 MurmurHash3 哈希值,并返回一个 32 位无符号整数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值