Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dbms_stats Sql / 2 сообщений из 2, страница 1 из 1
29.01.2022, 21:16
    #40130535
woody33
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbms_stats Sql
Речь идет об использовании пакета DBMS_STATS.


/*
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)
);

ALTER TABLE faktura ADD CONSTRAINT cst_fplat CHECK ( FORMA_PLATNOSCI IN ('Przelew', 'Got?wka'));
/

create table faktura_specyfikacja(
ID number generated by default on null as identity,
ID_ZAMOWIENIE_DETALE number,
KWOTA_NETTO number,
KWOTA_VAT number,
KWOTA_BRUTTO number,
PRIMARY KEY(ID)
);

--klucze obce:
ALTER TABLE zamowienie ADD CONSTRAINT FK_KLIENT FOREIGN KEY (ID_KLIENTA) REFERENCES klient(ID);
ALTER TABLE zamowienie ADD CONSTRAINT FK_ADRES FOREIGN KEY (ID_ADRESU) REFERENCES adres(ID);
ALTER TABLE zamowienie ADD CONSTRAINT FK_METODA_DOSTAWY FOREIGN KEY (ID_METODA_DOSTAWY) REFERENCES metody_dostawy(ID);

ALTER TABLE zamowienie_detale ADD CONSTRAINT FK_ZAMOWIENIE FOREIGN KEY (ID_ZAMOWIENIA) REFERENCES zamowienie(ID);
ALTER TABLE zamowienie_detale ADD CONSTRAINT FK_PRODUKT FOREIGN KEY (ID_PRODUKT) REFERENCES produkt(ID);

ALTER TABLE klient ADD CONSTRAINT FK_ADRES_DOMYSLNY FOREIGN KEY (DOMYSLNY_ADRES_ID) REFERENCES adres(ID);

ALTER TABLE faktura ADD CONSTRAINT FK_ZAMOWIENIE_FAKTURA FOREIGN KEY (ID_ZAMOWIENIA) REFERENCES zamowienie(ID);
ALTER TABLE faktura_specyfikacja ADD CONSTRAINT FK_ZAMOWIENIE_DETALE FOREIGN KEY (ID_ZAMOWIENIE_DETALE) REFERENCES zamowienie_detale(ID);

--indexy
create index zamowienie_id_klienta_idx on zamowienie(ID_KLIENTA);

create index zamowienie_data_zamowienia_idx on zamowienie(DATA_ZAMOWIENIA DESC);
create index zamowienie_id_zam_produkt_idx on zamowienie_detale(ID_ZAMOWIENIA, ID_PRODUKT);
create index produkt_nazwa_idx on produkt(NAZWA);
create index adres_adres_idx on adres(MIASTO, ULICA);


INSERT INTO produkt (NAZWA, CENA_JEDNOSTKOWA) VALUES ('paczek z cukrem', 13);
INSERT INTO produkt (NAZWA, CENA_JEDNOSTKOWA) VALUES ('paczek z malina', 14);
INSERT INTO metody_dostawy (NAZWA) VALUES ('Kurier DPD');
INSERT INTO metody_dostawy (NAZWA) VALUES ('Paczkomat');
INSERT INTO metody_dostawy (NAZWA) VALUES ('Poczta');

---zapis zamowienia(not ended)


CREATE OR REPLACE PROCEDURE zapis_zamowienia(
NAZWA_ in varchar2
, NUMER_TELEFONU_ in varchar2
, EMAIL_ in varchar2
, NIP_ in varchar2
, ULICA_ in varchar2
, MIASTO_ in varchar2
, KRAJ_ in varchar2
, KOD_POCZTOWY_ in varchar2
, UWAGI_ in varchar2
) IS
DOMYSLNY_ADRES_ID_ number;
ID_KLIENTA_ number;
BEGIN
INSERT INTO adres(ULICA, MIASTO, KRAJ, KOD_POCZTOWY) VALUES (ulica_, miasto_, kraj_, kod_pocztowy_);
COMMIT;
SELECT ID INTO DOMYSLNY_ADRES_ID_ FROM ADRES WHERE
ULICA = ulica_
AND MIASTO = miasto_
AND KRAJ = kraj_
AND KOD_POCZTOWY = kod_pocztowy;

INSERT INTO klient(NAZWA, DOMYSLNY_ADRES_ID, NUMER_TELEFONU, EMAIL, NIP) VALUES (nazwa_, domyslny_adres_id_, numer_telefonu_, email_, nip_);
COMMIT;
SELECT ID INTO ID_KLIENTA_ FROM KLIENT WHERE
NIP = NIP_;
INSERT INTO zamowienie(ID_KLIENTA, ID_ADRESU, UWAGI) VALUES (ID_KLIENTA_, DOMYSLNY_ADRES_ID_, UWAGI_);
COMMIT;

END zapis_zamowienia;
/
--
CREATE OR REPLACE TRIGGER trg_zamowienie
BEFORE INSERT OR UPDATE ON zamowienie
FOR EACH ROW
BEGIN
:new.DATA_ZAMOWIENIA := sysdate;
END;

CREATE OR REPLACE PROCEDURE zapis_koszyka(
ID_ZAMOWIENIA_ in number
, ID_PRODUKT_ in number
, ILOSC_ in number
, CZY_OPLACONE_ in number
, STATUS_ in varchar2
, ID_METODA_DOSTAWY_ in number
, FORMA_PLATNOSCI in varchar2
)IS
CENA_JEDNOSTKOWA_ number;
SUMA_ZAMOWIENIA_ number;
BEGIN
SELECT CENA_JEDNOSTKOWA INTO CENA_JEDNOSTKOWA_ FROM produkt WHERE ID = ID_PRODUKT_;
INSERT INTO zamowienie_detale(ID_ZAMOWIENIA, ID_PRODUKT, ILOSC, CENA_JEDNOSTKOWA) VALUES (ID_ZAMOWIENIA_, ID_PRODUKT_, ILOSC_, CENA_JEDNOSTKOWA_);
COMMIT;
SUMA_ZAMOWIENIA_:= ILOSC_ * CENA_JEDNOSTKOWA_;
UPDATE zamowienie
SET SUMA_ZAMOWIENIA = SUMA_ZAMOWIENIA_,
CZY_OPLACONE = CZY_OPLACONE_,
STATUS = STATUS_,
ID_METODA_DOSTAWY = ID_METODA_DOSTAWY_
WHERE zamowienie.ID = ID_ZAMOWIENIA_;
COMMIT;
END zapis_koszyka;
/
begin
zapis_klienta('agdsfsd', 'dsdas4gd2553', 'wrrhy@gmail.com', '6478557', 'aaaegh', 'Warszawa', 'Polska', '03-324', 'Za');
end;

BEGIN
zapis_koszyka(2, 2, 5, 0, 'Przyjete', 2);
END;
/*

Вот с етого, частично с подачей данных в таблицы, нужно написать кусок кода, который будет собирать статистику по таблицам/схеме.( КАК ?) через DBMS_STATS
...
Рейтинг: 0 / 0
29.01.2022, 23:20
    #40130543
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbms_stats Sql
woody33,
Правила форума на SQL.RU (v1.0)
Правила форума SQL.ru...
Не рекомендуется:
...
* Создавать несколько топиков с одинаковым вопросом.

Рекомендуется:
...
* Для повышения удобочитаемости сообщений - пользоваться специальными кодами для выделения слов (b, u, i, color) (но не злоупотреблять ими) и тегом форматирования исходных кодов src.
...
* При необходимости продолжить начатое обсуждение - продолжать существующий топик, а не заводить новый.
...
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dbms_stats Sql / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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