powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Что улучшить или изменить в процедуре?
10 сообщений из 10, страница 1 из 1
Что улучшить или изменить в процедуре?
    #39904738
takini23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Есть процедура,возможно кто-то сможет сказать какие ошибки допустил?

По первости вижу что
1.Нет Commit
2.Нет обработки Exception
3.Для case я бы добавил условие Else
4.Почему-то не используются pID_REPORTPERIOD и pID_PROVIDER,хотя они объявлены ?



Код: 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.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
create or replace procedure saveAutoSales(pID_REPORTPERIOD in number,
                        pID_PROVIDER     in number,
                        Cur_at          in sys_refcursor,
                        pAuto_id         in number,
                        pN_ROW_NUMBER    in out number) is
  i number;
  type t_col_auto_rec is record(
    v_number           VARCHAR2(70),
    v_number_i         VARCHAR2(70),
    v_number_k         VARCHAR2(70),
    v_number_ik        VARCHAR2(70),
    v_client_name      VARCHAR2(100),
    v_VIN          VARCHAR2(70),
    v_agent_name       VARCHAR2(70),
    v_agent_inn_kpp    VARCHAR2(70),
    v_doc_number       VARCHAR2(70),
    v_currency         VARCHAR2(10),
    n_row_num          NUMBER(9),
    id_repperiod       NUMBER(9),
    id_provider        NUMBER(9),
    dt_period_stop     TIMESTAMP(0) WITH LOCAL TIME ZONE,
    id_contract_inst   NUMBER(9),
    v_n_sf_type        VARCHAR2(3),
    n_summa_gross_curr NUMBER,
    n_summa_gross_rub  NUMBER,
    n_summa_net_1      NUMBER,
    n_summa_net_2      NUMBER,
    n_summa_net_3      NUMBER,
    n_tax_summa_1      NUMBER,
    n_tax_summa_2      NUMBER,
    n_summa_taxfree    NUMBER,
    n_tax_rate         number,
    id_invoice_inst    NUMBER(9),
    id_reportperiod    NUMBER(9));
  type t_col_auto is table of t_col_auto_rec;
  col_auto t_col_auto;

