• 12 odgovora
  • 4.398 pregleda
uskladistene procedure (problem) 22.03.2011. u 10:19 · pre 189 meseci #1
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.
Re: uskladistene procedure (problem) 22.03.2011. u 13:48 · pre 189 meseci #2
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
Potpis
/*A sad odo` malo napolje*/
Re: uskladistene procedure (problem) 22.03.2011. u 14:31 · pre 189 meseci #3
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 ;


Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: uskladistene procedure (problem) 22.03.2011. u 14:58 · pre 189 meseci #4
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
Re: uskladistene procedure (problem) 22.03.2011. u 15:09 · pre 189 meseci #6
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
Re: uskladistene procedure (problem) 22.03.2011. u 15:18 · pre 189 meseci #7
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?
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: uskladistene procedure (problem) 22.03.2011. u 15:45 · pre 189 meseci #8
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.
Re: uskladistene procedure (problem) 22.03.2011. u 23:45 · pre 189 meseci #9
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;
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: uskladistene procedure (problem) 23.03.2011. u 17:52 · pre 189 meseci #10
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?
Re: uskladistene procedure (problem) 23.03.2011. u 21:30 · pre 189 meseci #12
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 :)
Re: uskladistene procedure (problem) 23.03.2011. u 22:17 · pre 189 meseci #13
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 ...
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme