» »

Funkcija v SQL

Funkcija v SQL

greentech ::

Mam en problem in bi bil zelo hvaležen za pomoč

Mam tabelo v kateri so artikli in teže. Ko na formo vneseš težo ti jo vpiše v tabelo artiklov. Hkrati bi moralo isto težo odšteti od teže palete, ki se nahaja v drugi tabeli.

Torej..imam že napisano procedur update, ki ti odšteva težo vendar ne težo ki jo vneseš, vendar težo ki je že na paleti, tako da ti že po prvem vnosu vrne nič(ker pač sploh ne upošteva kar vneseš, vendar odštejete težo na paleti)

Procedure zgleda takole

CREATE PROCEDURE p_kovinska_paleta_siri_upd
@tiskalnik_id int,
@teza decimal,
@pr_teza int,
@pr_kosov int

/*WITH ENCRYPTION*/ AS

UPDATE kovinska_paleta_siri
SET pr_teza=pr_teza-@teza,pr_kosov=pr_kosov-1 /*POPRAVI - ne odšteva teže ki je vneseš. ampak težo na paleti*/
WHERE tiskalnik_id=@tiskalnik_id
GO

@teza je torej teza na paleti ki mi jo odšteje, moralo bi pa odšteti težo ki jo vnesem in se shrani v tabelo artiklov pod teza.

Že vnaprej se zahvajujem za pomoč

BigWhale ::

Prej bos moral se en select narediti...

@tmpteza = SELECT teza ... FROM ... artikli
UPDATE paleta SET teza = @tmpteza WHERE ...


Ali pa uporabiti subselect, ce je to mozno...

UPDATE paleta SET teza = (SELECT teza ... FROM ... artikli) WHERE ...

Tako priblizno...

greentech ::

Hvala

Pa še eno vprašanje imam.

Kako bi pa v isti procedurui napisal, da se bi teža prištela nazaj k skupni teži. Recimo da pritisneš na gumb "briši vnos", ki ti izbriše vnos iz tabele artikli in in ti prišteje težo ki si jo zbrisal k skupni teži na paleti.
Procedura bi morala torej delati obratno od prejšne procedure vendar bi to moralo biti napisano v isti proceduri.

destiny ::

Zakaj bi pa zadeva morala bit v isti proceduri?
Najlažje bi blo narest še eno procedurco!
Sicer je možno narest vse v eni z uporabo globalnih spremenljivk in case stavkov v proceduri ampak ne vidim smisla... (case stavki so možni, če uporabljaš ms sqlserver 2000, za ostale baze pa ne vem!)

BigWhale ::

Napisi se eno proceduro, ki to pocne... ;)

... sicer pa... zakaj sploh stored procedure? ;>

greentech ::

Zato ker je program ki ga pišem narejen tako da je vsa (oz večina) logike, ki se dogaja v ozadju napisan v sql procedureah, v kodi je implementirana samo povezava z bazo in uporabniški interface.

greentech ::

PA še eno vprašanje imam.

Napisal sem proceduro, ki mi briše podatke iz tabele artikli(to deluje pravilno), vendar mi od skupne teže na paleti odšteva težo ki sem jo vnesel najprej, ne pa tećo ki sem jo vnesel nazadnje, kot bi moralo.

Kako rešiti problem?

Še enkrat hvala!

BigWhale ::

Tole si pa zlo zlo abstraktno povedal...

ce delas kaj podobnega DELETE FROM artikel WHERE id = XXX

potem predtem naredi:

UPDATE paleta SET teza = teza - (SELECT teza FROM artikel WHERE ID=xxx) WHERE ...

Nekaj v tem stilu... nevem ce sva se razumela... :)

greentech ::

Aja- teže v tabeli artikli so shranjenje pod zaporedjem, ki določa na katerem mestu v tabeli so, tako kontroliramo tudi vrstni red brisanja.
Teže artiklov se brišejo tako, da se najprej izbriše tista teža, ki smo jo vnesli nazadnje. Isto bi se moralo zgoditi pri odštevanju od skuipne teže na paleti. Vendar se najprej izbriše teža ki je bila vnešena prva.

Hvala

destiny ::

A maš v tabeli podatek kdaj je bila vnešena zadnja teža (timestamp ali pa autoincrement id). Če tega nimaš, ti predlagam da v tabelo daš še eno polje (jest bi dodal datum, da veš kdaj se je zgodil vnos vrstice). Pol pa samo v where pogoju izbereš max(datum) oz. max(id)...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[ACCESS] Pomoč

Oddelek: Programiranje
81526 (1323) Stewie
»

SQL developer

Oddelek: Šola
81455 (1033) HotBurek
»

PostgreSQL pomoč

Oddelek: Programiranje
162367 (1860) Mato989
»

Baze ter relation med njimi

Oddelek: Programiranje
153062 (2623) Marat
»

T-SQL FIRST / TOP / MAX...

Oddelek: Programiranje
61427 (1427) frudi

Več podobnih tem