begin
  i := pN_ROW_NUMBER;

  loop
    fetch Cur_at bulk collect
      into col_auto limit 500;
    for j in 1 .. col_auto.count loop
      i := i + 1;
      CASE pAUTO_ID

      --запись в основную книгу продаж
        WHEN pack_invoice.AUTO_SALE_BASIC then

          insert into fw_AUTO_sales_main
            ( v_n_sf_type,
             v_number,
             v_number_i,
             v_number_k,
             v_number_ik,
             v_client_name,
             v_VIN,
             v_agent_name,
             v_agent_inn_kpp,
             v_doc_number,
             v_currency,
             n_row_num,
             id_repperiod,
             id_provider,
             dt_period_stop,
             id_contract_inst,
             n_summa_gross_curr,
             n_summa_gross_rub,
             n_summa_net_1,
             n_summa_net_2,
             n_summa_net_3,
             n_tax_summa_1,
             n_tax_summa_2,
             n_summa_taxfree,
             id_invoice_inst,
             id_reportperiod,
             n_tax_rate)
          values
            (i,
             col_auto(j).id_repperiod,
             col_auto(j).id_provider,
             col_auto(j).dt_period_stop,
             col_auto(j).id_contract_inst,
             col_auto(j).v_n_sf_type,
             col_auto(j).v_number,
             col_auto(j).v_number_i,
             col_auto(j).v_number_k,
             col_auto(j).v_number_ik,
             col_auto(j).v_client_name,
             col_auto(j).v_VIN,
             col_auto(j).v_agent_name,
             col_auto(j).v_agent_inn_kpp,
             col_auto(j).v_doc_number,
             col_auto(j).v_currency,
             col_auto(j).n_summa_gross_curr,
             col_auto(j).n_summa_gross_rub,
             col_auto(j).n_summa_net_1,
             col_auto(j).n_summa_net_2,
             col_auto(j).n_summa_net_3,
             col_auto(j).n_tax_summa_1,
             col_auto(j).n_tax_summa_2,
             col_auto(j).n_summa_taxfree,
             col_auto(j).id_invoice_inst,
             col_auto(j).id_reportperiod,
             col_auto(j).n_tax_rate);
          --запись в дополнительную книгу продаж
        WHEN pack_invoice.AUTO_TYPE_SALE_ADDIT then
          insert into fw_AUTO_sales_add
            (n_row_num,
             id_repperiod,
             id_provider,
             dt_period_stop,
             id_contract_inst,
             v_n_sf_type,
             v_number,
             v_number_i,
             v_number_k,
             v_number_ik,
             v_client_name,
             v_VIN,
             v_agent_name,
             v_agent_inn_kpp,
             v_doc_number,
             v_currency,
             n_summa_gross_curr,
             n_summa_gross_rub,
             n_summa_net_1,
             n_summa_net_2,
             n_summa_net_3,
             n_tax_summa_1,
             n_tax_summa_2,
             n_summa_taxfree,
             id_invoice_inst,
             id_reportperiod,
             n_tax_rate)
          values
            (i,
             col_auto(j).id_repperiod,
             col_auto(j).id_provider,
             col_auto(j).dt_period_stop,
             col_auto(j).id_contract_inst,
             col_auto(j).v_n_sf_type,
             col_auto(j).v_number,
             col_auto(j).v_number_i,
             col_auto(j).v_number_k,
             col_auto(j).v_number_ik,
             col_auto(j).v_client_name,
             col_auto(j).v_VIN,
             col_auto(j).v_agent_name,
             col_auto(j).v_agent_inn_kpp,
             col_auto(j).v_doc_number,
             col_auto(j).v_currency,
             col_auto(j).n_summa_gross_curr,
             col_auto(j).n_summa_gross_rub,
             col_auto(j).n_summa_net_1,
             col_auto(j).n_summa_net_2,
             col_auto(j).n_summa_net_3,
             col_auto(j).n_tax_summa_1,
             col_auto(j).n_tax_summa_2,
             col_auto(j).n_summa_taxfree,
             col_auto(j).id_invoice_inst,
             col_auto(j).id_reportperiod,
             col_auto(j).n_tax_rate);
      END CASE;
    end loop;
    exit when Cur_at%notfound;
  end loop;

  pN_ROW_NUMBER := i;
end saveAutoSales ;
...
Рейтинг: 0 / 0
Что улучшить или изменить в процедуре?
    #39904752
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
takini23Есть процедура,возможно кто-то сможет сказать какие ошибки допустил?

Первая ошибка в том, что ты создал процедуру там, где можно было обойтись одним запросом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что улучшить или изменить в процедуре?
    #39904766
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
takini23
1.Нет Commit
2.Нет обработки Exception
3.Для case я бы добавил условие Else
Подобная "инициатива" только вредна.
...
Рейтинг: 0 / 0
Что улучшить или изменить в процедуре?
    #39904794
takini23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,по п.3 согласен он не нужен,в случае с null оператор неявно выдаст case_nof_found

Но чем плохи п.1 и п.2 ?
...
Рейтинг: 0 / 0
Что улучшить или изменить в процедуре?
    #39904798
takini23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
Не совсем понял как это можно сделать
т.е
:
insert into fw_AUTO_sales_main (select * from Cur_at where pAuto_id = pack_invoice.AUTO_SALE_BASIC )
...
Рейтинг: 0 / 0
Что улучшить или изменить в процедуре?
    #39904808
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
takini23
Но чем плохи п.1
Границы транзакции определяет вызывающий.
...
Рейтинг: 0 / 0
Что улучшить или изменить в процедуре?
    #39904813
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
takini23
Но чем плохи п.1 и п.2 ?
Без постановки/понимания - зачем? они бессмысленны и вредны.
...
Рейтинг: 0 / 0
Что улучшить или изменить в процедуре?
    #39904815
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
takini23,

читаете bulk-ом, почему б не вставить forall insert?

.....
stax
...
Рейтинг: 0 / 0
Что улучшить или изменить в процедуре?
    #39904837
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо курсорной переменной и цикла по ней влепить multitable insert.
...
Рейтинг: 0 / 0
Что улучшить или изменить в процедуре?
    #39904904
takini23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за помощь!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Что улучшить или изменить в процедуре?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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