2016-12-05 48 views
5

我在我的數據庫中有一個大表,我需要更新內部調用"ColorByte"字段。該字段根據RGB值進行計算,主要由Excel-VBA Skripts使用,但也適用於WinForms C#應用程序。它代表一個代表特定顏色的整數值。如何在PL/SQL中創建RGB值?

這工作在VBA(只是爲了澄清沒有工作代碼)如下:

r = 5 
g = 50 
b = 200 

colorByte = RGB(r,g,b) 

瞭解更多關於RGB-功能here

現在我得到了一個複雜的計算方案,可以從我們公司的具體數據中獲得更好的RGB值,這是由我們的研究團隊成員在VBA中開發的。我必須在數據庫上定義這個計算器來輕鬆更新我的大表並糾正"colorByte"字段。確切的計算是不重要的,因爲這東西的作品,但:

有沒有相當於VBA RGB(r, g, b)函數,我可以在PL/SQL中使用來完成我的功能?

還是有人知道這個函數在內部做什麼,這樣我可以重新定義它在PL/SQL?

回答

4

沒有,沒有甲骨文內置RGB()功能,但formula很簡單

colorByte = red + (green * 256) + (blue * 256 * 256) 

因此函數可能看起來像這樣

create or replace function rgb(
    p_red in number, 
    p_green in number, 
    p_blue in number 
) return number 
is 
begin 
    return p_red + (p_green * 256) + (p_blue * 256 * 256); 
end; 

測試用例:

select rgb(5, 50, 200) as color_value 
    from dual 

COLOR_VALUE 
----------- 
    13120005 

1 row selected. 
2

我覺得RGB(r,g,b)來說確實

RGB(r,g,b) = 256 * 256 * r + 256 * g + b 

也許是周圍的其他方式(即r + 256*g + 256*256*b),但我相信你可以通過簡單的嘗試和錯誤的發現這一點。 在PL/SQL中重建它應該沒有問題。