Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SQL, dbms_stats / 7 сообщений из 7, страница 1 из 1
21.01.2022, 17:00
    #40128524
woody33
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL, dbms_stats
В скрипте, частично с подачей данных в таблицы, нужно написать кусок кода, который будет собирать статистику по таблицам/схеме.( КАК ?) через DBMS_STATS

Речь идет об использовании пакета DBMS_STATS.

Как написать код в даном примере:

create table zamowienie(
ID number,
ID_KLIENTA number,
DATA_ZAMOWIENIA date,
SUMA_ZAMOWIENIA number,
CZY_OPLACONE number, -- предполагать constraint CHECK (1, 0)
STATUS varchar2(50), -- предполагать constraint CHECK («Принято», «Выполняется», «Отправлено», «Отменено», «Завершено»)
ID_ADRESU number,
ID_METODA_DOSTAWY number,
NUMER_LISTU_PRZEWOZOWEGO varchar2(255),
UWAGI varchar2(4000)
);
/

create table zamowienie_detale(
ID number,
ID_ZAMOWIENIA number,
ID_PRODUKT number,
ILOSC number,
CENA_JEDNOSTKOWA number
);
/

create table produkt(
ID number,
NAZWA varchar2(255),
CENA_JEDNOSTKOWA number
);
/

create table klient(
ID number,
NAZWA varchar2(500),
DOMYSLNY_ADRES_ID number,
NUMER_TELEFONU varchar2(50),
EMAIL varchar2(150),
NIP varchar2(20)
);
/

create table adres(
ID number,
ULICA varchar2(255),
MIASTO varchar2(255),
KRAJ varchar2(255),
KOD_POCZTOWY varchar2(50)
);
/


create table metody_dostawy(
ID number,
NAZWA varchar2(255) --Kurier DPD, Paczkomat, Poczta
);
/

-- Предполагая, что у нас есть только 23% VAT
create table faktura(
ID number,
ID_ZAMOWIENIA number,
DATA_FAKTURY date,
DATA_PLATNOSCI date,
FORMA_PLATNOSCI varchar2(100), --check («Перевод», «Наличные»)
KWOTA_NETTO number,
KWOTA_VAT number,
KWOTA_BRUTTO number
);
/

create table faktura_specyfikacja(
ID number,
ID_ZAMOWIENIE_DETALE number,
KWOTA_NETTO number,
KWOTA_VAT number,
KWOTA_BRUTTO number
);
/
...
Рейтинг: 0 / 0
21.01.2022, 18:27
    #40128556
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL, dbms_stats
woody33
В скрипте, частично с подачей данных в таблицы, нужно написать кусок кода, который будет собирать статистику по таблицам/схеме.( КАК ?) через DBMS_STATS

Речь идет об использовании пакета DBMS_STATS.

Как написать код в даном примере:

Код: 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.
create table zamowienie(
  ID number,
  ID_KLIENTA number,
  DATA_ZAMOWIENIA date,
  SUMA_ZAMOWIENIA number,
  CZY_OPLACONE number, -- предполагать constraint CHECK (1, 0)
  STATUS varchar2(50), -- предполагать constraint CHECK («Принято», «Выполняется», «Отправлено», «Отменено», «Завершено»)
  ID_ADRESU number,
  ID_METODA_DOSTAWY number,
  NUMER_LISTU_PRZEWOZOWEGO varchar2(255),
  UWAGI varchar2(4000)
);
/

create table zamowienie_detale(
  ID number,
  ID_ZAMOWIENIA number,
  ID_PRODUKT number,
  ILOSC number,
  CENA_JEDNOSTKOWA number
);
/

create table produkt(
  ID number,
  NAZWA varchar2(255),
  CENA_JEDNOSTKOWA number
);
/

create table klient(
  ID number,
  NAZWA varchar2(500),
  DOMYSLNY_ADRES_ID number,
  NUMER_TELEFONU varchar2(50),
  EMAIL varchar2(150),
  NIP varchar2(20)
);
/

create table adres(
  ID number,
  ULICA varchar2(255),
  MIASTO varchar2(255),
  KRAJ varchar2(255),
  KOD_POCZTOWY varchar2(50)
);
/


create table metody_dostawy(
  ID number,
  NAZWA varchar2(255) --Kurier DPD, Paczkomat, Poczta
);
/

-- Предполагая, что у нас есть только 23% VAT
create table faktura(
  ID number,
  ID_ZAMOWIENIA number,
  DATA_FAKTURY date,
  DATA_PLATNOSCI date,
  FORMA_PLATNOSCI varchar2(100), --check («Перевод», «Наличные»)
  KWOTA_NETTO number,
  KWOTA_VAT number,
  KWOTA_BRUTTO number
);
/

create table faktura_specyfikacja(
  ID number,
  ID_ZAMOWIENIE_DETALE number,
  KWOTA_NETTO number,
  KWOTA_VAT number,
  KWOTA_BRUTTO number
);
/



как обычно:
Код: plsql
1.
2.
3.
4.
BEGIN
GATHER_TABLE_STATS(...);
END;
/



Дока:
DBMS_STATS.GATHER_TABLE_STATS


памятка:
HOWTO :: Как правильно задавать вопросы
Как мне оформить свое сообщение?
Студентам, желающим помощи

1) Полная постановка задачи (без сокращений)

2) Подготовьте тестовые данные, лучше в виде with
пример (не ваш случай) в конце

3) Покажите что сделали, что получили, без сокращений. ( лучше не в виде screenshot)

4) используйте Тэги, читать код без них неудобно, правильно оформляйте сообщение

Пример подготовленных данных, запроса и вывода.
Код: 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.
-- table 1 with column list
with user_tab(user_id,user_name,registry_date) as (
select 1,'Bob',to_date('11.02.1921 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual union all
select 2,'Max',to_date('11.02.1922 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual union all
select 3,'Jon',to_date('11.02.1923 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual
)
-- table 2 with column list
,user_post(post_id,user_id,parent_post_id,post_date,message) as (
select 100,1,null,to_date('11.02.1923 23:04:00','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 101,2,100,to_date('11.02.1923 23:05:23','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 102,3,100,to_date('11.02.1923 23:05:35','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 103,1,102,to_date('11.02.1923 23:06:00','DD.MM.YYYY HH24:MI:SS'),'How are you' from dual union all
select 104,2,102,to_date('11.02.1923 23:07:05','DD.MM.YYYY HH24:MI:SS'),'All right!' from dual union all
select 105,1,101,to_date('11.02.1923 23:06:21','DD.MM.YYYY HH24:MI:SS'),'Bye' from dual union all
select 106,1,104,to_date('11.02.1923 23:04:37','DD.MM.YYYY HH24:MI:SS'),'Bye' from dual union all
select 107,2,null,to_date('11.02.1923 23:08:56','DD.MM.YYYY HH24:MI:SS'),'Hmm' from dual
)
select
rpad(to_char(p.post_date,'YYYY-MM-DD HH24:MI:SS  '),20+level*2,' ')||u.user_name||': '||p.message as txt
from 
 user_post p
 join user_tab  u on ( p.user_id = u.user_id)
where p.post_date >= u.registry_date
start with p.parent_post_id is null 
connect by prior p.post_id=p.parent_post_id 
;

TXT
--------------------------------------------------------------------------------
1923-02-11 23:04:00   Bob: Hi
1923-02-11 23:05:23     Max: Hi
1923-02-11 23:06:21       Bob: Bye
1923-02-11 23:05:35     Jon: Hi
1923-02-11 23:06:00       Bob: How are you
1923-02-11 23:07:05       Max: All right!
1923-02-11 23:04:37         Bob: Bye
1923-02-11 23:08:56   Max: Hmm

8 rows selected.
...
Рейтинг: 0 / 0
21.01.2022, 18:49
    #40128564
woody33
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL, dbms_stats
Vadim Lejnin,

Вы можете в моём случаи написать как в моем виде должно быть?
...
Рейтинг: 0 / 0
21.01.2022, 19:35
    #40128573
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL, dbms_stats
woody33,

Мессир, а что Вам надо?

Вы же разработчик
я не знаю сколько у Вас данных, планируемую нагрузку на сервере в момент запуска скрипта, сколько у Вас CPU

Скорее всего, у Вас будут еще индексы, бо считать статистику без них и загруженных данных смысла не имеет.
то есть то что Вы привели, это огрызок операций.

Пример на моей таблице dropme:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SQL> desc dropme
 Name					   Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID						    NUMBER
 E_DATE 					    DATE

SQL> BEGIN
DBMS_STATS.GATHER_TABLE_STATS (
   ownname      =>    sys_context('userenv','current_schema'), 
   tabname       =>   'DROPME', 
   estimate_percent   => 10,   -- % данных для анализа
  degree      =>   4, -- на сколько распараллеливать сбор статистики
  cascade    =>  TRUE); -- собрать статистику для таблицы и всех ее индексов
END;
/  2    3    4    5    6    7    8    9  

PL/SQL procedure successfully completed.
SQL>



читайте описания параметров (ссылку я дал), там ничего сложного нет, и используйте те которые нужны Вам.
Код: plaintext
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.
DBMS_STATS.GATHER_TABLE_STATS (
   ownname          VARCHAR2, 
   tabname          VARCHAR2, 
   partname         VARCHAR2 DEFAULT NULL,
   estimate_percent NUMBER   DEFAULT to_estimate_percent_type 
                                                  (get_param('ESTIMATE_PERCENT')),
   block_sample     BOOLEAN  DEFAULT FALSE,
   method_opt       VARCHAR2 DEFAULT get_param('METHOD_OPT'),
   degree           NUMBER   DEFAULT to_degree_type(get_param('DEGREE')),
   granularity      VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), 
   cascade          BOOLEAN  DEFAULT to_cascade_type(get_param('CASCADE')),
   stattab          VARCHAR2 DEFAULT NULL, 
   statid           VARCHAR2 DEFAULT NULL,
   statown          VARCHAR2 DEFAULT NULL,
   no_invalidate    BOOLEAN  DEFAULT  to_no_invalidate_type (
                                                      get_param('NO_INVALIDATE')),
   stattype         VARCHAR2 DEFAULT 'DATA',
   force            BOOLEAN  DEFAULT FALSE,
   context          DBMS_STATS.CCONTEXT DEFAULT NULL, -- non operative
   options          VARCHAR2 DEFAULT 'GATHER');

----
DBMS_STATS.GATHER_SCHEMA_STATS ( 
   ownname          VARCHAR2, 
   estimate_percent NUMBER   DEFAULT to_estimate_percent_type 
                                                (get_param('ESTIMATE_PERCENT')), 
   block_sample     BOOLEAN  DEFAULT FALSE, 
   method_opt       VARCHAR2 DEFAULT get_param('METHOD_OPT'),
   degree           NUMBER   DEFAULT to_degree_type(get_param('DEGREE')), 
   granularity      VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), 
   cascade          BOOLEAN  DEFAULT to_cascade_type(get_param('CASCADE')), 
   stattab          VARCHAR2 DEFAULT NULL, 
   statid           VARCHAR2 DEFAULT NULL, 
   options          VARCHAR2 DEFAULT 'GATHER', 
   objlist          OUT      ObjectTab,
   statown          VARCHAR2 DEFAULT NULL, 
   no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type (
                                     get_param('NO_INVALIDATE')),
  force             BOOLEAN DEFAULT FALSE,
  obj_filter_list  ObjectTab DEFAULT NULL);
   
DBMS_STATS.GATHER_SCHEMA_STATS ( 
   ownname          VARCHAR2, 
   estimate_percent NUMBER   DEFAULT to_estimate_percent_type 
                                                (get_param('ESTIMATE_PERCENT')), 
   block_sample     BOOLEAN  DEFAULT FALSE, 
   method_opt       VARCHAR2 DEFAULT get_param('METHOD_OPT'), 
   degree           NUMBER   DEFAULT to_degree_type(get_param('DEGREE')), 
   granularity      VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), 
   cascade          BOOLEAN  DEFAULT to_cascade_type(get_param('CASCADE')), 
   stattab          VARCHAR2 DEFAULT NULL, 
   statid           VARCHAR2 DEFAULT NULL, 
   options          VARCHAR2 DEFAULT 'GATHER', 
   statown          VARCHAR2 DEFAULT NULL, 
   no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type (
                                     get_param('NO_INVALIDATE'), 
   force            BOOLEAN DEFAULT FALSE,
   obj_filter_list  ObjectTab DEFAULT NULL);
...
Рейтинг: 0 / 0
21.01.2022, 19:36
    #40128574
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL, dbms_stats
woody33,
слишком много неизвестных.
Для начала почитай указанную доку.
...
Рейтинг: 0 / 0
29.01.2022, 18:46
    #40130525
woody33
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL, dbms_stats
Vadim Lejnin,

/*
DROP TABLE zamowienie cascade constraints;
DROP TABLE zamowienie_detale cascade constraints;
DROP TABLE klient cascade constraints;
DROP TABLE produkt cascade constraints;
DROP TABLE adres cascade constraints;
DROP TABLE metody_dostawy cascade constraints;
DROP TABLE faktura cascade constraints;
DROP TABLE faktura_specyfikacja cascade constraints;


INSERT INTO zamowienie (STATUS) VALUES ('Anulowane')
*/


create table zamowienie(
ID number generated by default on null as identity,
ID_KLIENTA number,
DATA_ZAMOWIENIA date, --default sysdate not null
SUMA_ZAMOWIENIA number,
CZY_OPLACONE number, -- za?o?y? constraint CHECK (1, 0)
STATUS varchar2(50), -- za?o?y? constraint CHECK ('Przyj?te', 'W trakcie', 'Wyslane', 'Anulowane', 'Zako?czone')
ID_ADRESU number,
ID_METODA_DOSTAWY number,
NUMER_LISTU_PRZEWOZOWEGO varchar2(255),
UWAGI varchar2(4000),
PRIMARY KEY(ID)
);

ALTER TABLE zamowienie ADD CONSTRAINT cst_status CHECK ( STATUS IN ('Przyjete', 'W trakcie', 'Wyslane', 'Anulowane', 'Zakaczone'));
ALTER TABLE zamowienie ADD CONSTRAINT cst_oplata CHECK (CZY_OPLACONE=1 OR CZY_OPLACONE=0);
/
create table zamowienie_detale(
ID number generated by default on null as identity,
ID_ZAMOWIENIA number,
ID_PRODUKT number,
ILOSC number NOT NULL,
CENA_JEDNOSTKOWA number,
PRIMARY KEY(ID)
);
/

create table produkt(
ID number generated by default on null as identity,
NAZWA varchar2(255) NOT NULL,
CENA_JEDNOSTKOWA number NOT NULL,
PRIMARY KEY(ID)
);
/

create table klient(
ID number generated by default on null as identity,
NAZWA varchar2(500) NOT NULL,
DOMYSLNY_ADRES_ID number,
NUMER_TELEFONU varchar2(50),
EMAIL varchar2(150),
NIP varchar2(20),
PRIMARY KEY(ID)
);
/

create table adres(
ID number generated by default on null as identity,
ULICA varchar2(255),
MIASTO varchar2(255),
KRAJ varchar2(255),
KOD_POCZTOWY varchar2(50),
PRIMARY KEY(ID)
);
/


create table metody_dostawy(
ID number generated by default on null as identity,
NAZWA varchar2(255), --Kurier DPD, Paczkomat, Poczta
PRIMARY KEY(ID)
);

ALTER TABLE metody_dostawy ADD CONSTRAINT cst_dostawa CHECK ( NAZWA IN ('Kurier DPD', 'Paczkomat', 'Poczta'));
/



-- Za?o?enie, ?e mamy tylko 23% VAT
create table faktura(
ID number generated by default on null as identity,
ID_ZAMOWIENIA number,
DATA_FAKTURY date,
DATA_PLATNOSCI date,
FORMA_PLATNOSCI varchar2(100), --check ('Przelew', 'Got?wka')
KWOTA_NETTO number,
KWOTA_VAT number,
KWOTA_BRUTTO number,
PRIMARY KEY(ID)
);

Вот с етого, частично с подачей данных в таблицы, нужно написать кусок кода, который будет собирать статистику по таблицам/схеме.( КАК ?) через DBMS_STATS
...
Рейтинг: 0 / 0
29.01.2022, 23:12
    #40130542
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL, dbms_stats
woody33
Vadim Lejnin,
Код: 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.
/*
DROP TABLE zamowienie cascade constraints;
DROP TABLE zamowienie_detale cascade constraints;
DROP TABLE klient cascade constraints;
DROP TABLE produkt cascade constraints;
DROP TABLE adres cascade constraints;
DROP TABLE metody_dostawy cascade constraints;
DROP TABLE faktura cascade constraints;
DROP TABLE faktura_specyfikacja cascade constraints;


INSERT INTO zamowienie (STATUS) VALUES ('Anulowane')
*/


create table zamowienie(
  ID number  generated by default on null as identity,
  ID_KLIENTA number,
  DATA_ZAMOWIENIA date, --default sysdate not null
  SUMA_ZAMOWIENIA number,
  CZY_OPLACONE number, -- za?o?y? constraint CHECK (1, 0)
  STATUS varchar2(50), -- za?o?y? constraint CHECK ('Przyj?te', 'W trakcie', 'Wyslane', 'Anulowane', 'Zako?czone')
  ID_ADRESU number,
  ID_METODA_DOSTAWY number,
  NUMER_LISTU_PRZEWOZOWEGO varchar2(255),
  UWAGI varchar2(4000),
  PRIMARY KEY(ID)
);

ALTER TABLE zamowienie ADD CONSTRAINT cst_status CHECK ( STATUS IN ('Przyjete', 'W trakcie', 'Wyslane', 'Anulowane', 'Zakaczone'));
ALTER TABLE zamowienie ADD CONSTRAINT cst_oplata CHECK (CZY_OPLACONE=1 OR CZY_OPLACONE=0);
/
create table zamowienie_detale(
  ID number generated by default on null as identity,
  ID_ZAMOWIENIA number,
  ID_PRODUKT number,
  ILOSC number NOT NULL,
  CENA_JEDNOSTKOWA number,
  PRIMARY KEY(ID)  
);
/

create table produkt(
  ID number  generated by default on null as identity,
  NAZWA varchar2(255) NOT NULL,
  CENA_JEDNOSTKOWA number NOT NULL,
  PRIMARY KEY(ID)
);
/

create table klient(
  ID number  generated by default on null as identity,
  NAZWA varchar2(500) NOT NULL,
  DOMYSLNY_ADRES_ID number,
  NUMER_TELEFONU varchar2(50),
  EMAIL varchar2(150),
  NIP varchar2(20),
  PRIMARY KEY(ID)
);
/

create table adres(
  ID number  generated by default on null as identity,
  ULICA varchar2(255),
  MIASTO varchar2(255),
  KRAJ varchar2(255),
  KOD_POCZTOWY varchar2(50),
  PRIMARY KEY(ID)
);
/


create table metody_dostawy(
  ID number  generated by default on null as identity,
  NAZWA varchar2(255), --Kurier DPD, Paczkomat, Poczta
  PRIMARY KEY(ID)
);

ALTER TABLE metody_dostawy ADD CONSTRAINT cst_dostawa CHECK ( NAZWA IN ('Kurier DPD', 'Paczkomat', 'Poczta'));
/



-- Za?o?enie, ?e mamy tylko 23% VAT
create table faktura(
  ID number  generated by default on null as identity,
  ID_ZAMOWIENIA number,
  DATA_FAKTURY date,
  DATA_PLATNOSCI date,
  FORMA_PLATNOSCI varchar2(100), --check ('Przelew', 'Got?wka')
  KWOTA_NETTO number,
  KWOTA_VAT number,
  KWOTA_BRUTTO number,
  PRIMARY KEY(ID)
);



Вот с етого, частично с подачей данных в таблицы, нужно написать кусок кода, который будет собирать статистику по таблицам/схеме.( КАК ?) через DBMS_STATS



Мессир,
1) Вам дали ссылки на документацию и даже показали на примерах как это делается. По сути, Вам осталось копировать кусок кода для каждой таблицы, и вставить названия Ваших таблиц.
2) Писать за Вас код, никто не нанимался, у нас есть своя работа. Если Вам нужно чтобы за Вас сделали Вашу работу, то обращайтесь в соответствующий форум.
3) Вам предложили почитать несколько несложных правил как оформить сообщение, как правильно задать вопрос,
и что считается хорошим тоном. Вам на это не хватило 7 дней. Собственно это показывает Ваше отношение к остальным участникам форума.

За сим откланиваюсь.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SQL, dbms_stats / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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