CftClub.ru
Клуб специалистов ЦФТ-Банк

Маленькие ошибки с большими ... - is record и %type

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
oradba81
Гость



СообщениеЧт Дек 09, 2010 17:54   Маленькие ошибки с большими ... - is record и %type Ответить с цитатой
Полезность: Нет оценки
Начну цикл тем о том "КАК НЕ надо Делать".
Т.к. ошибки встречаются очень часто и глаза уже мозолят.
Пора искоренять плохой кодинг. Надо Всегда помнить что Вы программируете прежде всего для Базы Оракл. И одно и то же можно сделать разными способами и очень часто результат по эффективности и скорости будет разный.
Буду приводить НЕПРАВИЛЬНЫЙ код.
Правильный ответ указывать НЕ буду, чтобы было надчем подумать, а не просто принимать готовенькое (что обычно часто забывается) .
Все сказанное касается PL/PLUS, PL/SQL и Oracle дабы заранее ответить на вопросы почему все медленно работает и плохо масштабируется. Код после цензуры, таблицы и операции выдуманные. Главное смысл, а не конкретные ТБП

Итак про "is record и %type"

Код:

Код:
create table z#acc
(
  id number
  , c_main_number varchar2(20)
  , c_client_name_id number
  , c_date_open date
  , c_date_close date
  , c_user_open_id number
  , c_user_close_id number
  , c_branch_id number
  , c_depart_id number
  , c_saldo number
  , c_saldo_rur number
  , c_currency_id number
);

create or replace package body pack_acc is
 
......................

type rec is record
(
  main_number ::[acc].[main_number]%type
  , client_name_id  ::[acc].[client_name_id]%type
  , date_open  ::[acc].[date_open]%type
  , date_close  ::[acc].[date_close]%type
  , user_open_id  ::[acc].[user_open_id]%type
  , user_close_id  ::[acc].[user_close_id]%type
  , branch_id  ::[acc].[branch_id]%type
  , depart_id  ::[acc].[depart_id]%type
  , saldo  ::[acc].[saldo]%type
  , saldo_rur  ::[acc].[saldo_rur]%type
  , currency_id  ::[acc].[currency_id]%type
);

......................

end;
Admin
Site Admin


Вступление в Клуб: 09.06.2007
СообщениеЧт Дек 09, 2010 22:44    Ответить с цитатой
Полезность: Нет оценки
Цикл статей полезный, хорошая идея.

Только правильный ответ лучше сообщать, а то непонятно, какую именно из ошибок Вашего кода Вы считаете самой плохой (в примерах ведь не по одной ошибке).

Касательно %type могу сказать, что конструкция удобная, и, вроде бы, при компиляции принимает значение конкретного типа. Или она именно в record как-то не так в PL/SQL транслируется? (У меня сейчас нет возможности проверить)
Admin
Site Admin


Вступление в Клуб: 09.06.2007
СообщениеЧт Дек 09, 2010 23:06    Ответить с цитатой
Полезность: Нет оценки
Посмотрел все примеры и все прокомментировал.

И пришёл к мнению, что примеры неочевидны, главная мысль не выражена четко и понятно. Поэтому снабжать "разгадками" будет полезно.

А кому вообще предназначены примеры? На какой уровень программиста рассчитаны?
vshahmatov
Участник со стажем


Вступление в Клуб: 02.02.2010
СообщениеПт Дек 10, 2010 08:01    Ответить с цитатой
Полезность: Нет оценки
А мне вот не совсем понятно, почему эти темы находятся здесь, а не в разделе Разработка в PL/PLUS. Оптимизация запросов Oracle
Данный раздел как мне кажется скорее про пользовательскую сторону систем.
oradba81
Гость



СообщениеПт Дек 10, 2010 10:58    Ответить с цитатой
Полезность: Нет оценки
Admin пишет:
Посмотрел все примеры и все прокомментировал.

И пришёл к мнению, что примеры неочевидны, главная мысль не выражена четко и понятно. Поэтому снабжать "разгадками" будет полезно.

А кому вообще предназначены примеры? На какой уровень программиста рассчитаны?


Поясню

Примеры содержат как простые ошибки - для тех кто только учится идти по тропе девелопмента абс

Так и сложные - для тех кто уже многие годы жгет глаза, вглядываясь в код.

Каждый находит ошибки под себя.

Разгадок - не дам. Думайте!
А подсказки могут быть
oradba81
Гость



СообщениеПт Дек 10, 2010 11:01    Ответить с цитатой
Полезность: Нет оценки
Admin пишет:
Цикл статей полезный, хорошая идея.

Только правильный ответ лучше сообщать, а то непонятно, какую именно из ошибок Вашего кода Вы считаете самой плохой (в примерах ведь не по одной ошибке).

Касательно %type могу сказать, что конструкция удобная, и, вроде бы, при компиляции принимает значение конкретного типа. Или она именно в record как-то не так в PL/SQL транслируется? (У меня сейчас нет возможности проверить)


Подсказка:в теме сообщения написано:
".... is record и %type"

вначале приведен DDL таблицы

смотря на "%type" думайте шире (ищите варианты)
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеПт Дек 10, 2010 14:27    Ответить с цитатой
Полезность: Нет оценки
Admin пишет:
...
Касательно %type могу сказать, что конструкция удобная, и, вроде бы, при компиляции принимает значение конкретного типа.
...

совершенно верно.

Странно конечно сравнивать.. в одном случае мы имеем таблицу в другом запись, ну да ладно.

В одном случае мы юзаем PL\SQL вставку во втором объектный язык PL+
понятно, что при интерпретации компилятором объектного языка будут некоторые неточности.. так для этого есть закладка "пакет", где можно все посмотреть... в крайнем случае можно не пользоваться %type а явно указать тип переменной
да и можно написать так:
Код:
type rec is record
(   c_main_number varchar2(20)
  , c_client_name_id number
  , c_date_open date
  , c_date_close date
  , c_user_open_id number
  , c_user_close_id number
  , c_branch_id number
  , c_depart_id number
  , c_saldo number
  , c_saldo_rur number
  , c_currency_id number
);

type TRecTable is table of rec;


в результате имеем таблицу "TRecTable" записей "rec" в памяти
_________________
всегда есть как минимум 2 выхода
oradba81
Гость



СообщениеПт Дек 10, 2010 14:55    Ответить с цитатой
Полезность: Нет оценки
2 Alexsey

Не СТОП )
Не в ту степь, да еще и не на лошадях

Alexsey пишет:
будут некоторые неточности


Интересно...., раз уж упомянул про них, то выкладывый относительно этого примера, что это за некоторые неточности? Smile

Раз уж обещался давать посказки поясню:

Alexsey пишет:
в крайнем случае можно не пользоваться %type а явно указать тип переменной


Не о том речь
oradba81
Гость



СообщениеПн Дек 13, 2010 12:39    Ответить с цитатой
Полезность: Нет оценки
Подсказка "в яблочко":
Что придется сделать если в тбп добавиться реквизит
и его надо учитывать в приведенной записи?
oradba81
Гость



СообщениеПн Дек 13, 2010 17:09    Ответить с цитатой
Полезность: Нет оценки
Привожу ответ:

Код:
type tab is table of z#acc%rowtype
oradba81
Гость



СообщениеПн Дек 13, 2010 17:11    Ответить с цитатой
Полезность: Нет оценки
так же см
http://www.cftclub.ru/viewtopic.php?t=1755
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru