CodePaste Logo
New Snippet New Snippet Recent Snippets Recent Snippets My Snippets My Snippets Web Code Search Snippets Search
Sign inor Register
Language: SQL

Package Dawnoises

195 Views
Copy Code Show/Hide Line Numbers
CREATE DATABASE dawnoises;
 
CREATE TABLE produse( 
    cod_produs number(10) not null primary key,
    cod_producator number(10) not null,
    denumire varchar(30),
    tip number(3) not null,
    cantitate number(8,2),
    um char(3),
    pret number(8,2)
    );
 
CREATE TABLE stoc(
    cod_inregistrare number(10) not null primary key,
    cod_produs number(10) not null,
    unitati number(3),
    data_modificare date
    );
 
CREATE TABLE producatori(
    cod_producator number(10) not null primary key,
    nume varchar(30),
    adresa varchar(50)
    );
 
CREATE TABLE tipuri(
    tip_produs number(3) not null primary key,
     descriere varchar(30)
    );
 
CREATE TABLE vanzari(
    cod_vanzare number(10) not null primary key,
    cod_produs number(10) not null,
    cod_client number(10) not null,
    unitati number(3),
    data_vanzare date
    );
 
CREATE TABLE clienti(
    cod_client number(10) not null primary key,
    nume varchar(30),
    puncte_fidelitate number(5),
    adresa varchar(50),
    telefon char(10),
    );
 
CREATE TABLE rezervari(
    cod_rezervare number(10) not null primary key,
    cod_client number(10) not null, 
    cod_masa number(10) not null, 
    data_inceput date,
    data_sfarsit date,
    ora_inceput char(8),
    ora_sfarsit char(8)
    );
 
CREATE TABLE mese(
    cod_masa number(10) not null primary key,
    capacitate number(3),
    descriere varchar(50)
    );
 
CREATE OR REPLACE package pack_dawnoises as
    procedure vanzare(
        cod_prod produse.cod_produs%TYPE, 
        cod_cl clienti.cod_client%TYPE,
        unitati integer
        );
    procedure rezervare_masa(
        cod_cl clienti.cod_client%TYPE, 
        cod_masa mese.cod_masa%TYPE, 
        data_incep rezervari.data_inceput%TYPE,
        data_sf rezervari.data_sfarsit%TYPE,
        ora_incep rezervari.ora_inceput%TYPE,
        ora_sf rezervari.ora_sfarsit%TYPE
        );
    function stoc_total return number;
    procedure acordare_puncte_client(
        cod_cl clienti.cod_client%TYPE,
        puncte integer
        );
end;
 
CREATE OR REPLACE package body pack_dawnoises as
    
    -----------------------
    -- PRIVATE FUNCTIONS --
    -----------------------
    
    function getClientByCod(v_cod_cl clienti.cod_client%TYPE) 
    return varchar is
    v_nume_cl clienti.nume%TYPE
    begin
        select nume 
          into v_nume_cl 
          from clienti 
          where cod_client = v_cod_cl;
        return v_nume_cl;
    end;
 
    function getProdByCod(v_cod_prod produse.cod_produs%TYPE) 
    return varchar is
    v_nume_prod produse.denumire%TYPE
    begin
        select denumire 
          into v_nume_prod 
          from produse 
          where cod_produs = v_cod_prod;
        return v_nume_prod;
    end;
 
    function getMasaByCod(v_cod_masa mese.cod_masa%TYPE) 
    return varchar is
    v_nume_masa mese.descriere%TYPE
    begin
        select descriere 
          into v_nume_masa 
          from mese 
          where cod_masa = v_cod_masa;
        return v_nume_masa;
    end;
    
    -----------------------
    -- PUBLIC PROCEDURES --
    -----------------------
    
    procedure vanzare(
        v_cod_prod in produse.cod_produs%TYPE, 
        v_cod_cl in clienti.cod_client%TYPE, 
        v_unit in integer) is    
    cod_max integer;
    begin
        select max(cod_vanzare) into cod_max from vanzari;
        
        insert into vanzari 
            values (cod_max+1, v_cod_prod, v_cod_cl, v_unit, sysdate);
        
        dbms_output.put_line(v_unit 
                        || ' unitati din rodusul ' 
                        || getProdByCod(v_cod_prod) 
                        ||' au fost vandute clientului '
                        || getClientByCod(v_nume_cl) 
                        ||' cu succes!');
    end;
 
    procedure rezervare_masa(
        v_cod_cl clienti.cod_client%TYPE, 
        v_cod_masa mese.cod_masa%TYPE, 
        v_data_incep rezervari.data_inceput%TYPE,
        v_data_sf rezervari.data_sfarsit%TYPE,
        v_ora_incep rezervari.ora_inceput%TYPE,
        v_ora_sf rezervari.ora_sfarsit%TYPE
        ) is
    cod_max integer;
    begin
        select max(cod_rezervare) into cod_max from rezervari;
        
        insert into rezervari 
            values (cod_max+1, v_cod_cl, v_cod_masa, 
                    v_data_incep, v_data_sf, 
                    v_ora_incep, v_ora_sf);
        
        dbms_output.put_line('Masa ' 
                        || getMasaByCod(v_cod_masa) 
                        ||' a fost rezervata de clientul '
                        || getClientByCod(v_nume_cl) 
                        ||' pentru data de ')
                        || TO_CHAR(v_data_incep);
    end;
    
    procedure acordare_puncte_client(
        v_cod_cl in clienti.cod_client%TYPE, 
        v_puncte in integer) is    
    v_puncte_total integer;
    begin
        update clienti
            set puncte_fidelitate = puncte_fidelitate + v_puncte
            where cod_client = v_cod_cl;
            
        select puncte_fidelitate
            into v_puncte_total
            from clienti
            where cod_client = v_cod_cl;
    
        dbms_output.put_line('Clientul ' 
                        || getClientByCod(v_nume_cl) 
                        ||' are acum ')
                        || TO_CHAR(v_puncte_total)
                        ||' puncte de fidelitate!');
    end;
        
    function stoc_total return number is
    v_stoc_total number;
    begin
        select sum(unitati)
        into v_stoc_total
        from stoc;
        return v_stoc_total;
    end;
 
end;
by vlad tamas
  June 01, 2010 @ 1:50am
Tags:

Add a comment


Report Abuse
brought to you by:
West Wind Techologies



If you find this site useful and use it frequently please consider making a donation to support this free service.
Donate