SQL nauka Projekt

Odpowiedz Nowy wątek
2018-02-11 14:26
0

Witam od jakiegoś czasu zacząłem się sam uczyć SQL i teraz dodałem PLSQL. Chciałbym się w tym kierunku rozwijać i w przyszłości szukać pracy w takim obrębie.
Z stąd moje pytanie
Czy ktoś zna projekty które mógłbym robić czysto naukowo dla siebie, a z którymi w przybliżeniu mógłbym napotkać się w przyszłości w pracy

Pozostało 580 znaków

2018-02-20 00:00
0

Moje zmiany:

CREATE TABLE Kategoria
(
Id_Kategoria INTEGER CONSTRAINT Id_kategoria_pk PRIMARY KEY ,
Nazwa VARCHAR(200) NOT NULL UNIQUE
)
 
CREATE TABLE Kategoria_Ksiazki
(
Id_Kategoria INTEGER, 
Id_Ksiazka INTEGER,
CONSTRAINT Id_Kategoria_fk FOREIGN KEY (Id_Kategoria) REFERENCES Kategoria(Id_Kategoria),
CONSTRAINT Id_Ksiazka_fk FOREIGN KEY (Id_Ksiazka) REFERENCES Ksiazka(Id_Ksiazka),
UNIQUE(id_kategoria, id_ksiazka)
)
 
CREATE TABLE Autor
(
Id_Autora  INTEGER CONSTRAINT Id_Autora_pk PRIMARY KEY, 
Imie_Autora VARCHAR(20) NOT NULL,
Nazwisko_Autora VARCHAR(30) NOT NULL,
UNIQUE(imie_autora,nazwisko_autora)
)
 
CREATE TABLE Autorzy 
(
Id_Autora INTEGER  ,
Id_Ksiazka INTEGER, 
CONSTRAINT Id_Autora_fk FOREIGN KEY (Id_Autora) REFERENCES Autor(Id_Autora),
CONSTRAINT Id_Ksiazka _fk FOREIGN KEY (Id_Ksiazka ) REFERENCES Ksiazka(Id_Ksiazka ),
UNIQUE(id_autora, id_ksiazka)
)
  • literowki typu wojewodzwo, bibliotekraz
    I oczywiscie kolejnosc, bo nie mozesz miec referencji do tabeli, ktorej nie masz
  • sredniki

Pozostało 580 znaków

2018-02-20 15:15
Świetny Szewc
0

A nie lepiej zamiast robić triggery mające właściości identity do PK przy tworzeniu tabeli zawrzeć klauzule: GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1)? Przykład:

create table table (
kolumna1 INT GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1),
kolumna1 VARCHAR2(50)
);

(dostępne od Oracle 12c)

Pozostało 580 znaków

2018-03-05 08:24
Trzesniewski Emil
0

Świetny Szewc rozwiązanie fajne ale ja bazuje na starczej wersji. Ale zachowam sobie.

Co do dalszego rozwoju bazy, cierpię na brak czasu. dopiero w niedziele znalazłem trochę czasu aby uzupełnić danymi , żeby trochę szybciej stworzyłem sobie bloki.


declare  -- dodawanie admina
Haslo varchar(20) := &Podaj_haslo;
Haslo2 varchar(20) := &Powtorz_haslo;
L char(20):=&Podaj_Login;
begin
if haslo = haslo2 then 
DBMS_OUTPUT.PUT_LINE('Haslo wpisane prawidlowo  dla loginu '||(L));
insert into Admin (login, haslo) values  (L,Haslo);
else 
DBMS_OUTPUT.PUT_LINE( 'bledne haslo');
end if;
end;

declare  -- dodawanie ksiazki 
ISBN varchar(20) := &Podaj_ISBN;
Tytul varchar(200) := &Podaj_tytul;
Stron integer := &Podaj_ilosc_stron;
Wydawnictwo Varchar(50) := &podaj_wydawnictwo ;
Rok_Wydania integer := &podaj_rok_wydania;
Opis Varchar2(4000) := &Podaj_opis;
begin
insert into Ksiazka (ISBN,Tytul,stron,wydawnictwo,rok_wydania,opis) values (ISBN,Tytul,stron,wydawnictwo,rok_wydania,opis);
DBMS_OUTPUT.PUT_LINE( 'Wypelnione prawidowo');
end;

declare  -- dodawanie kategori 
Nazwa Varchar(200)  :=&podaj_kategorie ;
begin
insert into Kategoria  (Nazwa) values (Nazwa);
DBMS_OUTPUT.PUT_LINE( 'Wypelnione prawidowo');
end;

declare  -- dodawanie Autor 
Imie_Autora Varchar(20) := &_Imie_Autora;
Nazwisko_Autora Varchar(30) :=  &_Nazwisko_Autora;
begin
insert into Autor  (Imie_Autora, Nazwisko_Autora) values (Imie_Autora, Nazwisko_Autora);
DBMS_OUTPUT.PUT_LINE( 'Wypelnione prawidowo');
end;

declare  -- dodawanie Czytelnik 
Login Varchar(50) := &Login;
Haslo Varchar(40):= &Haslo;
Imie Varchar(50) := &Imie;
Nazwisko Varchar(50) := &Nazwisko;
Adres Varchar(50) := &Adres;
Miasto Varchar(50) := &Miasto;
Wojewodzwo Varchar(50) := &Wojewodzwo;
Telefon integer := &telefon ;
Kod_Pocztowy Varchar(10) := &Kod_pocztowy;
email Varchar(100) := &email;
begin
insert into Czytelnik  (Login, Haslo,Imie,Nazwisko, Adres, Miasto, wojewodzwo, telefon, Kod_pocztowy,email) 
values (Login, Haslo,Imie,Nazwisko, Adres, Miasto, wojewodzwo, telefon, Kod_pocztowy,email);
DBMS_OUTPUT.PUT_LINE( 'Wypelnione prawidowo');
end;

declare  -- dodawanie bibliotekarz  
Id_Czytelnika integer := &Podaj_Id_czytelnika ;-- bibliotekarz musi być wpierw dodany do czytelnika 
Login varchar(20) := &podaj_login ;
Haslo varchar(20) := &podaj_haso ;
begin
insert into bibliotekarz  (Id_Czytelnika, Login, Haslo) 
values (Id_Czytelnika, Login, Haslo) ;
DBMS_OUTPUT.PUT_LINE( 'Wypelnione prawidowo');
end;

declare  -- dodawanie Kategoria_Ksiazki  
Id_Kategoria integer := &ID_kategori ; 
Id_Ksiazka integer   := &ID_Ksizkki ;
begin
insert into Kategoria_Ksiazki  (Id_Kategoria, Id_Ksiazka) 
values (Id_Kategoria, Id_Ksiazka) ;
DBMS_OUTPUT.PUT_LINE( 'Wypelnione prawidowo');
end;

declare  -- dodawanie Autorzy  
Id_Autora Integer  := &podaj_ID_Autora;
Id_Ksiazka integer := &podaj_ID_Ksiazka;
begin
insert into Autorzy  (Id_Autora, Id_Ksiazka) 
values (Id_Autora, Id_Ksiazka) ;
DBMS_OUTPUT.PUT_LINE( 'Wypelnione prawidowo');
end;

declare  -- dodawanie Zamówienie 
Id_Czytelnik integer :=&podaj_ID_czytelnika;  
Id_Ksiazka Integer   :=&podaj_ID_ksiazki ;
Data_Zamowienia Date ;
Data_Odbioru Date  := &podaj_Date_odbioru; -- TRZEBA PISAC W FORMIE YY/MM/DD
Data_Zwrotu Date   := &podaj_date_zwrotu;   --TRZEBA PISAC W FORMIE YY/MM/DD
begin
select sysdate into Data_Zamowienia from dual; 
insert into Zamowienie  (Id_Czytelnik, Id_Ksiazka,Data_Zamowienia,Data_Odbioru,Data_Zwrotu) 
values (Id_Czytelnik, Id_Ksiazka,Data_Zamowienia,Data_Odbioru,Data_Zwrotu)  ;
DBMS_OUTPUT.PUT_LINE( 'Wypelnione prawidowo');
end;

