powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Тип record с дополнительным полем
25 сообщений из 36, страница 1 из 2
Тип record с дополнительным полем
    #39622246
GroMoZeKazzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго всем времени суток!
В скрипте объявил тип record, надергав в него нужных полей из нескольких таблиц.
Пример
Код: plsql
1.
2.
3.
4.
5.
6.
7.
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, а дальше добавить дополнительные поля из других таблиц. Сделал:
Пример
Код: plsql
1.
2.
3.
4.
5.
6.
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".
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622257
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GroMoZeKazzzСделалты сделал рекорд рекорда. Все равн потом используешь селект инту, так объяви его курсором и бери рекорд от него.
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622276
GroMoZeKazzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-ты сделал рекорд рекорда. Все равн потом используешь селект инту, так объяви его курсором и бери рекорд от него.
Я только в начале пути познания :)
Сделал так:
как-то
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
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
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622282
GroMoZeKazzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так работает :)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
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;

...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622415
brzl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мои 2 копейки:

если в начале пути, то еще есть время поменять привычку именовать переменные с префиксом v_
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622466
GroMoZeKazzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
brzl, какой префикс каноничен?
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622478
brzl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
по области видимости:
l_ - local (локальная, внутри блока, процедуры)
g_ - global (глобальная в пакете)
еще,
c_ - constant( константы )
p_ - параметры в процедурах, функциях, методах
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622480
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brzlпо области видимостиА по типу данныхъ?
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622482
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GroMoZeKazzzкакой префикс каноничен?В каждом монастыре свой устав.
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622506
brzl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AmKadА по типу данныхъ?
В общем случае, никак.
Типов данных может быть очень много. Придумывать каждому префикс, суффикс...

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

Первый префикс уже дает понять, где искать объявление переменной.
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622542
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brzlВ общем случае, никак.
Типов данных может быть очень много. Придумывать каждому префикс, суффикс... Венгерская нотация .
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622573
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadbrzlпо области видимостиА по типу данныхъ?
А зачем?
Изнутри - и так перед глазами.
Снаружи - перегружать неудобно.
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622575
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brzlпо области видимости:
l_ - local (локальная, внутри блока, процедуры)
g_ - global (глобальная в пакете)
еще,
c_ - constant( константы )
p_ - параметры в процедурах, функциях, методах

p
i
o
io
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622601
GroMoZeKazzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем благодарочка за науку!
Буду дальше двигаться по пути познания.
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622603
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XMLerbrzlp_ - параметры в процедурах, функциях, методахp
i
o
ioа как же copy-nocopy.

XMLerСнаружи - перегружать неудобно.Работал в конторе, где не только параметрам, но и именам полей писался префикс F<тип>. Причем различались целые-дробные, дата-таймстамп. Чтобы в редакторе не набирать все поле целиком, получив подсказку, нужно заранее знать тип и жмакать лишние клавиши префикса.
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622610
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brzlпо области видимости:
l_ - local (локальная, внутри блока, процедуры)
g_ - global (глобальная в пакете)
еще,
c_ - constant( константы )
p_ - параметры в процедурах, функциях, методахА что, только переменные. Процедуры-функции и объявления типов тоже могут быть "глобальными" и "локальными". Ну и атрибуты объектных типов по области видимости "глобальные" в динамических методах.
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622632
brzl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Холивар делать не стоит, как написали выше "...свой устав.."

XMLerp
i
o
io

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

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

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

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

Ну и в продолжении 2 копеек, руководствоваться не только бизнес логикой/здравым смыслом, но и английским языком.
Переменные/столбцы: kredit, gorod и т.д. и т.п
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622641
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brzlПроцедуры и функции без префисков, суффиксовВ чем отличие функций и переменных в контексте вопроса именования?
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622644
brzl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
brzlПеременные/столбцы: kredit, gorod и т.д. и т.п
* запретить
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622651
brzl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-В чем отличие функций и переменных в контексте вопроса именования?
Они отражают действие, это действие отражено в их наименовании. Put, get, save
Переменные же контейнер для данных с бизнес смыслом. Префикс им нужен (l_,g_), чтобы не путать с полями в таблицах.
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622664
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brzl-2-В чем отличие функций и переменных в контексте вопроса именования?
Они отражают действие, это действие отражено в их наименовании. Put, get, save
Переменные же контейнер для данных с бизнес смыслом. Префикс им нужен (l_,g_), чтобы не путать с полями в таблицах.
Функция это не действие , get_status, из примера, тавтология, status - самое оно
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622673
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brzlОни отражают действие, это действие отражено в их наименовании. Put, get, save save_state это действие статуса или статус действия?

brzlчтобы не путать с полями в таблицах.Коллизии имен пакетов-процедур могут быть фатальнее некорректного результата "путать".
Код: plsql
1.
2.
create or replace package dual as
end;
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622689
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-XMLerпропущено...
p
i
o
ioа как же copy-nocopy.



А зачем?
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622722
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XMLer-2-пропущено...а как же copy-nocopy.А зачем?Параметры nocopy в случае исключения могут вернуть нецелостное состояние.
А вообще, это сарказм. Префиксы io_ это уже крайняя степень маразма.
...
Рейтинг: 0 / 0
Тип record с дополнительным полем
    #39622775
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Префиксы io_ это уже крайняя степень маразма.
Аргументируй, пожалуйста.
Что плохого в том чтобы обратить внимание разработчика, пишущего вызов процедуры, на то что значение его переменной изменится?
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Тип record с дополнительным полем
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]