SQL opdracht

Status
Niet open voor verdere reacties.

refereenr1

Gebruiker
Lid geworden
25 okt 2008
Berichten
43
OPGAVE

Voeg aan de tabel persoon geboortedatum toe door alter table commando te gebruiken
Insert in de tabel persoon 10 personen.
Maak een query die alle personen jonger dan 20 jaar teruggeeft
Schrijf een stored procedure die als input postcode heeft en als output het aantal personen die deze postcode heeft.
Ontwerp een 2de tabel waarin de bankrekeningen van een persoon worden bijgehouden
Iedere bankrekening heeft een bedrag (bij opening 0)
Voeg een 2 tal bankrekeningen per persoon in.
Schrijf een query die de bankrekeningen + bedrag per persoon weergeeft.
Maak een view die hetzelfde doet.

Schrijf een stored procedure maxbedrag( out naam VARCHAR(30), out bedrag int)
Die de naam van de persoon die het meeste geld op zijn rekening heeft als 1ste output paramenter geeft.
Die het totale bedrag van de rekeningen van die persoon als 2de output parameter geeft

Schrijf een stored procedure minbedrag( out naam VARCHAR(30), out bedrag int)
Die de naam van de persoon die het minste geld op zijn rekening heeft als 1ste output paramenter geeft.
Die het totale bedrag van de rekeningen van die persoon als 2de output parameter geeft

Maak een grant statement die user1 op localhost (paswoord user1) toelaat procedure maxbedrag uit te voeren
Laat user1 toe op localhost procedure minbedrag uit te voeren door de mysql tabellen te wijzigen.

EEn groot deel heb ik zelf al gemaakt, alleen het laatste werkt niet, wie kan me helpen wat ik misdoe??
OPLOSSING:
Code:
Create database bartDP;
Use bartDP; 

create table persoon(
 PersoonID int NOT NULL AUTO_INCREMENT,
 Naam varchar(30) NOT NULL,
 Straat varchar(30) NOT NULL,
 Postcode varchar(4) NOT NULL,
 CONSTRAINT PersoonPK PRIMARY KEY (PersoonID));


ALTER TABLE Persoon ADD geboortedatum DATE;

insert into persoon (naam,straat,postcode,geboortedatum) values (“ann van de pontseele“,”stratendries 6A”,”9572”,"1980-08-04");
insert into persoon (naam,straat,postcode,geboortedatum) values (“bart de pauw“,”stratendries 6A”,”9572”,"1980-09-05");
insert into persoon (naam,straat,postcode,geboortedatum) values (“luc van de pontseele“,”kruiststraat 78”,”9570”,"1954-11-04");
insert into persoon (naam,straat,postcode,geboortedatum) values (“aline van wesaemael“,”tuinwijk jan verhaegen 64”,”9820”,"1950-06-07");
insert into persoon (naam,straat,postcode,geboortedatum) values (“hannelore de pauw“,”stratendries 6A”,”9572”,"2007-03-22");
insert into persoon (naam,straat,postcode,geboortedatum) values (“hans van de pontseele“,”kruisstraat 78”,”9570”,"1990-07-22");
insert into persoon (naam,straat,postcode,geboortedatum) values (“yvonne meuleman“,”tuinwijk jan verhaegen 60”,”9820”,"1938-02-08");
insert into persoon (naam,straat,postcode,geboortedatum) values (“chris nuyens“,”kruisstraat 78”,”9570”,"1960-11-08");
insert into persoon (naam,straat,postcode,geboortedatum) values (“evy de pauw“,”stratendries 6A”,”9572”,"2008-09-19");
insert into persoon (naam,straat,postcode,geboortedatum) values (“pluto de hond“,”stratendries 6A”,”9572”,"2003-06-10");


SELECT naam,geboortedatum,TIMESTAMPDIFF(YEAR, geboortedatum, CURDATE()) As AGE 
FROM persoon 
WHERE (TIMESTAMPDIFF(YEAR, geboortedatum, CURDATE()) < 20);

DROP PROCEDURE Postcode;
DELIMITER |
CREATE PROCEDURE Postcode(postcode varchar(4))
BEGIN
SELECT count(*) FROM persoon
WHERE persoon.postcode = postcode;
END;
|
DELIMITER ;

Call Postcode("9820");
Call Postcode("9572");
Call Postcode("9570");



create table bankrekening(
 RekeningID int NOT NULL AUTO_INCREMENT,
 Rekeningnr varchar (14) NOT NULL,
 PersoonID int,
 bedrag int default 0,
 CONSTRAINT bankrekeningPK Primary Key(RekeningID));
 

insert into bankrekening (rekeningnr,persoonID,bedrag) values ("737-0154009-16",1,1500);
insert into bankrekening (rekeningnr,persoonID,bedrag) values ("737-0154009-30",1,500);
insert into bankrekening (rekeningnr,persoonID,bedrag) values ("737-0154009-16",2,10000);
insert into bankrekening (rekeningnr,persoonID,bedrag) values ("737-0404030-16",2,125);
insert into bankrekening (rekeningnr,persoonID,bedrag) values ("001-0000000-05",3,50);
insert into bankrekening (rekeningnr,persoonID,bedrag) values ("400-1305090-06",3,1900);
insert into bankrekening (rekeningnr,persoonID,bedrag) values ("123-4567890-00",4,100);
insert into bankrekening (rekeningnr,persoonID,bedrag) values ("987-6543210-10",4,0);
insert into bankrekening (rekeningnr,persoonID,bedrag) values ("101-5050505-05",5,500);
insert into bankrekening (rekeningnr,persoonID,bedrag) values ("123-9999999-99",5,880000);
insert into bankrekening (rekeningnr,persoonID,bedrag) values ("000-0101010-00",6,20);
insert into bankrekening (rekeningnr,persoonID,bedrag) values ("999-0202020-99",6,900);
insert into bankrekening (rekeningnr,persoonID,bedrag) values ("777-7777777-77",7,1250);
insert into bankrekening (rekeningnr,persoonId,bedrag) values ("666-6666666-66",7,750);
insert into bankrekening (rekeningnr,persoonID,bedrag) values ("123-1231231-23",8,1000);
insert into bankrekening (rekeningnr,persoonID,bedrag) values ("321-3213213-21",8,1950);
insert into bankrekening (rekeningnr,persoonID,bedrag) values ("999-9999999-99",9,500);
insert into bankrekening (rekeningnr,persoonID,bedrag) values ("888-8888888-88",9,300);
insert into bankrekening (rekeningnr,persoonID,bedrag) values ("000-0000000-10",10,90000);
insert into bankrekening (rekeningnr,persoonID,bedrag) values ("000-2020202-20",10,13000);


SELECT persoon.naam, bankrekening.rekeningnr, bankrekening.bedrag, (SELECT SUM(bedrag) FROM bankrekening WHERE bankrekening.persoonID=persoon.persoonID) As Totaal  
FROM persoon, bankrekening
WHERE persoon.persoonID = bankrekening.persoonID;

CREATE VIEW persoon_bankrekening AS
SELECT persoon.naam, bankrekening.rekeningnr, bankrekening.bedrag, (SELECT SUM(bedrag) FROM bankrekening WHERE bankrekening.persoonID=persoon.persoonID) As Totaal 
FROM persoon, bankrekening 
WHERE persoon.persoonID = bankrekening.persoonID;

SELECT * FROM persoon_bankrekening;
Opgave2
Code:
Drop procedure MaxBepalen;
DELIMITER |
create procedure MaxBepalen(OUT Max int)
BEGIN
DECLARE cMax int default 0;
DECLARE cBedrag;
DECLARE cNaam;
DECLARE done INT DEFAULT 0;
DECLARE cur1 CURSOR FOR SELECT bedrag FROM bankrekening;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur1;
WHILE NOT done DO
FETCH cur1 into cbankrekeningID,cBedrag;
SELECT naam 
FROM persoon, bankrekening
WHERE persoonID = bankrekeningID
(SELECT Max(bedrag)
cMax = Max
(Set cMax = cbedrag;
IF bedrag > Max THEN MAX = bedrag; 
)
end while
;
close cur1;
End;
|
DELIMITER ;
Call MaxBepalen(@Max);
Select @Max;


Drop procedure MinBepalen;
DELIMITER |
CREATE procedure MinBepalen(OUT Max int)
BEGIN
DECLARE cMin int default 0;
DECLARE cbankrekeningID;
DECLARE cBedrag;
DECLARE cNaam;
DECLARE done INT DEFAULT 0;
DECLARE cur1 CURSOR FOR SELECT bedrag FROM bankrekening;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur1;
WHILE NOT done DO
FETCH cur1 into cbankrekeningID,cBedrag;
SELECT naam 
FROM persoon, bankrekening
WHERE persoonID = bankrekeningID
(Set cMax = cbedrag;
IF bedrag < Min THEN MIN = bedrag;)
end while
;
close cur1;
End;
|
DELIMITER ;
Call MINBepalen(@total);
Select @total;


User access
GRANT EXECUTE ON procedure Maxbedrag TO 'user1'@'localhost' IDENTIFIED BY 'user1';

GRANT EXECUTE ON PROCEDURE Minbedrag TO 'user1'@'localhost' IDENTIFIED BY 'user1';
FLUSH Privilege

Update_prive On tables_priv.* TO 'user1'@'localhost'  IDENTIFIED BY 'user1';
FLUSH PRIVILEGES;

GRANT SELECT (minbedrag) ON *.* TO 'user1'@'localhost' IDENTIFIED BY 'user1';
 
Laatst bewerkt door een moderator:
Beste Bart,

Ik heb je al eerder op deze mededeling gewezen en ook per mail nog het een en ander uitgelegd

Aangezien het hier duidelijk om een huiswerkvraag gaat zul je dus aan moeten geven wat je zelf al hebt gedaan.
Voldoe je hier niet aan dat zal ook deze vraag worden gesloten.
 
Beste Bart,

Ik heb je al eerder op deze mededeling gewezen en ook per mail nog het een en ander uitgelegd

Aangezien het hier duidelijk om een huiswerkvraag gaat zul je dus aan moeten geven wat je zelf al hebt gedaan.
Voldoe je hier niet aan dat zal ook deze vraag worden gesloten.

Ik heb er duidelijk bovenaan bijgeschreven opgave, en er onder oplossing, heb er dus bij gezet wat gevraagd wordt, de rest heb ik dus wel zelf gedaan!
 
Het is niet zo dat jij van de volledige opgave alleen opdracht 1 en 2 maakt en de rest aan ons geeft met het idee: "Zo, die mogen jullie oplossen."

Geef dus per opdracht aan wat je er aan niet snapt en wat jij zelf denkt dat de oplossing moet zijn.

Daarnaast zul je beter je vraag moeten formuleren.
Het is in je eerste niet duidelijk wat je nou wilt.
 
De opgave 1 en 2 is dus de opgave.
De rest is mijn eigen code en dus de vermoedelijke oplossing.
Alleen in oplossing 2 geraak ik er niet volledig uit. het wil niet werken,
we zouden cursor moeten gebruiken, wat ik dus ook probeerde, hij werkt dus niet, echt, maar weet niet echt concreet wat ik verkeerd doe.
 
Niemand die me kan helpen hiermee? is nogal dringend, vooral die stored procedure, en dat grant statement, lukken niet goed. Wie heeft er idee wat ik dara juist verkeerd doe. Ik krijg steeds errors als ik de code uitvoer
 
Plaats de errors eens die je krijgt, en bij welke procedure krijg je deze error?

Probeer het grant statement eens zonder wachtwoord:
PHP:
GRANT EXECUTE ON procedure Maxbedrag TO 'user1'@'localhost';
Wat betreft de grant-commando's, kijk ook eens op deze pagina: http://dev.mysql.com/doc/refman/5.0/en/grant.html
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan