Маленькие ошибки с большими ... - is record и %type
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 пишет: | будут некоторые неточности |
Интересно...., раз уж упомянул про них, то выкладывый относительно этого примера, что это за некоторые неточности?
Раз уж обещался давать посказки поясню:
Alexsey пишет: | в крайнем случае можно не пользоваться %type а явно указать тип переменной |
Не о том речь |
|
 |
oradba81 Гость
|
Пн Дек 13, 2010 12:39   |
|
Полезность: Нет оценки
|
Подсказка "в яблочко":
Что придется сделать если в тбп добавиться реквизит
и его надо учитывать в приведенной записи? |
|
 |
oradba81 Гость
|
Пн Дек 13, 2010 17:09   |
|
Полезность: Нет оценки
|
Привожу ответ:
Код: | type tab is table of z#acc%rowtype |
|
|
 |
oradba81 Гость
|
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|