Свитчер

Jan 12, 2013 01:20

Switch.
Я думал, будет сложно. Я накачал доков по Ораклу, залил их в ридер. Думал, в поезде почитаю. Вдруг, думаю, руководитель направления, с которым мы в скайпе очень коротко поговорили, будет меня спрашивать...
В поезде я ехал устраиваться на работу. Головная фирма в Москве, у нас тут - просто офис разработчиков. Так что все наши трудовые в головном офисе.
Естественно, никто меня не спрашивал, не устраивал мне экзаменов, не садил за комп и не просил  показать, на что же способен в Оракле я, ни разу не написавший и строчки кода на оракловском PL/SQL Firebird разработчик.
Я подписал большую кучу бумаг, пообщался с безопасником, встретился с начальником, который меня бегло ознакомил с коллективом. И всё. Пошёл шарахаться по Москве.
Позже, уже дома, когда московские админы соблаговолили таки выдать мне учётку, я настроил рабочее окружение на домашнем буке и погрузился в неизведанное.
Ну как, так уж прямо неизведанное Всё-таки SQL - это, как никак, стандарт. Возможностей, конечно, побольше. Да чего там, в Оракле после Файербёрда чувствуешь себя как в Икее после местного универмага. Дурацкая аналогия, другой не придумал.
Во-первых, конечно, PL/SQL. Тут есть пакеты. "Чего за пакеты?" - думал я неделей ранее, когда почитывал Oracle 2-day developer guide. А тут всё понятно - есть пакет, внутри пакета можно писать функции, процедуры, объявлять внутрипакетные переменные и типы. Можно всё это показывать наружу пакета, можно оставлять внутри. Функции, процедуры есть, конечно, и вне пакетов, но пакетированные круче, лучше, логичнее, правильнее, и порядок в доме :) У нас запрещено объявлять процедуры вне пакетов. Думаю сейчас, какой бы хаос был, не будь в Оракле механизма пакетов В ФБ вот нет пакетов..
А во-вторых... Когда я в одной процедуре написал вот такую банальщину:

if exists (select id
from table_name
where field = 1)
then
--do somthing
end if;

мой начальник сказал: "Нифига себе конструкция! И чо, работает?". "Ага" - ответил я ему. Потому что откомпилировалось без ошибок Ну чего тут может не работать?
Тут выполняется некий участок кода при условии, что в табличке table_name есть хоть одна запись с field = 1.

Ага, сказал Оракл ну-ну.
Когда я запустил успешно откомпилированную процедуру он показал мне исключение, смысл которого сводился к тому, чт exists ельзя использовать в PL/SQL, только в SQL. Опа, подумал я тогда, ну и порядочки...
Пришлось переписать на вот такую вот, мнэээ...нифигасебеконструкцию:

select count(1)
into local_variale
from table_name
where field = 1;

if local_variable > 0
then
--do somthing
end if;

Она делает тоже самое, только в два приёма. Да ещё и считает записи, вместо того, чтобы найти первую попавшуюся... Но вот так уж тут принято.
В общем, второй пример как бы говорит нам, что неплохо бы ораклу научиться всё же использовать exists в процедурах.

sql, firebird, пятница-вомбатница, сине-зелёные водоросли, oracle

Previous post Next post
Up