Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Poziv procedure - razlika između @status i status

  • 18 odgovora
  • 4.211 pregleda

Najnovija ↓

Poziv procedure - razlika između @status i status 15.11.2010. u 13:50 · pre 194 meseca #1
Code (sql):
-- --------------------------------------------------------------------------------
-- Routine DDL
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`pravni`@`localhost` PROCEDURE `SP_NASTAVNIK_FUNKCIJA_INSERT`(OUT p_status INT, OUT p_poruka VARCHAR(255), IN p_NastavnikID INT, IN p_NazivFunkcije VARCHAR(30), IN p_DatumIzboraNaFunkciju DATE, IN p_DatumOd DATE, IN p_DatumDo DATE)
BEGIN
    DECLARE v_FunkcijaID INT;
    DECLARE exit handler FOR sqlexception
    BEGIN
        ROLLBACK;
        SET p_poruka='Greška! Unos podataka nije izvršen.';
        SET p_status=0;
    END;
    SET names utf8;
    SET v_FunkcijaID=F_GET_FUNKCIJA_ID(p_NazivFunkcije);
    SET autocommit=0;
    START TRANSACTION;
    INSERT INTO NASTAVNIK_FUNKCIJA(NastavnikID, FunkcijaID, DatumIzboraNaFunkciju, DatumOd, DatumDo) VALUES (p_NastavnikID, v_FunkcijaID, p_DatumIzboraNaFunkciju, p_DatumOd, p_DatumDo);
    commit;
    SET p_poruka='Unos podataka je uspešno izvršen!';
    SET p_status=1;

END
 


Imam i jednu proceduru kojom pozivam ovu proceduru (radi testiranja):

Code (sql):
-- --------------------------------------------------------------------------------
-- Routine DDL
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`%` PROCEDURE `new_routine`()
BEGIN
CALL sluzba.SP_NASTAVNIK_FUNKCIJA_INSERT(@p_status, @p_poruka, 179, 'Šef katedre', '2010-11-1', '2010-11-1', '2010-11-14');
SELECT @p_status, @p_poruka;

END
 


E sad kad ovako pozovem pojavim mi se poruka p_status - blob i p_poruka - ?, 'Greška! Unos podataka nije izvršen.'


Ako izmenim ovu prethodnu proceduru u:
Code (sql):
-- --------------------------------------------------------------------------------
-- Routine DDL
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`%` PROCEDURE `new_routine`()
BEGIN
DECLARE p_status INT;
DECLARE p_poruka VARCHAR(255);
CALL sluzba.SP_NASTAVNIK_FUNKCIJA_INSERT(p_status, p_poruka, 179, 'Šef katedre', '2010-11-1', '2010-11-1', '2010-11-14');
SELECT p_status, p_poruka;

END
 

Onda mi se lepo ispisuje p_status - 0 i p_poruka - ?, 'Greška! Unos podataka nije izvršen.'


Primećujete da je razlika što u prvom pozivu mi je p_status-blob a u drugom p_status - 0.


U čemu je fora sa ovim znakom @ ispred?
Potpis
http://biske.rs
Re: Poziv procedure - razlika između @status i status 16.11.2010. u 18:03 · pre 194 meseca #3
Ja sam mislio da su mi svi parametri u proceduri neke promenljive. Ne razumem ovo što kažeš da je X u stvari kolona u tabeli.
Najviše me buni što mi u slučaju kada pozivam sa:
select @p_status, umesto 0 ili 1 vraća BLOB. U čemu može da bude problem?
Potpis
http://biske.rs
Re: Poziv procedure - razlika između @status i status 16.11.2010. u 19:29 · pre 194 meseca #4

Citat:

Code:

...
call sluzba.SP_NASTAVNIK_FUNKCIJA_INSERT(@p_status, @p_poruka, 179, 'Šef katedre', '2010-11-1', '2010-11-1', '2010-11-14');
select @p_status, @p_poruka;
...



