Добавить в избранное   Сделать стартовой   Главная   E-mail   Форум   Мой блог 
   
Cертификации

Errors

ETL

FAQ (по темам)

GIS

Web

wiki

Администрирование

Безопасность

Книги
Oracle, ...

Новости

ОС

Программирование

Проектирование БД

Производительность

Скачать

Советы

Тестирование

Установка

FAQ - по базам данных
FAQ - по базам данных
Установка СУБД
Oracle
Sybase
MySQL
PostgreSQL
MS SQL Server
Interbase, Firebird
Другие DB
Администрирование
Oracle
MySQL
Sybase
PostgreSQL
MS SQL Server
Interbase, Firebird
IBM DB2
Другие DB
Проектирование БД
Статьи
ETL
Теория БД
ErWin
Designer 2000
PowerDesigner
Хранилища данных
CASE средства
OLAP
Бизнес - анализ (BI)
Производительность
Oracle
MSSQL
Interbase, Firebird
IBM DB2
MySQL
PostgreSQL
SYBASE
Безопасность БД
Oracle
MS SQL Server
Инъекция SQL
Программирование
Transact-SQL
PL/SQL
C++
XML
SQL
PostgreSQL
MDX
Java
VBA Excel
Книги по базам
Oracle
Заказ книг
ОС
Установка и настройка
UBUNTU
ОС
Установка и настройка
UBUNTU
FAQ
FAQ - по базам данных
Главная

Cервер Oracle Database 11g (основные возможности)

Печать E-mail
Оглавление
Cервер Oracle Database 11g (основные возможности)
Страница 2
Страница 3
Страница 4

SQL> create table t( x varchar2(4000) );
Table created.

SQL> create or replace
2 procedure maintain_t
3 ( p_str in varchar2 )
4 as
5 begin
6 insert into t
7 ( x ) values
8 ( p_str );
9 exception
10 when others
11 then
12 -- call some log_error() routine
-- вызов некоторой подпрограммы протоколирования ошибок
13 null;
14 end;
15 /
Procedure created.

Она настолько проста, насколько это возможно. Ничего не должно работать неправильно, но для случаев, когда происходит ошибка, я протоколирую ее, используя написанную мною вспомогательную процедуру. Где-то она пишет хорошее сообщение об ошибке (будем надеяться!), а, случается, что кто бы не вызвал эту подпрограмму, он не будет иметь понятия, что произошла непредвиденная исключительная ситуация, поэтому она не может быть локализована. (Я постоянно встречаю подобный код.) Теперь, когда кто-то вызовет эту подпрограмму:

SQL> exec maintain_t( rpad( 'x', 4001,
'x' ) );
PL/SQL procedure successfully completed.

Ее выполнение кажется успешным, но это не так:

SQL> select * from t;
no rows selected

 

Здесь и начинается неразбериха: пользователи "обрывают" телефон, пишут электронные письма, они говорят: "Сломался сервер Oracle Database, транзакция завершилась успешно, однако данные – некорректные". На самом деле, проблема заключается в скрытой ошибке. Теперь в среде сервера Oracle Database 11g для обнаружения таких ошибок я просто буду просить людей сначала выполнить над их кодом следующие действия:

SQL> alter procedure maintain_t compile
2 PLSQL_Warnings = 'enable:all'
3 reuse settings
4 /

SP2-0805: Procedure altered with
compilation warnings

SQL> show errors procedure maintain_t
Errors for PROCEDURE MAINTAIN_T:

LINE/COL ERROR
---------- ---------------------------------------
9/8 PLW-06009: procedure
"MAINTAIN_T" OTHERS handler
does not end in RAISE or
RAISE_APPLICATION_ERROR

И тотчас же вы извлечете список приложений (и строки исходного кода), чтобы незамедлительно добавить простые вызовы RAISE, которые позволят увидеть, откуда поступает эта скрытая ошибка. Работа сделана.

Пустячок, а приятно. . .

Недаром говорят – пустячок, а приятно. Есть у меня напоследок одна мелочь, которая немного упрощает вашу программистскую жизнь, а язык PL/SQL делает немного более совершенным:

SQL> create sequence this_is_nice;
Sequence created.

SQL> declare
2 n number;
3 begin
4 n := this_is_nice.nextval;
5 dbms_output.put_line( n );
6 end;
7 /
1
PL/SQL procedure successfully completed.

Сравните это с тем, как такое нужно было делать в сервере Oracle Database 10g и предыдущих версиях. В сервере Oracle Database 11g не нужно больше выбирать последовательность из таблицы DUAL. Так что, язык PL/SQL стал намного более совершенным.



 
 
« Пред.   След. »
Взаимосвязанные статьи
     

Последние добавленные статьи
Поиск
Ссылки
Главная
Скачать
Курсы
Роль АБД (SYSDBA)
Карта сайта
Автостекла
Контакты
Войти на сайт
Популярные статьи
Online - тесты
1Z0-042
Rambler's Top100 МЕТА - Украина. Рейтинг сайтов хостинг от freehost.com.ua

Все права защищены.SYSDBA 2010 | Если у Вас есть хороший материал пришлите его нам.