Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Тип record с дополнительным полем  [new]
GroMoZeKazzz
Member

Откуда:
Сообщений: 60
Доброго всем времени суток!
В скрипте объявил тип record, надергав в него нужных полей из нескольких таблиц.
+ Пример
type t_call is record(
    id          scott.t1.id%type,
    idstatus    scott.t1.idstatus%type,
    status_name scott.t2.name%type,
    ...
    );
  v_call t_call; 

Но захотелось большего - вместо перечисления всех полей главной таблицы (их там много) указать scott.t1%rowtype, а дальше добавить дополнительные поля из других таблиц. Сделал:
+ Пример
type t_call is record(
    id            scott.t1%rowtype,
    status_name scott.t2.name%type,
    ...
    );
  v_call t_call;

Но при select t1.*, t2.status_name into v_call from t1 left join t2... получаю ошибку "expression v_call in the INTO list is of wrong type".
28 мар 18, 17:54    [21294140]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
-2-
Member

Откуда:
Сообщений: 15330
GroMoZeKazzz
Сделал
ты сделал рекорд рекорда. Все равн потом используешь селект инту, так объяви его курсором и бери рекорд от него.
28 мар 18, 18:11    [21294210]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
GroMoZeKazzz
Member

Откуда:
Сообщений: 60
-2-
ты сделал рекорд рекорда. Все равн потом используешь селект инту, так объяви его курсором и бери рекорд от него.

Я только в начале пути познания :)
Сделал так:
+ как-то
declare
  v_idcall number := &Номер_заявки;
  cursor c_call is (select t1.*,
       t2.name      name1,
       t2.name      name2,
       t3.label       label,
       t4.description form_descr
  from scott.t1 t 
  join t2 t2 on t2.id = t1.idstatus 
  ...
  where t1.id = v_idcall);
 type t_call is record (call_rec c_call%rowtype);
 r_call t_call;
begin
  open c_call;
  fetch c_call into r_call;
  close c_call;
end;

Ошибка та же: PLS-00597: expression 'r_call' in the INTO list is of wrong type
28 мар 18, 18:41    [21294318]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
GroMoZeKazzz
Member

Откуда:
Сообщений: 60
+ Вот так работает :)
declare
  v_idcall number := &Номер_заявки;
  cursor c_call is (select t1.*,
       t2.name      name1,
       t2.name      name2,
       t3.label       label,
       t4.description form_descr
  from scott.t1 t 
  join t2 t2 on t2.id = t1.idstatus 
  ...
  where t1.id = v_idcall);
 call_rec c_call%rowtype;
begin
  open c_call;
  fetch c_call into call_rec;
  close c_call;
end;
28 мар 18, 18:49    [21294330]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
brzl
Member

Откуда: Москва
Сообщений: 146
мои 2 копейки:

если в начале пути, то еще есть время поменять привычку именовать переменные с префиксом v_
29 мар 18, 07:09    [21294814]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
GroMoZeKazzz
Member

Откуда:
Сообщений: 60
brzl, какой префикс каноничен?
29 мар 18, 10:03    [21295158]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
brzl
Member

Откуда: Москва
Сообщений: 146
по области видимости:
l_ - local (локальная, внутри блока, процедуры)
g_ - global (глобальная в пакете)
еще,
c_ - constant( константы )
p_ - параметры в процедурах, функциях, методах
29 мар 18, 10:21    [21295230]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
AmKad
Member

Откуда:
Сообщений: 5222
brzl
по области видимости
А по типу данныхъ?
29 мар 18, 10:25    [21295243]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
Elic
Member

Откуда:
Сообщений: 29991
GroMoZeKazzz
какой префикс каноничен?
В каждом монастыре свой устав.
29 мар 18, 10:28    [21295256]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
brzl
Member

Откуда: Москва
Сообщений: 146
AmKad
А по типу данныхъ?

В общем случае, никак.
Типов данных может быть очень много. Придумывать каждому префикс, суффикс...

Для коллекций можно указать суффикс _tbl или второй префикс _tbl_ например, но в основном стараться писать от бизнес логики/здравого смысла.
Если переменная коллекция ордеров, так и называем l_orders. l_orders_tbl, l_tbl_orders в данном случае избыточен.

Первый префикс уже дает понять, где искать объявление переменной.
29 мар 18, 11:01    [21295391]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
AmKad
Member

Откуда:
Сообщений: 5222
brzl
В общем случае, никак.
Типов данных может быть очень много. Придумывать каждому префикс, суффикс...
Венгерская нотация.
29 мар 18, 11:32    [21295504]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
XMLer
Member

Откуда:
Сообщений: 258
AmKad
brzl
по области видимости
А по типу данныхъ?

А зачем?
Изнутри - и так перед глазами.
Снаружи - перегружать неудобно.
29 мар 18, 11:59    [21295614]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
XMLer
Member

Откуда:
Сообщений: 258
brzl
по области видимости:
l_ - local (локальная, внутри блока, процедуры)
g_ - global (глобальная в пакете)
еще,
c_ - constant( константы )
p_ - параметры в процедурах, функциях, методах


p
i
o
io
29 мар 18, 12:00    [21295619]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
GroMoZeKazzz
Member

Откуда:
Сообщений: 60
Всем благодарочка за науку!
Буду дальше двигаться по пути познания.
29 мар 18, 12:30    [21295758]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
-2-
Member

Откуда:
Сообщений: 15330
XMLer
brzl
p_ - параметры в процедурах, функциях, методах
p
i
o
io
а как же copy-nocopy.

XMLer
Снаружи - перегружать неудобно.
Работал в конторе, где не только параметрам, но и именам полей писался префикс F<тип>. Причем различались целые-дробные, дата-таймстамп. Чтобы в редакторе не набирать все поле целиком, получив подсказку, нужно заранее знать тип и жмакать лишние клавиши префикса.
29 мар 18, 12:31    [21295763]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
-2-
Member

Откуда:
Сообщений: 15330
brzl
по области видимости:
l_ - local (локальная, внутри блока, процедуры)
g_ - global (глобальная в пакете)
еще,
c_ - constant( константы )
p_ - параметры в процедурах, функциях, методах
А что, только переменные. Процедуры-функции и объявления типов тоже могут быть "глобальными" и "локальными". Ну и атрибуты объектных типов по области видимости "глобальные" в динамических методах.
29 мар 18, 12:41    [21295800]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
brzl
Member

Откуда: Москва
Сообщений: 146
Холивар делать не стоит, как написали выше "...свой устав.."

XMLer
p
i
o
io


Но, не могу себе представить когда бы мне понадобилось знать in или out параметр. io еще может быть полезен снаружи, если не знаешь описание процедуры и читаешь чужой код. На мой взгляд избыточно. И я стараюсь все-таки чтобы функции возвращали значения, out параметры минимизирую.

-2-
А что, только переменные. Процедуры-функции и объявления типов тоже могут быть "глобальными" и "локальными".

Только для переменных и с упором на область видимости. Объявление типа локально и глобально с одним и тем же названием? Ну за это наверное надо "выговор". Процедуры и функции локальные использовать в крайнем, а лучше никогда.

Процедуры и функции без префисков, суффиксов. Название должно отражать суть.
get_status - функция, возвращающая статус.
set_status - процедура, устанавливающая статус.

-2-
Ну и атрибуты объектных типов по области видимости "глобальные" в динамических методах.

Можешь показать пример о чем речь?

Ну и в продолжении 2 копеек, руководствоваться не только бизнес логикой/здравым смыслом, но и английским языком.
Переменные/столбцы: kredit, gorod и т.д. и т.п
29 мар 18, 13:10    [21295907]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
-2-
Member

Откуда:
Сообщений: 15330
brzl
Процедуры и функции без префисков, суффиксов
В чем отличие функций и переменных в контексте вопроса именования?
29 мар 18, 13:17    [21295949]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
brzl
Member

Откуда: Москва
Сообщений: 146
brzl
Переменные/столбцы: kredit, gorod и т.д. и т.п

* запретить
29 мар 18, 13:20    [21295965]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
brzl
Member

Откуда: Москва
Сообщений: 146
-2-
В чем отличие функций и переменных в контексте вопроса именования?

Они отражают действие, это действие отражено в их наименовании. Put, get, save
Переменные же контейнер для данных с бизнес смыслом. Префикс им нужен (l_,g_), чтобы не путать с полями в таблицах.
29 мар 18, 13:29    [21296017]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
XMLer
Member

Откуда:
Сообщений: 258
brzl
-2-
В чем отличие функций и переменных в контексте вопроса именования?

Они отражают действие, это действие отражено в их наименовании. Put, get, save
Переменные же контейнер для данных с бизнес смыслом. Префикс им нужен (l_,g_), чтобы не путать с полями в таблицах.

Функция это не действие , get_status, из примера, тавтология, status - самое оно
29 мар 18, 13:39    [21296091]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
-2-
Member

Откуда:
Сообщений: 15330
brzl
Они отражают действие, это действие отражено в их наименовании. Put, get, save
save_state это действие статуса или статус действия?

brzl
чтобы не путать с полями в таблицах.
Коллизии имен пакетов-процедур могут быть фатальнее некорректного результата "путать".
create or replace package dual as
end;
29 мар 18, 13:52    [21296164]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
XMLer
Member

Откуда:
Сообщений: 258
-2-
XMLer
пропущено...
p
i
o
io
а как же copy-nocopy.



А зачем?
29 мар 18, 14:19    [21296280]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
-2-
Member

Откуда:
Сообщений: 15330
XMLer
-2-
пропущено...а как же copy-nocopy.
А зачем?
Параметры nocopy в случае исключения могут вернуть нецелостное состояние.
А вообще, это сарказм. Префиксы io_ это уже крайняя степень маразма.
29 мар 18, 15:33    [21296707]     Ответить | Цитировать Сообщить модератору
 Re: Тип record с дополнительным полем  [new]
XMLer
Member

Откуда:
Сообщений: 258
-2-
Префиксы io_ это уже крайняя степень маразма.

Аргументируй, пожалуйста.
Что плохого в том чтобы обратить внимание разработчика, пишущего вызов процедуры, на то что значение его переменной изменится?
29 мар 18, 16:56    [21297076]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить