SQL nauka Projekt

Emil Trześniewski
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 7 lat
  • Postów:14
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

woolfik
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 3 godziny
  • Postów:1595
0

Raczej ciężko o jakiś "standard" jeśli chodzi o oracle (bo podałeś PL/SQL) to z pewnością musisz nauczyć się kilku podstawowych rzeczy. Wymyśl sobie jakiś projekt np bibliotekę, wymyśl strukturę, stwórz tabele, procedury, funkcje, pakiety do zarządzania tymi tabelami. Gdy już będzie gotowe to zacznij faktycznie tego używać czyli jakiś import książek itp. Do tego jakiś interfejs "wypożyczania" np webowy. To pozwoli zapoznać Ci się np z oracle forms, apex lub innym językiem. Z istotnych narzędzi oracle to koniecznie dbms_profiler, dbms_job, UTL_FILE,XML, dbms_output

0

Dobra A wiec projekt Baz danych BIBLIOTEKI
Będę w tym temacie umieszczał etapy tworzenie Bazy i chciałbym abyście rzucali mi kłody pod nogi, co jeszcze mógłbym zrobić, oraz pomagać gdy czegoś nie będę potrafił.
Skorzystałem z gotowego wzoru na którym będę się opierał.
Wzór :
http://www.obrazki.wiedzanaplus.pl/bazy_danych/mysql/internetowy_system_biblioteczny/projekt-biblioteki-szkolnej.png

A tutaj przedstawiam stworzenie

Kopiuj


create datebase Projekt_Biblioteka; 




create table bibliotekraz 
(
Id_Biblitekarz  integer Constraint Id_Biblitekarz_pk PRIMARY KEY,
Login number(13),
Haslo varchar(20)
)


create table Admin
(
Id_Admin integer Constraint Id_Admin_pk Primary key,
Login number(13),
Haslo varchar(20)
)



create table Kategoria
(
Id_kategoria Integer constraint Id_kategoria_pk PRIMARY KEY ,
Nazwa Varchar(200) 
)


create Table Ksiazka
(
Id_Ksiazka integer forgein Id_Ksiazka_pk PRIMARY KEY,
Id_Kategoria integer ,
ISBN varchar(20),
Tytul Varchar(200),
Autor Varchar(200),
Stron integer(4),
Wydawnictwo Varchar(50),
Rok_Wydania integer(4),
Opis Text,
CONSTRAINT Id_Kategoria_fk FOREIGN KEY (Id_Kategoria) REFERENCES Kategoria(Id_Kategoria)
)


create table zamowienie
(
Id_Zamowienia integer constraint Id_Zamowienia_pk PRIMARY KEY ,
Id_Czytelnik integer,
Id_Ksiazka Integer,
Data_Zamowienia DateTime,
Data_Odbioru DateTime,
Data_Zwrotu DateTime ,
CONSTRAINT Id_Czytelnik_fk FOREIGN KEY (Id_Czytelnik) REFERENCES Czytelnik(Id_Czytelnik),
CONSTRAINT Id_Ksiazka_fk FOREIGN KEY (Id_Ksiazka) REFERENCES Ksiazka(Id_Ksiazka) 
)


Create Table Czytelnik
(
Id_Czytelnik Integer Constraint Id_Czytelnik_pk PRIMARY KEY, 
Login Varchar(50),
Haslo Varchar(40),
Imie Varchar (50),
Nazwisko Varchar (50),
Adres Varchar(50),
Miasto Varchar(50),
Wojewodzwo varchar(50),
Telefon Numbeer(13),
Kod_Pocztowy Varchar(40),
email Varchar(50)
)

Marcin.Miga
  • Rejestracja:prawie 17 lat
  • Ostatnio:dzień
  • Postów:2792
0

Osobna tabela Autorzy, tabela AutorzyKsiazki, zamiast pole w Ksiazka. Podobnie z kategoriami (wiele do wielu).
Czedmu Loginy i Telkefon to Number? Bedziesz je sumowac?
Kod pocztowy varchar(40) - rozrzutnyś... Za to poskąpiłeś na email...
No i wszedzie ID na sekwencjach powinny byc...

Emil Trześniewski
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 7 lat
  • Postów:14
0
Marcin.Miga napisał(a):

Osobna tabela Autorzy, tabela AutorzyKsiazki, zamiast pole w Ksiazka. Podobnie z kategoriami (wiele do wielu).
Czedmu Loginy i Telkefon to Number? Bedziesz je sumowac?
Kod pocztowy varchar(40) - rozrzutnyś... Za to poskąpiłeś na email...
No i wszedzie ID na sekwencjach powinny byc...

