2017-05-20 76 views
-4
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'部分。作爲TO_NUMBER的第二個參數,'XXXXXX'是什麼意思? Oracle SQL

TY

+1

您是否試過Google?搜索'oracle to_number'會產生[this result](https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions191.htm)。現在嘗試'oracle sys_guid'。 – Pharaoh

+0

嗯,我試過谷歌,但事情是我想知道這是什麼意思。我知道這是一個if語句,但我不確定這是什麼意思。 TY – 4sakenks

回答

1

SYS_GUID()做什麼是生成一個唯一的16字節的標識符或鍵。在應用TO_NUMBER()函數時,您將獲得該密鑰的32位數字表示。它基本上是一種在Oracle中生成唯一編號的方法。

SYS_GUID() Oracle文檔中:https://docs.oracle.com/cd/B12037_01/server.101/b10759/functions153.htm

+0

TY爲你的答案:)即時閱讀它現在,但不太明白它... – 4sakenks

+0

它只是一個表中的每一行的唯一序列。這裏的另一個解釋可能是有用的:http://psoug.org/definition/SYS_GUID.htm – alejandrogiron

+0

爲了進一步解釋,這個'IF'語句做了什麼是:如果':new.fundid'(我是猜測是'基金'表中的主鍵)爲空,爲其分配一個唯一值作爲主鍵。這個唯一的值由'SYS_GUID()'生成,並使用'TO_NUMBER()'函數簡單地轉換爲32位數字。 – alejandrogiron

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'(「以十六進制」)。 TO_NUMBER('21')將輸出數字21;但通過提供格式模型'XX',您可以告訴Oracle您的意思是一個十六進制數字。有兩個X代表兩位數字,而X通常用來表示「十六進制」。所以TO_NUMBER('21', 'XX')將輸出數字33,而不是數字21.

SYS_GUID()輸出一個非常大的數字的十六進制表示。輸出是一個字符串。將TO_NUMBER()應用於它,用指示它應該被解釋爲十六進制數字的格式模型將其轉換爲實際數字(而不是十六進制數字串)。

+0

TY。現在這一切都變得非常清楚。 THX再次 – 4sakenks

相關問題