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

uskladistene procedure (problem)

[es] :: MySQL :: uskladistene procedure (problem)

[ Pregleda: 3398 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

danety
BG

Član broj: 52386
Poruke: 21
109.121.55.*



+3 Profil

icon uskladistene procedure (problem)22.03.2011. u 10:19 - pre 158 meseci
Pozdrav svima pokusavam da napravim poceduru za brisanje podataka znaci jako je jednostavna
DELETE FROM tabela1 WHERE kolona=vrednost;
medjutim u parametre procedure mogu jedino da stavim parametre za kolonu i vrednost ako pokusam da stavim parametar za tabela1 posto u toj bazi imam tri tabele hteo bi da mogu da pozovem proceduru ovako
CALL brisanje(tabela2,kolona4,vrednost5);
ali mi svaki put brlja nesto, tabelu2 trazi u kolonama...? umesto da samo prosledi vrednost na njeno mesto.. dobio sam savet da koristim naredbu prepare ali nikako ne mogu da nadjem nesto vise o njoj.. ako neko ima iskustvo u pravljenu procedura koje se odnose na vise tabela..
Hvala svima.
 
Odgovor na temu

mret
Radovan Bacovic
Senior Data Warehouse Developer
Kindred Group
Stockholm, Sweden

Član broj: 78386
Poruke: 62
...148.91.adsl.dyn.beotel.net.

Sajt: www.kindredgroup.com


Profil

icon Re: uskladistene procedure (problem)22.03.2011. u 13:48 - pre 158 meseci
Pogledaj na linku: http://dev.mysql.com/tech-reso...s/4.1/prepared-statements.html

da bi ti tabela bila ulazni parametar morasa da uradis prepraded statement tj. da generises string koji ce se izvrsiti.


ili (malko gluplje resenje) je da uradis sa CASE statementom.

http://dev.mysql.com/doc/refman/5.0/en/case-statement.html
/*A sad odo` malo napolje*/
 
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: uskladistene procedure (problem)22.03.2011. u 14:31 - pre 158 meseci
Code:

delimiter //
DROP PROCEDURE IF EXISTS kukuriku//
CREATE PROCEDURE colavg(IN tbl CHAR(64), IN col CHAR(64), IN val CHAR(64))
BEGIN
SET @q = CONCAT('DELETE FROM ' , tb; , ' WHERE ' , col, ' = ', val);
PREPARE stmt FROM @q;
EXECUTE stmt;
END;
//
delimiter ;



 
Odgovor na temu

danety
BG

Član broj: 52386
Poruke: 21
109.121.55.*



+3 Profil

icon Re: uskladistene procedure (problem)22.03.2011. u 14:58 - pre 158 meseci
Mozda sam ja glup pa nemogu da skontam kako to da uradim...
mysql> PREPARE stmt_name FROM "SELECT name FROM Country WHERE code = ?";
ali meni treba da se odabere tabela iz koje se brisu podatci nemogu ovako da uradim u proceduri
mysql> PREPARE stmt_name FROM "DELETE FROM ? WHERE kolona=vrednost";
mysql> SET @test_parm = "param1";
mysql> EXECUTE stmt_name USING @test_parm;
ovde je param1 jedan uziman iz procedure, i tako mi isto javi da mu je nepoznata kolona tamo gde sam stavio ime tabele u kojoj se vrsi brisanje... pokusavam da shvatim kako ovo radi nadam se da nisam previse naporan
 
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: uskladistene procedure (problem)22.03.2011. u 15:08 - pre 158 meseci
da li si probao prilozeni kod?
 
Odgovor na temu

danety
BG

Član broj: 52386
Poruke: 21
109.121.55.*



+3 Profil

icon Re: uskladistene procedure (problem)22.03.2011. u 15:09 - pre 158 meseci
Code:
DROP procedure if exists brisanjeOsoblja;
delimiter //
create PROCEDURE brisanjeOsoblja(IN tabela VARCHAR(45) , IN newvrednost VARCHAR(45))
BEGIN
SET @q = CONCAT('DELETE FROM ' , tabela , ' WHERE ' , ime, ' = ', newvrednost);
PREPARE stmt FROM @q;
EXECUTE stmt;
END//
delimiter ;


ovako je napravi ali isto nece da odradi posao trazi kolonu umesto tabele
 
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: uskladistene procedure (problem)22.03.2011. u 15:18 - pre 158 meseci
ajmo ispocetka:

Code:

mysql> CREATE PROCEDURE kukuriku(IN tbl CHAR(64), IN col CHAR(64), IN val CHAR(64))
    -> BEGIN
    -> SET @q = CONCAT('DELETE FROM ' , tbl , ' WHERE ' , col, ' = ', val);
    -> PREPARE stmt FROM @q;
    -> EXECUTE stmt;
    -> END;
    -> //
Query OK, 0 rows affected (0.07 sec)

mysql> delimiter ;       
mysql> select * from t1;
+----+----------+
| id | a        |
+----+----------+
|  1 | kukuriku | 
|  2 | test1    | 
|  3 | alfa123  | 
|  4 | 1234     | 
|  5 | 0123     | 
|  6 | 4345     | 
|  7 | 555abc   | 
|  8 | 123.12   | 
|  9 | abcdef   | 
| 10 | -1234    | 
| 11 | -1234.43 | 
| 12 | 0        | 
| 13 | 0        | 
| 14 | 0        | 
| 15 | 0        | 
+----+----------+
15 rows in set (0.00 sec)

mysql> call kukuriku("t1", "id", "7");
Query OK, 1 row affected (0.00 sec)

mysql> call kukuriku("t1", "a", "'kukuriku'");
Query OK, 1 row affected (0.00 sec)

mysql> select * from t1;
+----+----------+
| id | a        |
+----+----------+
|  2 | test1    | 
|  3 | alfa123  | 
|  4 | 1234     | 
|  5 | 0123     | 
|  6 | 4345     | 
|  8 | 123.12   | 
|  9 | abcdef   | 
| 10 | -1234    | 
| 11 | -1234.43 | 
| 12 | 0        | 
| 13 | 0        | 
| 14 | 0        | 
| 15 | 0        | 
+----+----------+
13 rows in set (0.00 sec)



zar nisi to hteo?

 
Odgovor na temu

danety
BG

Član broj: 52386
Poruke: 21
109.121.55.*



+3 Profil

icon Re: uskladistene procedure (problem)22.03.2011. u 15:45 - pre 158 meseci
Hvala mnogo :)
ovo funkcionise medjutim pravilo mi je gresku jer sam uporno upisivao table umesto tbl...
uglavnom sam ja uhvatio nit.
Nadam se da cu se jednom oduziti :) hvala jos jednom.
 
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: uskladistene procedure (problem)22.03.2011. u 23:45 - pre 158 meseci
table je zasticena rec .... ima dobra fora, koristis srpske izraze za varijable i skoro si uvek siguran :D

Code:

CREATE PROCEDURE kukuriku(IN tabela CHAR(64), IN kolona CHAR(64), IN vrednost CHAR(64))
BEGIN
SET @q = CONCAT('DELETE FROM ' , tabela , ' WHERE ' , kolona, ' = ', vrednost);
PREPARE stmt FROM @q;
EXECUTE stmt;
END;

 
Odgovor na temu

danety
BG

Član broj: 52386
Poruke: 21
109.121.55.*



+3 Profil

icon Re: uskladistene procedure (problem)23.03.2011. u 17:52 - pre 158 meseci
Sada sam naucio a stalno sam mislio da je to losa praksa ...
Da li ima veze sto sam ja stavljao VARCHAR(45) umesto CHAR(64), jel moze to da izaziva problem?
 
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: uskladistene procedure (problem)23.03.2011. u 19:09 - pre 158 meseci
da li je bolje trcati uz stepenice ili plivati uzvodno?

zavisi sta hoces da postignes, char() je dobar ako hoces da imas fiksnu duzinu sloga, varchar() cuva prostor (i na disku i u ramu)
 
Odgovor na temu

danety
BG

Član broj: 52386
Poruke: 21
109.121.55.*



+3 Profil

icon Re: uskladistene procedure (problem)23.03.2011. u 21:30 - pre 158 meseci
Pomislio sam da mozda tu imaju pravila za nazive tabela... ja jesam pretpostavio da nece praviti problem ali opet bolje da pitam dok sam na pravom mestu :)
 
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: uskladistene procedure (problem)23.03.2011. u 22:17 - pre 158 meseci
klljucne reci postoje, doduse mysql moze da koristi i kljucne reci za imena ali mora da se stave u `` (backtick) .. dakle ovo je ok


create table `table` (`int` int, `char` char(10));

nije bas ni pametno ni zgodno ni korisno ali ...
 
Odgovor na temu

[es] :: MySQL :: uskladistene procedure (problem)

[ Pregleda: 3398 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

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