powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / type..is table of...rowtype
7 сообщений из 7, страница 1 из 1
type..is table of...rowtype
    #39261032
Hockmoon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго всем времени.
Столкнулся с проблемой:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
    type    t_sfc_step  is table of sfc_step%rowtype;
            v_sfc_step t_sfc_step;
    
    type    t_oper_to_wc    is table of z_ppk_oper_to_wc%rowtype;
            v_oper_to_wc t_oper_to_wc;
begin
    select count (*)
    into c_count_rc_sfc
    from ibs_rc_2_sfc rf,
         sfc
    where sfc.status_bo in ('StatusBO:1000,401', 'StatusBO:1000,402')
      and rf.sfc_bo = sfc.handle
      and rf.rc_id = pi_rc_id;
    
    case 
        when c_count_rc_sfc = 1 then
             select ss.*
             into v_sfc_step
             from ibs_rc_2_sfc rf,
                  sfc,
                  sfc_routing sri,
                  sfc_router sr,
                  sfc_step ss
             where ss.sfc_router_bo = sr.handle
               and sr.sfc_routing_bo = sri.handle
               and sri.sfc_bo = sfc.handle
               and sfc.handle = rf.sfc_bo
               and sfc.status_bo in ('StatusBO:1000,401', 'StatusBO:1000,402')
               and rf.rc_id = pi_rc_id;
             
             select *
             into v_oper_to_wc
             from z_ppk_oper_to_wc
             where rc_id = pi_rc_id;
             
             select count(*)
             into c_count_ss
             from v_sfc_step;
             
             select count(*)
             into c_count_oper
             from v_oper_to_wc;


при компиляции выдает ошибку [Error] PLS-00642 (87: 19): PLS-00642: local collection types not allowed in SQL statements, указывая на into v_sfc_step и into v_oper_to_wc.

Искал пример использования type...is table of.. rowtype в интернете, все реализовано примерно как у меня. В чем проблема понять не могу.
...
Рейтинг: 0 / 0
type..is table of...rowtype
    #39261042
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RTFM bulk collect
...
Рейтинг: 0 / 0
type..is table of...rowtype
    #39261050
Hockmoon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да с этой ошибкой разобрался, надо было тип объявить глобально в пакете.
Но теперь появилась другая ошибка, скину всю процедуру полностью:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
procedure get_operation_store (
    pi_rc_id        in   ibs_route_card.rc_id%type,
    po_cur          out  sys_refcursor
)
is
    c_count_rc_sfc       pls_integer;
    c_count_oper         pls_integer;
    c_count_ss           pls_integer;
    
    v_err_param          ibs.FNC_PARAMETERS;
    
    
--    type    t_sfc_step  is table of sfc_step%rowtype;
            v_sfc_step t_sfc_step;
    
--    type    t_oper_to_wc    is table of z_ppk_oper_to_wc%rowtype;
            v_oper_to_wc t_oper_to_wc;
begin
    select count (*)
    into c_count_rc_sfc
    from ibs_rc_2_sfc rf,
         sfc
    where sfc.status_bo in ('StatusBO:1000,401', 'StatusBO:1000,402')
      and rf.sfc_bo = sfc.handle
      and rf.rc_id = pi_rc_id;
    
    case 
        when c_count_rc_sfc = 1 then
             select ss.*
             into v_sfc_step
             from ibs_rc_2_sfc rf,
                  sfc,
                  sfc_routing sri,
                  sfc_router sr,
                  sfc_step ss
             where ss.sfc_router_bo = sr.handle
               and sr.sfc_routing_bo = sri.handle
               and sri.sfc_bo = sfc.handle
               and sfc.handle = rf.sfc_bo
               and sfc.status_bo in ('StatusBO:1000,401', 'StatusBO:1000,402')
               and rf.rc_id = pi_rc_id;
             
             select *
             into v_oper_to_wc
             from z_ppk_oper_to_wc
             where rc_id = pi_rc_id;
             
             select count(*)
             into c_count_ss
             from v_sfc_step;
             
             select count(*)
             into c_count_oper
             from v_oper_to_wc;
             
             if c_count_ss = c_count_oper then 
                open po_cur for
                    select otw.step_id            as ste_id,
                           otw.description        as name_oper,
                           ss.done                as done,
                           ss.qty_in_queue        as qty_q,
                           ss.qty_in_work         as qty_w,
                           ss.qty_in_completed    as qty_c
                    from   v_oper_to_wc otw,
                           v_sfc_step ss
                    where ss.ste_id = otw.step_id;
             else
                v_err_param ('RC_ID') := pi_rc_id;
                ibs.raise_error (NOT_MATCH_RC_SFC, v_err_param);
             end if;
        when c_count_rc_sfc = 0 then
             v_err_param ('RC_ID') := pi_rc_id;
             ibs.raise_error (NOT_FOUND_SFC, v_err_param);
             
        when c_count_rc_sfc > 1 then
             v_err_param ('RC_ID') := pi_rc_id;
             ibs.raise_error (MORE_THAT_ONE_SFC, v_err_param);
             
    end case;
end;



Выдает 5 ошибок:
1 и 2: [Error] ORA-00947 (88: 14): PL/SQL: ORA-00947: не хватает значений для данных на from ibs_rc_2_sfc rf и from z_ppk_oper_to_wc
3-5 [Error] ORA-00942 (107: 19): PL/SQL: ORA-00942: таблица или представление пользователя не существует на from v_sfc_step;, from v_oper_to_wc; и from v_oper_to_wc otw, v_sfc_step ss
...
Рейтинг: 0 / 0
type..is table of...rowtype
    #39261052
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HockmoonДа с этой ошибкой разобрался, надо было тип объявить глобально в пакете.Наивный заблуждающийся.
Метод тыка не заменит чтение документации.
...
Рейтинг: 0 / 0
type..is table of...rowtype
    #39261066
Hockmoon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicНаивный заблуждающийся.
Метод тыка не заменит чтение документации.
Признаю отсутствие необходимых знаний как и времени на детальное изучение проблемы.

Да Bulk collect помогло исправить ошибки 1 и 2, но 3-5 остались [Error] ORA-00942 (107: 19): PL/SQL: ORA-00942: таблица или представление пользователя не существует.
...
Рейтинг: 0 / 0
type..is table of...rowtype
    #39261095
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hockmoonно 3-5 осталисьНаивный чукотский юноша.HockmoonПризнаю отсутствие необходимых знаний как и времени на детальное изучение проблемы."Пилите, Шура, гири…"
...
Рейтинг: 0 / 0
type..is table of...rowtype
    #39261257
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hockmoon,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SANDBOX@EE>;create table t1 as select * from dual;

Table created.

SANDBOX@EE>;declare
  2      v t1%rowtype;
  3  begin
  4      select * into v from t1;
  5  end;
  6  /

PL/SQL procedure successfully completed.
- это рас.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SANDBOX@EE>;create type c1 as table of varchar2(2000)
  2  /

Type created.

SANDBOX@EE>;declare
  2      c c1 := c1(1,2,3);
  3      a number;
  4  begin
  5      select count(1) into a from table(c);
  6      dbms_output.put_line(a);
  7  end;
  8  /
3
- это два.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / type..is table of...rowtype
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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