[ biske86 @ 15.11.2010. 12:50 ] @
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?
[ bogdan.kecman @ 15.11.2010. 16:51 ] @
@X je varijabla
X je ime kolone
[ biske86 @ 16.11.2010. 17:03 ] @
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?
[ bogdan.kecman @ 16.11.2010. 18:29 ] @

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
[ biske86 @ 16.11.2010. 22:48 ] @
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:




[Ovu poruku je menjao biske86 dana 17.11.2010. u 00:02 GMT+1]
[ bogdan.kecman @ 16.11.2010. 22:56 ] @
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)


[ bogdan.kecman @ 16.11.2010. 22:57 ] @
aj ovako - koji ti je server sa druge strane? nesto mnogo cesto ti imas te blobove niodakle
[ biske86 @ 16.11.2010. 23:04 ] @
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.
[ biske86 @ 16.11.2010. 23:05 ] @
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.
[ biske86 @ 16.11.2010. 23:07 ] @
Server je 5.0.45.
[ bogdan.kecman @ 16.11.2010. 23:16 ] @
to je neki problem sa konektorom i prastarim bibliotekama od 5.0.xx ... 5.0.xx je unsuported vec godinu dana ... ajde bar predji na 5.1 ako vec neces da predjes na 5.5 ..
[ biske86 @ 17.11.2010. 00:10 ] @
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..
[ bogdan.kecman @ 17.11.2010. 04:59 ] @
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]
[ Shinhan @ 17.11.2010. 07:10 ] @
"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)
[ bogdan.kecman @ 17.11.2010. 07:35 ] @
group concat mislim da vraca binary flag i na 5.5 to valjda tako treba po standardu
[ biske86 @ 17.11.2010. 17:43 ] @
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?
[ bogdan.kecman @ 17.11.2010. 21:48 ] @
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!
[ biske86 @ 17.11.2010. 23:28 ] @
Isprobao sam preko php-a sve je u redu..
[ bogdan.kecman @ 17.11.2010. 23:52 ] @
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 ..