ovde je @p_status i @p_poruka user defined variable. Te varijable su "connection specific" (dakle dele se unutar jedne konekcije)

Citat:

Code:

...
declare p_status int;
declare p_poruka varchar(255);
call sluzba.SP_NASTAVNIK_FUNKCIJA_INSERT(p_status, p_poruka, 179, 'Šef katedre', '2010-11-1', '2010-11-1', '2010-11-14');
select p_status, p_poruka;
...



ovde su p_stats i p_poruka deklarisani kao varijable u stored proceduri (postoje samo unutar stored procedure i ne van nje)

@p_status ce postojati i kada izadjes iz procedure
p_status nece
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: Poziv procedure - razlika između @status i status 16.11.2010. u 23:48 · pre 194 meseca
izmenjeno 1 put, poslednji put biske86 17.11.2010. u 00:02
  1. biske8617.11.2010. u 00:02zapis iz teksta poruke
#5
Ne znam u čemu je caka, kad probam preko vorkbenča prvi primer sa linka koji si mi dao:
SET @t1=1, @t2=2, @t3:=4;
SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3;

dobijam sledeće:




A kada ukucam u komand promptu, dobijam sledeće:

Potpis
http://biske.rs
Re: Poziv procedure - razlika između @status i status 16.11.2010. u 23:56 · pre 194 meseca #6
Code:

mysql> SET @t1=1, @t2=2, @t3:=4;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3;
+------+------+------+--------------------+
| @t1  | @t2  | @t3  | @t4 := @t1+@t2+@t3 |
+------+------+------+--------------------+
|    1 |    2 |    4 |                  7 | 
+------+------+------+--------------------+
1 row in set (0.00 sec)


Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: Poziv procedure - razlika između @status i status 17.11.2010. u 00:04 · pre 194 meseca #8
Znači problem mi je što u ovom primeru sa linka koji si mi dao iz nekog razloga workbench ne prikazuje 1, 2, 4 već BLOB.

Kada sam uradio CAST(@varijabla AS UNSIGNED) onda vraća vrednost kao što bi i trebalo.
Potpis
http://biske.rs
Re: Poziv procedure - razlika između @status i status 17.11.2010. u 00:05 · pre 194 meseca #9
Znači problem mi je što u ovom primeru sa linka koji si mi dao iz nekog razloga workbench ne prikazuje 1, 2, 4 već BLOB.

Kada sam uradio CAST(@varijabla AS UNSIGNED) onda vraća vrednost kao što bi i trebalo.
Potpis
http://biske.rs
Re: Poziv procedure - razlika između @status i status 17.11.2010. u 01:10 · pre 194 meseca #12
Prešao bi ja na 5.5 ali ne zavisi od mene, ja sam samo developer u ovom projektu. Probaću da izvršim pritisak administratora da vidi nešto po tom pitanju..
Mislim ako će da mi reši problem sigurno ćemo preći..
Potpis
http://biske.rs
Re: Poziv procedure - razlika između @status i status 17.11.2010. u 05:59 · pre 194 meseca #13
http://www.mysql.com/about/legal/lifecycle/

5.0 GA: 2005-10-24 Active support ends: 2009-12-31

nemam nigde ovde 5.0 da probam .. generalno ne bi smeo da imas taj problem koji imas, iz nekog razloga WB vidi rezultat tih varijabli kao blob ... da li si probao heidisql ili neki drugi klijent?

EDIT: Evo sada sam overio, to je jos jedan od mnogih bagova na 5.0, server za taj select vraca BINARY fleg za prva tri rezultata i zato ti WB prikazuje da je to blob.


Code:

$ bin/mysql -uroot --column-type-info test

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.92-debug Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SET @t1=1, @t2=2, @t3:=4; SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3;
Query OK, 0 rows affected (0.00 sec)

Field   1:  `@t1`
Catalog:    `def`
Database:   ``
Table:      ``
Org_table:  ``
Type:       VAR_STRING
Collation:  binary (63)
Length:     20
Max_length: 1
Decimals:   0
Flags:      BINARY 

Field   2:  `@t2`
Catalog:    `def`
Database:   ``
Table:      ``
Org_table:  ``
Type:       VAR_STRING
Collation:  binary (63)
Length:     20
Max_length: 1
Decimals:   0
Flags:      BINARY 

Field   3:  `@t3`
Catalog:    `def`
Database:   ``
Table:      ``
Org_table:  ``
Type:       VAR_STRING
Collation:  binary (63)
Length:     20
Max_length: 1
Decimals:   0
Flags:      BINARY 

Field   4:  `@t4 := @t1+@t2+@t3`
Catalog:    `def`
Database:   ``
Table:      ``
Org_table:  ``
Type:       LONGLONG
Collation:  binary (63)
Length:     22
Max_length: 1
Decimals:   0
Flags:      BINARY NUM 


+------+------+------+--------------------+
| @t1  | @t2  | @t3  | @t4 := @t1+@t2+@t3 |
+------+------+------+--------------------+
| 1    | 2    | 4    |                  7 | 
+------+------+------+--------------------+
1 row in set (0.01 sec)


Kao sto vidis, greska je do 5.0 (bug za koji niko vise ne brine posto je jeli 5.0 odavno zaboravljen).

inace, u WB-u
SQL Editor tab, Treat BINARY/VARBINARY as nonbinary character string - cekiras ovo i bas te briga



[Ovu poruku je menjao bogdan.kecman dana 17.11.2010. u 06:12 GMT+1]
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: Poziv procedure - razlika između @status i status 17.11.2010. u 08:10 · pre 194 meseca #14
"inace, u WB-u
SQL Editor tab, Treat BINARY/VARBINARY as nonbinary character string - cekiras ovo i bas te briga"

YAY, thanks for the tip :)

Mene uvek nerviralo kad dobijem BLOB, obično za group_concat rezultate, sad znam kako da to isključim :3

(Server nam je 5.1)
Potpis
"Common sense is not so common." - Voltaire
Re: Poziv procedure - razlika između @status i status 17.11.2010. u 18:43 · pre 194 meseca #16
U HeidiSQL mi vraća ispravno, kako bi i trebalo. Meni ovde workbench i ne igra ulogu, meni je najbitnije šta vraća PHP-u u aplikaciji. Problem mi je što u aplikaciji proveravam da li je status 0 ili 1 i izbacujem poruku o grešci. Međutim podaci se ili upišu u tabelu ili ne upišu a poruka mi se ne javlja. Probaću da pozovem ovu proceduru iz obične php skripte pa ću da javim šta nije u redu. Inače da li je ono što mi se pojavljuje u mysql programu u stvari ono što dobija i php ili ipak moram da proverim preko php-a dikektno?
Potpis
http://biske.rs
Re: Poziv procedure - razlika između @status i status 17.11.2010. u 22:48 · pre 194 meseca #17
heidi izgleda po defaultu ima ono da varbinary tretira kao txt ... ali svejedno da li je binary flag tu ili ne, ti iz php-a vidis da li je unutra 1 ili 0 potpuno je nebitno da li je polje markirano kao binarno ili ne ... tako da nemas problem

doduse, ako odradite upgrade na 5.5 imas signal i resignal pa ne moras da izvodis kerefeke kao sto ovde moras u 5.0 i 5.1 ... no .. to je druga prica ..

javi ako te zeza iz php-a - ne bi smelo!
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: Poziv procedure - razlika između @status i status 18.11.2010. u 00:52 · pre 194 meseca #19
ma da, php ne tangira 2% binary bit .. kao ni vecina klijenata .. WB se "pravi pametan" pa ga cita (hvala bogu moze da se iskljuci ta "pamet") ... generalno je setovanje binarnog bita za @x pogresno i ispravljeno je kasnije .. no u 5.0 je tako kako je ..

Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme