מערכים אסוציטיביים - ilDBA Portal

מערכים אסוציטיביים

15/06/2014 | פורסם על ידי

עבודה עם מערכים ב- PL/SQL היא לא מסובכת. רובנו מכירים מערכים משפות תכנות והעבודה איתם די פשוטה: רצף של תאים שהגישה אליהם היא לפי האינדקס של התא.

הבעיה היא שבדרך כלל אנחנו צריכים לגשת לערך מסויים לפי ערך אחר. כמובן, שאנחנו עובדים עם אורקל, שהוא בסיס נתונים רלציוני, לכן הדרך שנקראית הפשוטה ביותר היא להכניס את הערכים הרצויים לטבלה ואז לשלוף לפי אינדקס. החסרון בשיטה זו הוא שהעבודה היא מול טבלאות של ממש, כלומר, גישות לטבלה יכולות לגרום לפעולות I/O, אנחנו מושפעים מה- buffer cache וכו'. מה גם, שאם אנחנו רוצים להריץ את הפרוצדורה שלנו מספר פעמים במקביל, הריצות השונות ישפיעו אחת על השניה.

הדרך היעילה ביותר לכתוב את זה נקראית מערך אסוציאטיבי (associative array). זהו מערך בזכרון הפרטי של ה- server process שאינו מושפע ממשתמשים אחרים. המבנה של המערך הוא ערך מסוג מסויים בעל אינדקס מסוג מסויים. האינדקס הוא מספר או טקסט והערך של האינדקס לא חייב להיות מספר מ- 1 והלאה, אלא מה שאנחנו רוצים.

נקח דוגמא כדי לפשט את העניינים. נגיד ואנחנו רוצים לצבוע את מפת העולם ב- 4 צבעים: כחול, ירוק, אדום וצהוב. הדרישות שלנו: לקבל בצורה פשוטה צבע של מדינה מסויימת, לעבור על כל המדינות ולבדוק האם נתנו צבע למדינה.

הפתרון יהיה לבנות מערך אסוציאטיבי שהערכים בו הם varchar2(4) לצבעים, והאינדקס שלו הוא varchar2(30) לשם המדינה.

קטע הקוד הבא מציג מספר דוגמאות לעבודה עם מערך אסוציאטיבי: יצירת תאים חדשים, בדיקה כמה תאים יש במערך, מעבר על כל המערך ובדיקה האם ערך מסויים מופיע בו.

declare
type map_array is table of varchar2(4) index by varchar2(30);
map map_array;
idx varchar2(30);
begin
-- add countries to the array
map('Israel'):='blue';
map('Italy'):='red';

-- print the number of countries in the arrary
dbms_output.put_line('There are '||map.count||' countries');

-- go over the entire array
idx:=map.first;
while (idx is not null)
loop
dbms_output.put_line('Country '||idx||' is '||map(idx));
idx:=map.next(idx);
end loop;

-- check if a country exists
idx:='England';
if (map.exists(idx))
then
dbms_output.put_line(idx||' has the color '||map(idx));
else
dbms_output.put_line(idx||' does not have a color');
end if;
end;
/

בהצלחה.

בכל שאלה ניתן לפנות אלי במייל liron@brillix.co.il

The following two tabs change content below.
ירון אמיצי הוא סמנכ"ל שירותי מומחה בחברת בריליקס ו-DBA בכיר בעל נסיון של למעלה מ- 15 שנים. ללירון תואר Oracle Ace ומתמחה בנושאי ביצועים, תשתיות, פתרונות זמינות גבוהה, גיבויים ושחזורים. ללירון יש גם בלוג עצמאי בכתובת: https://amitzil.wordpress.com

השאר תגובה:

שם (חובה):
אימייל (לא יפורסם) (חובה):
תגובה (חובה):

*



מאמרים קשורים

איך לבצע Sizing DB ב-Datacenter בארגונך בקלות (חלק א')

כחלק מהטמעות מוצרי IT תשתיתיים (כגון FWDB, מוצרי גיבוי, חוות Storage, מוצרי שו"ב ועוד…) בארגוני, אנו נדרשים המון פעמים לענות על שאלות לספקים כגון : מה גודל הכולל של ה –  Datacenter  ? מה חלוקת גודל ה [...]
מבוא

מבוא לבעיות ביצועים באורקל

The following two tabs change content below.BioLatest Posts עודד רז עודד רז, מנכ"ל חברת בריליקס ומייסד אתר זה. עודד הוא Oracle ACE Director ואחד מה-DBA-ים הבכירים ביותר בישראל, עם מעל 15 שנות ניסיון כ-DBA תשתיתי ואפליקטיבי. לעודד [...]

ה-SQL Performance Analyzer ב-Real Application Testing

בפוסט הקודם הזכרתי בקצרה את ה-SQL Performance Analyzer, בפוסט הזה אני אציג את ה-SPA, יתרונות וחסרונות של המוצר ואיך כדאי להשתמש [...]

מבוא ל- Real Application Testing

הפעם רציתי לסקור feature שלם שנקרא RAT (או בשמו המלא Real Application Testing). ה- feature הזה הוא database option של Oracle Enterprise Edition והוא לא חדש בכלל. הוא הוצג ב- 11gR1 וגם נמצא בשימוש לא מועט בעולם. משום מה, אצלנו בארץ לא יוצא [...]
Copyright 2019 ilDBA Portal. Brought to you by Brillix - Israel Leading DBA company. Sponsored by: DBSnaps - Database Video Tutorialss
Website Security Test
%d בלוגרים אהבו את זה: