2016-12-05 11 views
5

Veritabanımda dahili olarak "ColorByte" alanını güncellemem gereken büyük bir tablom var. Bu alan RGB değerlerinden hesaplanır ve öncelikle Excel-VBA Skripts tarafından kullanılır, fakat aynı zamanda WinForms C# Uygulamalarında da kullanılır. Belirli bir rengi temsil eden bir tamsayı değerini temsil eder.PL/SQL'de RGB Değeri nasıl oluşturulur?

Bu VBA (sadece açıklama hiçbir çalışma kodu) aşağıdaki gibi çalışır:

r = 5 
g = 50 
b = 200 

colorByte = RGB(r,g,b) 

RGB-Function here hakkında daha fazlasını okuyun.

Şimdi, VBA'da geliştirilen ve araştırma ekibimizin bir üyesi tarafından geliştirilen şirketimize özgü verilerden daha iyi RGB Değerleri almak için karmaşık bir hesaplama planım var. Büyük tabloyu güncellemek ve "colorByte" alanını düzeltmek için bu calcution'u veritabanında tanımlamalıyım. Kesin hesaplamalar önemsizdir çünkü bu şeyler işe yarar çünkü:

İşlevimi tamamlamak için PL/SQL'de kullanabileceğim bir VBA RGB(r, g, b) İşlev eşdeğeri var mı?

Veya birisi bu işlevin dahili olarak ne yaptığını biliyor, böylece PL/SQL'de yeniden tanımlayabilir miyim? Ben RGB(r,g,b) düşünüyorum

cevap

4

Hayır, hayır Oracle yerleşik RGB() işlevi yoktur, ancak formula

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

Yani fonksiyon bu

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; 

Testi durumda gibi görünebilir oldukça basittir:

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

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

1 row selected. 
2

basitçe

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

Belki tersi (yani r + 256*g + 256*256*b) 'dir yapar ama ben basit deneme-yanılma yoluyla bu öğrenebilirsiniz eminim. Bunu PL/SQL'de yeniden oluşturmak hiç sorun olmaz.

İlgili konular