Teraz pytanie. CO DALEJ ROBIĆ ?

Pozostało 580 znaków

2018-03-05 19:35
0
Marcin.Miga ):

Panie Marcinie mógłby pan się wypowiedzieć, Co robić jako kolejną rzecz ? Jakieś procedury ? Bo jako umiem wykorzystywać sql w zapytaniach to tutaj w tworzeniu jestem zielony i nie wiem co robić jako kolejne ?

edytowany 1x, ostatnio: Emil Trześniewski, 2018-03-05 19:36

Pozostało 580 znaków

2018-03-05 19:52
0

Nie znam tak dobrze Oracle by się wypowiadać a po drugie nie wiem co chcesz osiągnąć.

Pozostało 580 znaków

2018-03-05 21:49
0

Mozesz spróbować wykonać jakis raport uruchamiany z schedulera.

Piszesz procedurę, która generuje zestawienie ksiazek wypożyczonych w ostatnim tygodniu.
Zestawienie ma być zrzucane do csv raz w tygodniu - zadanie dbms_scheduler.

Moze byc tez jakiś raport książek nieoddanych w terminie, itp.

Pozostało 580 znaków

2018-03-06 08:31
0
Marcin.Miga napisał(a):

Nie znam tak dobrze Oracle by się wypowiadać a po drugie nie wiem co chcesz osiągnąć.

Panie Marcinie. Projekt czysto szkoleniowy i chciałbym zrobić jak najbardziej rozbudowaną, napierdzielać funkcje procedury, tylko też z senesem. Finalnie chciałbym zrobić jeszcze warstwę graficzną i umieścić na jakimś serwerze

Pozostało 580 znaków

2018-03-06 08:42
0
juro napisał(a):

Mozesz spróbować wykonać jakis raport uruchamiany z schedulera.

Piszesz procedurę, która generuje zestawienie ksiazek wypożyczonych w ostatnim tygodniu.
Zestawienie ma być zrzucane do csv raz w tygodniu - zadanie dbms_scheduler.

Moze byc tez jakiś raport książek nieoddanych w terminie, itp.

O dzięki właśnie o takie coś mi chodziło. Wieczorem po pracy będę działał I po tym dopatrzyłem już błąd w mojej bazie że, data zwrotu jest not null,

Pozostało 580 znaków

2018-03-13 18:17
0

Mam problem ze stworzeniem formularza csv trochę pogrzebałem w internecie i jakoś nie mogę dojść do rozwiązania
a mianowicie załóżmy ze chce zrobić raport wypożyczonych książek w dnia poprzedniego . i by zapisywany był w CSV.
Mam coś takiego i jakoś nie może zapisać do pliku. Gdzie szukać błędu ? i gdzie pomocy ?


DECLARE 
  file_handle utl_file.file_type;
BEGIN 
  file_handle := utl_file.fopen('Dane', 'plik1.csv', 'w');
  FOR a IN (
   select * from zamowienie 
    where  Data_Zamowienia between to_date(select sysdate-1 from dual ) and (select sysdate from dual ) 
  ) LOOP 
    utl_file.put_line(file_handle, a.Id_Czytelnik || ';' || a.Id_Ksiazka || ';');
  END LOOP;
  utl_file.fclose(file_handle);
 end;

Pozostało 580 znaków

2018-03-14 13:32
0

Masz błąd w samym select:

   SELECT * FROM zamowienie 
    WHERE  Data_Zamowienia BETWEEN to_date(SELECT sysdate-1 FROM dual ) AND (SELECT sysdate FROM dual ) 

Powinno być:

 SELECT *
     FROM zamowienie
    WHERE Data_Zamowienia BETWEEN (SYSDATE - 1) AND SYSDATE

Reszta jest ok, o ile masz utworzone DIRECTORY o nazwie 'Dane'.

Nie miałeś żadnego komunikatu błędu?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0