|
Программирование >> Oracle
Пакет DBMS UTILITY 1743 следующих элементов. Поиск прекращается раньше, если обнаружится пустой слот (известно, что нужной записи после этого значения быть не может): 71 for i in l hash .. least(l hash+1000, nvl(g hashtable.count,0)) 72 loop 7 3 - Если обнаружили ПУСТОЙ слот, мы ЗНАЕМ, что искомого 7 4 - значения в таблице нет, поскольку он должен был быть -> помещен в этот слот. 75 if (g hash table(i) is NULL) then return NULL; end if; - Если ключ найден, вернуть соответствующее значение. if(g hash table(i).key = p key) then return g hash table(i).val; end if; end loop; 76 77 80 81 82 83 85 86 87 88 89 end; - Ключа в таблице нет. return null; Завершаем работу. Последняя процедура используется для выдачи полезной информации, например, о количестве выделенных и использованных слотов, а также о количестве конфликтов. Учтите, что количество конфликтов может превосходить размер таблицы! 97 98 101 102 103 104 105 107 108 109 110 111 112 113 114 115 116 member procedure print stats is l used number default 0; begin for i in 1 .. nvl(g hash table.count,0) loop if (g hash table(i) is not null) then l used := l used + 1; end if; end loop; dbms output.put line(Таблица увеличена до..... g hash table.count); dbms output.put line( Mi используем.......... l used); dbms output.put line(Количество конфликтов... g collision cnt); end; end; / Type body created. 1744 Приложение Как видите, мы использовали функцию GET HASH VALUE для получения по строке числа, которое можно использовать для индексации табличного типа и выборки значения. Теперь можно рассмотреть, как используется этот новый тип: tkyte@TKYTE816> declare 2 l hashTblhashTableType :=hashTableType.new(power(2,7)) ; 3 begin 4 for x in (select username, created from all users) 5 loop 6 l hashTbl.put(x.username, x.created); 7 end loop; 8 9 for x in (select username, to char(created) created, 10 l hashTbl.get(username) hash 11 from all users) 12 loop 13 if (nvl(x.created, x) onvl(x.hash,x)) 14 then 15 raise program error; 16 end if; 17 end loop; 19 l hashTbl.print stats; 20 end; 21 / Таблица увеличена до.....12 0 Используется.............17 Количество конфликтов....1 PL/SQL procedure successfully completed. Вот и все. Мы расширили возможности языка PL/SQL, добавив хеш-таблицу на базе стандартных пакетов. Резюме Мы завершаем обзор основных подпрограмм пакета DBMS UTILITY. Многие из них, в частности GET TIME, GET PARAMETER VALUE, GET HASH VALUE и FORMAT CALL STACK, входят в мой список часто даваемых ответов . Это означает, что именно они необходимы для решения многих проблем. Пользователи просто не знают о существовании этих подпрограмм. Пакет UTL FILE Стандартный пакет UTL FILE позволяет читать и создавать текстовые файлы в файловой системе сервера в среде PL/SQL. Здесь существенны следующие ключевые слова. Текстовые файл1. Пакет UTL FILE позволяет читать и создавать простые текстовые файлы. В частности, его нельзя использовать для чтения или создания двоичных файлов. Специальные символы, содержащиеся в двоичных данных, приводят к некорректной работе пакета UTL FILE. В файловой системе сервера. Пакет UTL FILE позволяет читать и записывать файлы только в файловой системе сервера баз данных. Он не позволяет читать или записывать в файловую систему компьютера, на котором работает клиент, если последний не подключен локально к серверу. Пакет UTL FILE подходит для создания отчетов и сброса данных из базы в текстовые файлы, а также для чтения и загрузки данных. В главе 9 первой части книги представлен полный пример использования пакета UTL FILE для создания текстового файла в формате, упрощающем загрузку. Пакет UTL FILE также помогает при отладке. В главе 21, посвященной средствам тщательного контроля доступа, представлен пакет DEBUG. Этот пакет интенсивно использует средства пакета UTL FILE для записи сообщений в файловую систему. Пакет UTL FILE - очень полезен, но, используя его, нужно помнить об определенных ограничениях. В противном случае результаты могут оказаться некорректными (причем, выявиться это может не при тестировании, а при внедрении) и вызовут разочарование.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |