Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Procedura, transakcija par pitanja

[es] :: MySQL :: Procedura, transakcija par pitanja

[ Pregleda: 1291 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

weleb

Član broj: 284399
Poruke: 38
*.adsl.net.t-com.hr.



Profil

icon Procedura, transakcija par pitanja27.10.2011. u 13:58 - pre 151 meseci
Code:

DROP PROCEDURE IF EXISTS proc1;
DELIMITER //
CREATE PROCEDURE proc1(IN sifra INT)
    BEGIN
    
    DECLARE nZupanija VARCHAR(30);
    DECLARE iPlaca INT;    
    
        SELECT nazivZupanija INTO nZupanija 
        FROM radnik JOIN mjesto ON radnik.pbrStan=mjesto.pbrMjesto 
        JOIN zupanija ON mjesto.sifZupanija=zupanija.sifZupanija WHERE sifRadnik=sifra;
        
        SELECT KoefPlaca*IznosOsnovice INTO iPlaca 
        FROM radnik JOIN mjesto ON radnik.pbrStan=mjesto.pbrMjesto 
        JOIN zupanija ON mjesto.sifZupanija=zupanija.sifZupanija WHERE zupanija.nazivZupanija=nZupanija;
        
        UPDATE radnik SET najvecaPlaca=iPlaca WHERE sifRadnik=sifra;
    END //
DELIMITER ;        

CALL proc1(154);



Baca mi error:

Citat:

Query : CALL proc1(138)

Error Code : 1172
Result consisted of more than one row


Nije ništa komplicirano (učim) ali stvarno ne znam do čega je :P
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Procedura, transakcija par pitanja27.10.2011. u 14:11 - pre 151 meseci
Izvrši upit

Code (sql):

   
        SELECT nazivZupanija
        FROM radnik JOIN mjesto ON radnik.pbrStan=mjesto.pbrMjesto
        JOIN zupanija ON mjesto.sifZupanija=zupanija.sifZupanija WHERE sifRadnik=sifra;

 


ali umesto "sifra" stavi id radnika koji ti pravi problem, pa javi koliko ti je redova vratio. Moguće je da dva mesta imaju isti poštanski proj, a nalaze se u dve županije (greškom ili namerno)...

Greška ti se javlja za id=138, a ti si u prvom primeru pozvao za id=154. Možda je samo prvi primer sa pogrešnim pozivom...

Drugo pitanje, zašto si ponovio upit, ako ti je iz prvog upita trebala samo šifra županije.
 
Odgovor na temu

mish_ns
Miloš Krstin

Član broj: 159930
Poruke: 1105
..178.212.adsl.dyn.beotel.net.



+18 Profil

icon Re: Procedura, transakcija par pitanja27.10.2011. u 19:30 - pre 151 meseci
Pozdrav.

Neki od upita ti vraca vise od jednog polja.

Najbolje bi bilo da ove SELECT-e uradis zasebno van procedure oa da vidis sta ti vracaju.
Ako vrate vise od jednog rezultata onda je tu greska.
 
Odgovor na temu

weleb

Član broj: 284399
Poruke: 38
*.adsl.net.t-com.hr.



Profil

icon Re: Procedura, transakcija par pitanja27.10.2011. u 20:55 - pre 151 meseci
@djoka_l, ma testirao sam sa više id_ova je nisam isto kopirao ( CALL proc1(138), CALL proc1(54) ) od toga do.
Testirao sam sa upitom kao što si rekao i za njih par vrati ok (sam select kao i cijela procedura) dok za većinu drugih vraća dotični error.

Što se tiče ponovljenog upita ne znam ni sam više što radim :P

Zadatak je ovaj:

Citat:
Napisati proceduru koja de:
• primiti šifru radnika (procedura ne vrada nikakav rezultat preko varijable)
• za tog radnika pronadi županiju stanovanja
• u novostvoreni atribut najvecaPlaca unijeti koliki je najvedi iznos plade koju ima
bilo koji radnik iz dohvadene županije (županije stanovanja zadanog radnika)
• iznos plade potrebno je računati kao umnožak vrijednosti atributa koefPlace i
iznosOsnovice
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Procedura, transakcija par pitanja27.10.2011. u 21:14 - pre 151 meseci
Citat:
weleb:dok za većinu drugih vraća dotični error.


Citat:
weleb
Code:

SELECT nazivZupanija INTO nZupanija  ...
SELECT KoefPlaca*IznosOsnovice INTO iPlaca 



Imas upit koji je SELECT INTO, on MORA da vrati samo jedan slog.

Ako ti sifRadnik nije unique ili primarni kljuc uvek postoji mogucnost da ce da vrati vise od jedan u prvom upitu, a u drugom ako zupanija.nazivZupanija nije unique ili primarni kljuc isto tako moze da ti se vrati vise od jednog sloga.

Ovo mozes da popravis na 2 nacina

1. valjan nacin, a to je da ti je db model projektujes tako da ne mozes imati ove duplikate (to je doduse pitanje da li je uopste moguce posto ti je mozda cela postavka losa)
2. seljacki nacin, a to je tako da sprecis upit da vrati vise od jednog sloga:

Code:

SELECT nazivZupanija INTO nZupanija 
FROM radnik JOIN mjesto ON radnik.pbrStan=mjesto.pbrMjesto 
JOIN zupanija ON mjesto.sifZupanija=zupanija.sifZupanija WHERE sifRadnik=sifra
LIMIT 1;

SELECT KoefPlaca*IznosOsnovice INTO iPlaca 
FROM radnik JOIN mjesto ON radnik.pbrStan=mjesto.pbrMjesto 
JOIN zupanija ON mjesto.sifZupanija=zupanija.sifZupanija WHERE zupanija.nazivZupanija=nZupanija
LIMIT 1;


Ovo naravno nije preporuceni nacin zato sto ti ne znas "koji" ce biti taj jedan rezultat koji ces dobit nazad.

Takodje, zar ne mislis da bi ova dva upita mogao da spojis u jedan ?

Code:

SELECT KoefPlaca*IznosOsnovice INTO iPlaca 
FROM radnik JOIN mjesto ON radnik.pbrStan=mjesto.pbrMjesto 
JOIN zupanija ON mjesto.sifZupanija=zupanija.sifZupanija
WHERE sifRadnik=sifra
LIMIT 1;

UPDATE radnik SET najvecaPlaca=iPlaca WHERE sifRadnik=sifra;


ovde ti je dovoljno samo da je sifRadnik unique (ili primarni) key.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Procedura, transakcija par pitanja27.10.2011. u 21:16 - pre 151 meseci
btw, ovo ti je odgovor na to kako da onaj tvoj stored procedure "proradi". To nije odgovor na

Citat:

Napisati proceduru koja de:
• primiti šifru radnika (procedura ne vrada nikakav rezultat preko varijable)
• za tog radnika pronadi županiju stanovanja
• u novostvoreni atribut najvecaPlaca unijeti koliki je najvedi iznos plade koju ima bilo koji radnik iz dohvadene županije (županije stanovanja zadanog radnika)
• iznos plade potrebno je računati kao umnožak vrijednosti atributa koefPlace i iznosOsnovice



 
Odgovor na temu

[es] :: MySQL :: Procedura, transakcija par pitanja

[ Pregleda: 1291 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.