O dzięki właśnie o to mi chodziło o takie uwagi. Wrzucam poprawione.

Co zrobiłem
*Dodałem osobną kolumnę Autorzy, (id_autora, Imię_Autora, Nazwisko_Nazwisko )
*Loginy zamieniłem na varchar a telefon na integer
*dodałem not null
*oraz stworzyłem sekwencje sekw_id

I Przy sekwencji narodziło się pytanie, a co jeśli jakaś książka zostanie usunięta, sekwencja tego nie zauważy i będzie leciała dalej, Tutaj chyba będzie trzeba w przyszłości stworzyć procedurę jakąś ?

Kopiuj



create datebase Projekt_Biblioteka; 

create table bibliotekraz 
(
Id_Biblitekarz  integer Constraint Id_Biblitekarz_pk PRIMARY KEY,
Login varchar(20) not null,
Haslo varchar(20) not null
)

create table Admin
(
Id_Admin integer Constraint Id_Admin_pk Primary key,
Login varchar(20) not null,
Haslo varchar(20) not null
)

create table Kategoria
(
Id_kategoria Integer constraint Id_kategoria_pk PRIMARY KEY ,
Nazwa Varchar(200) not null
)

create Table Ksiazka
(
Id_Ksiazka integer forgein Id_Ksiazka_pk PRIMARY KEY,
Id_Kategoria integer ,
Id_Autora integer,
ISBN varchar(20) ,
Tytul Varchar(200) not null,
Stron integer(4) not null,
Wydawnictwo Varchar(50) not null,
Rok_Wydania integer(4) not null,
Opis Text,
CONSTRAINT Id_Kategoria_fk FOREIGN KEY (Id_Kategoria) REFERENCES Kategoria(Id_Kategoria)
CONSTRAINT Id_Autora_fk FOREIGN KEY (Id_Autora) REFERENCES Autorzy(Id_Autora)
)

create table zamowienie
(
Id_Zamowienia integer constraint Id_Zamowienia_pk PRIMARY KEY ,
Id_Czytelnik integer,
Id_Ksiazka Integer,
Data_Zamowienia DateTime not null,
Data_Odbioru DateTime not null ,
Data_Zwrotu DateTime not null,
CONSTRAINT Id_Czytelnik_fk FOREIGN KEY (Id_Czytelnik) REFERENCES Czytelnik(Id_Czytelnik),
CONSTRAINT Id_Ksiazka_fk FOREIGN KEY (Id_Ksiazka) REFERENCES Ksiazka(Id_Ksiazka) 
)

Create Table Czytelnik
(
Id_Czytelnik Integer Constraint Id_Czytelnik_pk PRIMARY KEY, 
Login Varchar(50) not null,
Haslo Varchar(40) not null,
Imie Varchar (50) not null,
Nazwisko Varchar (50) not null,
Adres Varchar(50) not null,
Miasto Varchar(50) not null,
Wojewodzwo varchar(50) not null,
Telefon Integer(13) not null,
Kod_Pocztowy Varchar(10) not null,
email Varchar(100)
)

create table Autorzy 
(
Id_Autora  Integer Constraint Id_Autora_pk PRIMARY KEY, 
Imie_Autora Varchar(20) not null,
Nazwisko_Autora Varchar(30) not null
)


create sequence sekw_id 
minvalue 1 
start with 1 
Increment by 1 


DR
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 22 godziny
  • Postów:1129
0

Bibliotekarz nie ma adresu? Nie może być też jednocześnie czytelnikiem w tej bibliotece?

0
Dregorio napisał(a):

Bibliotekarz nie ma adresu? Nie może być też jednocześnie czytelnikiem w tej bibliotece?

Słuszna uwaga.
Czyli najlepiej do Tabeli Bibliotekarz dodać Id_Czytelnik

A zadania na dziś to porobić inserty i uzupełnić bazę

Ktoś ma jeszcze uwagi ?

Marcin.Miga
  • Rejestracja:prawie 17 lat
  • Ostatnio:dzień
  • Postów:2792
0

Osobna tabela Autorzy, tabela AutorzyKsiazki, zamiast pole w Ksiazka. Podobnie z kategoriami (wiele do wielu).
No i wszedzie ID na sekwencjach powinny byc...

Emil Trześniewski
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 7 lat
  • Postów:14
0
Marcin.Miga napisał(a):

