CREATE OR REPLACE TRIGGER fund_BIU
BEFORE INSERT OR UPDATE ON fund
FOR EACH ROW
BEGIN
IF INSERTING AND :new.fundid IS NULL THEN
:new.fundid := TO_NUMBER(SYS_GUID(), 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
END IF;
END;
/
我对IF
声明感兴趣。这是什么意思
:new.fundid := to_number(sys_guid(),'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
。准确地说sys_guid(), 'xxxxxxxx'
部分。
TY
答案 0 :(得分:2)
想想数字33.关注这意味着什么 - 它是一个数字,它没有数字。它可以表示为3 * 10 + 3 * 1,这就是为什么它在基数10中有两个数字,两个数字都等于3.但你也可以将它表示为33.00。字符串! 33'和! 33.00'明显不同(一个有两个字,另一个有五个);但如果您想将它们视为代表数字,它们代表相同的数字 - 整数33.类似地,+ 33和+33.00表示相同的数字。
如果您输入的字符串类似于! 33'或者' + 33.00'但是你想得到一个数字,然后你使用函数TO_NUMBER()
。例如:' + 33.00'是一个字符串,但TO_NUMBER('+33.00')
是一个数字,数字33。
TO_NUMBER()
允许您提供格式模型,以便Oracle了解如何将其接收的字符串解释为输入。
例如,如果您输入字符串' 1101' - 这是数字一千一百,还是数字13,用二进制表示法给出?
类似地,数字33具有字符串表示' 21'十六进制(" HEX") TO_NUMBER('21')
将输出数字21;但是你可以通过提供格式模型' XX'来告诉Oracle你的十六进制数字。两个数字有两个X,X通常用于表示" hex"。因此TO_NUMBER('21', 'XX')
将输出数字33,而不是数字21。
SYS_GUID()
输出非常大数字的十六进制表示。输出是一个字符串。将TO_NUMBER()
应用于它,使用格式模型指示它应被解释为十六进制数字,将其转换为实际数字(而不是十六进制数字的字符串)。
答案 1 :(得分:1)
SYS_GUID()
做的是生成唯一的16字节标识符或密钥。应用TO_NUMBER()
函数时,您将获得该密钥的32位数表示。它基本上是一种在Oracle中生成唯一数字的方法。
请参阅Oracle文档中的SYS_GUID()
:https://docs.oracle.com/cd/B12037_01/server.101/b10759/functions153.htm