Osobna tabela Autorzy, tabela AutorzyKsiazki, zamiast pole w Ksiazka. Podobnie z kategoriami (wiele do wielu).
No i wszedzie ID na sekwencjach powinny byc...

Nie zrozumiałem w pierwszym poście o co chodziło, Ale teraz rozumie, chociaż nie wiem czy dobrze zrobiłem. Wiele do wielu czyli tworzymy tabelę łącznikową.
Co do sekwencji na ID na Oracle chyba nie ma czegoś takiego jak (MySQL (AUTO_INCREMENT) albo MS SQL (IDENTITY)?.

Kopiuj

create datebase Projekt_Biblioteka; 

create table bibliotekraz 
(
Id_Biblitekarz  integer Constraint Id_Biblitekarz_pk PRIMARY KEY,
Id_Czytelnika integer 
Login varchar(20) not null,
Haslo varchar(20) not null
CONSTRAINT Id_Czytelnika_fk FOREIGN KEY (Id_Czytelnika) REFERENCES Czytelnik(Id_Czytelnik)
)

create table Admin
(
Id_Admin integer Constraint Id_Admin_pk Primary key,
Login varchar(20) not null,
Haslo varchar(20) not null
)

create table Kategoria
(
Id_Kategoria Integer constraint Id_kategoria_pk PRIMARY KEY ,
Nazwa Varchar(200) not null
)

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)

)

create Table Ksiazka
(
Id_Ksiazka integer forgein Id_Ksiazka_pk PRIMARY KEY,
Id_Kategoria integer ,
Id_Autorzy integer,
ISBN varchar(20) ,
Tytul Varchar(200) not null,
Stron integer(4) not null,
Wydawnictwo Varchar(50) not null,
Rok_Wydania integer(4) not null,
Opis Text,
CONSTRAINT Id_Kategoria_fk FOREIGN KEY (Id_Kategoria) REFERENCES Kategoria(Id_Kategoria),
CONSTRAINT Id_Autorzy_fk FOREIGN KEY (Id_Autorzy) REFERENCES Autorzy(Id_Autora)
)

create table zamowienie
(
Id_Zamowienia integer constraint Id_Zamowienia_pk PRIMARY KEY ,
Id_Czytelnik integer,
Id_Ksiazka Integer,
Data_Zamowienia DateTime not null,
Data_Odbioru DateTime not null ,
Data_Zwrotu DateTime not null,
CONSTRAINT Id_Czytelnik_fk FOREIGN KEY (Id_Czytelnik) REFERENCES Czytelnik(Id_Czytelnik),
CONSTRAINT Id_Ksiazka_fk FOREIGN KEY (Id_Ksiazka) REFERENCES Ksiazka(Id_Ksiazka) 
)

Create Table Czytelnik
(
Id_Czytelnik Integer Constraint Id_Czytelnik_pk PRIMARY KEY, 
Login Varchar(50) not null,
Haslo Varchar(40) not null,
Imie Varchar (50) not null,
Nazwisko Varchar (50) not null,
Adres Varchar(50) not null,
Miasto Varchar(50) not null,
Wojewodzwo varchar(50) not null,
Telefon Integer(13) not null,
Kod_Pocztowy Varchar(10) not null,
email Varchar(100)
)

create table Autor
(
Id_Autora  Integer Constraint Id_Autora_pk PRIMARY KEY, 
Imie_Autora Varchar(20) not null,
Nazwisko_Autora Varchar(30) not null
)

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 )
)


create sequence sekw_id 
minvalue 1 
start with 1 
Increment by 1 


Marcin.Miga
  • Rejestracja:prawie 17 lat
  • Ostatnio:dzień
  • Postów:2792
0

Prawie OK. Teraz z tabeli Ksiazka mozesz (a nawet powinieneś) wywalić pola ID_Kategoria i ID_Autorzy i wywalic constrainty.
Co do sekwencji, to nawet jak teraz zrobisz NEXTVAL, to masz tylko jednego sekwencera ... I co, będziesz go współdzielil między różne ID? Powinieneś mieć tyle sekwencerów, ile tabel z kolumnami ID.

Emil Trześniewski
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 7 lat
  • Postów:14
0

Niestety rozłożyła mnie grypa a że w pracy nie mogłem iść jeszcze na L4 bo będę miał nie płatne, to się tak męczyłem a już tu zajrzeć nie miałem chęci. Dopiero dzisiaj chwile posiedziałem i fajne rozwiązanie znalazłem co do numerowanie z użyciem TRIGGER-a
Marcin.Miga Prosił bym o ocenę i jeszcze ewentualne co poprawić uwagi, a jak będzie dobrze to trochę wypełnię danymi

Kopiuj
create datebase Projekt_Biblioteka; 

create table bibliotekraz 
(
Id_Biblitekarz  integer Constraint Id_Biblitekarz_pk PRIMARY KEY,
Id_Czytelnika integer 
Login varchar(20) not null,
Haslo varchar(20) not null
CONSTRAINT Id_Czytelnika_fk FOREIGN KEY (Id_Czytelnika) REFERENCES Czytelnik(Id_Czytelnik)
)

create table Admin
(
Id_Admin integer Constraint Id_Admin_pk Primary key,
Login varchar(20) not null,
Haslo varchar(20) not null
)

create table Kategoria
(
Id_Kategoria Integer constraint Id_kategoria_pk PRIMARY KEY ,
Nazwa Varchar(200) not null
)

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)

)

create Table Ksiazka
(
Id_Ksiazka integer forgein Id_Ksiazka_pk PRIMARY KEY,
ISBN varchar(20) ,
Tytul Varchar(200) not null,
Stron integer(4) not null,
Wydawnictwo Varchar(50) not null,
Rok_Wydania integer(4) not null,
Opis Text,
)

create table zamowienie
(
Id_Zamowienia integer constraint Id_Zamowienia_pk PRIMARY KEY ,
Id_Czytelnik integer,
Id_Ksiazka Integer,
Data_Zamowienia DateTime not null,
Data_Odbioru DateTime not null ,
Data_Zwrotu DateTime not null,
CONSTRAINT Id_Czytelnik_fk FOREIGN KEY (Id_Czytelnik) REFERENCES Czytelnik(Id_Czytelnik),
CONSTRAINT Id_Ksiazka_fk FOREIGN KEY (Id_Ksiazka) REFERENCES Ksiazka(Id_Ksiazka) 
)

Create Table Czytelnik
(
Id_Czytelnik Integer Constraint Id_Czytelnik_pk PRIMARY KEY, 
Login Varchar(50) not null,
Haslo Varchar(40) not null,
Imie Varchar (50) not null,
Nazwisko Varchar (50) not null,
Adres Varchar(50) not null,
Miasto Varchar(50) not null,
Wojewodzwo varchar(50) not null,
Telefon Integer(13) not null,
Kod_Pocztowy Varchar(10) not null,
email Varchar(100)
)

create table Autor
(
Id_Autora  Integer Constraint Id_Autora_pk PRIMARY KEY, 
Imie_Autora Varchar(20) not null,
Nazwisko_Autora Varchar(30) not null
)

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 )
)

create sequence sekw_id_Bibliotekarz 
minvalue 1 
start with 1 
Increment by 1 

CREATE OR REPLACE TRIGGER sekw_id_Bibliotekarz _PODSTAW_PK 
 BEFORE INSERT ON Bibliotekarz 
 FOR EACH ROW
    BEGIN
      :new.ID:=sekw_id_Bibliotekarz .nextval;
    END;


create sequence sekw_id_Admin
minvalue 1 
start with 1 
Increment by 1 

CREATE OR REPLACE TRIGGER sekw_id_Admin_PODSTAW_PK 
 BEFORE INSERT ON Admin
 FOR EACH ROW
    BEGIN
      :new.ID:=sekw_id_Admin.nextval;
    END;

create sequence sekw_id_Kategoria
minvalue 1 
start with 1 
Increment by 1 

CREATE OR REPLACE TRIGGER sekw_id_Kategoria_PODSTAW_PK 
 BEFORE INSERT ON Kategoria
 FOR EACH ROW
    BEGIN
      :new.ID:=sekw_id_Kategoria.nextval;
    END;

create sequence sekw_id_Ksiazka
minvalue 1 
start with 1 
Increment by 1 


CREATE OR REPLACE TRIGGER sekw_id_Ksiazka_PODSTAW_PK 
 BEFORE INSERT ON Ksiazka
 FOR EACH ROW
    BEGIN
      :new.ID:=sekw_id_Ksiazka.nextval;
    END;

create sequence sekw_id_Zamowienie 
minvalue 1 
start with 1 
Increment by 1

CREATE OR REPLACE TRIGGER sekw_id_Zamowienie_PODSTAW_PK 
 BEFORE INSERT ON Zamówienie
 FOR EACH ROW
    BEGIN
      :new.ID:=sekw_id_Zamowienie.nextval;
    END;

create sequence sekw_id_Czytelnik
minvalue 1 
start with 1 
Increment by 1 

CREATE OR REPLACE TRIGGER sekw_id_Czytelnik_PODSTAW_PK 
 BEFORE INSERT ON Czytelnik
 FOR EACH ROW
    BEGIN
      :new.ID:=sekw_id_Czytelnik.nextval;
    END;

create sequence sekw_id_Autor
minvalue 1 
start with 1 
Increment by 1  

CREATE OR REPLACE TRIGGER sekw_id_Autor_PODSTAW_PK 
 BEFORE INSERT ON Autro
 FOR EACH ROW
    BEGIN
      :new.ID:=sekw_id_Autor.nextval;
    END;

Marcin.Miga
  • Rejestracja:prawie 17 lat
  • Ostatnio:dzień
  • Postów:2792
0

Moje zmiany:

Kopiuj
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
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)

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.

Kopiuj


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Ć ?

Emil Trześniewski
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 7 lat
  • Postów:14
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
Marcin.Miga
  • Rejestracja:prawie 17 lat
  • Ostatnio:dzień
  • Postów:2792
0

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

JU
  • Rejestracja:około 9 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Śląsk
  • Postów:45
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.

Emil Trześniewski
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 7 lat
  • Postów:14
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

Emil Trześniewski
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 7 lat
  • Postów:14
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,

Emil Trześniewski
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 7 lat
  • Postów:14
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 ?

Kopiuj

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;

JU
  • Rejestracja:około 9 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Śląsk
  • Postów:45
0

Masz błąd w samym select:

Kopiuj
   select * from zamowienie 
    where  Data_Zamowienia between to_date(select sysdate-1 from dual ) and (select sysdate from dual ) 

Powinno być:

Kopiuj
 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?

0
juro napisał(a):

Masz błąd w samym select:

Kopiuj
   select * from zamowienie 
    where  Data_Zamowienia between to_date(select sysdate-1 from dual ) and (select sysdate from dual ) 

Powinno być:

Kopiuj
 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?

ok poprawiłem zapytanie, ale przymuszam że po mojemu chociaż mniej zgrabniej to powinno pójść

wklejam błąd

Kopiuj

Error starting at line : 23 in command -
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 (SYSDATE - 1) AND SYSDATE  ) 
    LOOP 
    utl_file.put_line(file_handle, a.Id_Czytelnik || ';' || a.Id_Ksiazka || ';');
  END LOOP;
  utl_file.fclose(file_handle);
 end;
Error report -
ORA-06550: line 2, column 15:
PLS-00201: identifier 'UTL_FILE' must be declared
ORA-06550: line 2, column 15:
PL/SQL: Item ignored
ORA-06550: line 4, column 3:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 4, column 3:
PL/SQL: Statement ignored
ORA-06550: line 10, column 23:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 10, column 5:
PL/SQL: Statement ignored
ORA-06550: line 12, column 19:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 12, column 3:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

JU
  • Rejestracja:około 9 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Śląsk
  • Postów:45
0

Użytkownik którym próbujesz to wykonać nie ma uprawnień do UTL_FILE. Z sysdba musisz mu nadać uprawnienie EXECUTE do tego pakietu.

Emil Trześniewski
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 7 lat
  • Postów:14
0
juro napisał(a):

Użytkownik którym próbujesz to wykonać nie ma uprawnień do UTL_FILE. Z sysdba musisz mu nadać uprawnienie EXECUTE do tego pakietu.

sek w tym że ma tylko głównego użytkownika",system" utworzonego przy tworzeniu bazy

Kopiuj
GRANT READ,WRITE ON DIRECTORY DANE TO system;

i gdy wykonuje polecenie to mam błąd że sam sobie nie mogę nadawać i odbierać uprawnień

Kopiuj
GRANT READ,WRITE ON DIRECTORY DANE TO system
Error report -
ORA-01749: you may not GRANT/REVOKE privileges to/from yourself
01749. 00000 -  "you may not GRANT/REVOKE privileges to/from yourself"
*Cause:    
*Action:

kate87
  • Rejestracja:około 15 lat
  • Ostatnio:około 3 lata
0

Dodałeś te wszystkie tabelki na użytkowniku system? Tak nie powinno się robić w oracle jest tablesace odpowiadający jednemu użytkownikowi. Musisz założyć swój tablespace i swojego użytkownika. Dopiero w nich dodać swoje tabelki. Potem kiedy robisz selecty to robisz je do swoich schematów. Dla jednego użytkownika system możesz mieć wiele schematów.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)