<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SQL za početnike &#187; SQL</title>
	<atom:link href="http://www.savjetovanje.net/category/sql/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.savjetovanje.net</link>
	<description></description>
	<lastBuildDate>Mon, 26 Oct 2009 16:06:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SQL baza podataka za videoteku</title>
		<link>http://www.savjetovanje.net/sql-baza-podataka-za-videoteku/</link>
		<comments>http://www.savjetovanje.net/sql-baza-podataka-za-videoteku/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 10:16:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.savjetovanje.net/?p=177</guid>
		<description><![CDATA[Dosta tečajeva koji obrađuju problematiku baza uzima kao glavni zadatak poslovanje videoteke. Iz tog razloga će se ovdje probati riješiti takav &#8220;problem&#8221;.
Što sve osnovno treba imati takva baza?

evidencija članova
evidencija objekata posudbe &#8211; nosača zapisa
evidencija posudbi i povrata objekata

Koje podatke člana  treba zapisati?

ime i prezime
adresa
grad (videoteka je lokalnog karaktera i teško da će netko iz [...]]]></description>
			<content:encoded><![CDATA[<p>Dosta tečajeva koji obrađuju problematiku baza uzima kao glavni zadatak poslovanje videoteke. Iz tog razloga će se ovdje probati riješiti takav &#8220;problem&#8221;.</p>
<p><strong>Što sve osnovno treba imati takva baza?</strong></p>
<ul>
<li>evidencija članova</li>
<li>evidencija objekata posudbe &#8211; nosača zapisa</li>
<li>evidencija posudbi i povrata objekata</li>
</ul>
<p><strong>Koje podatke člana  treba zapisati?</strong></p>
<ul>
<li>ime i prezime</li>
<li>adresa</li>
<li>grad (videoteka je lokalnog karaktera i teško da će netko iz drugog grada doći posuditi kazetu)</li>
<li>datum rođenja</li>
<li>broj telefona fiksni i mobilni</li>
<li>e-mail adresa</li>
<li>porezni broj</li>
<li>datum učlanjenja</li>
<li>datum prestanka članstva</li>
</ul>
<p><strong>Koje podatke kazeta odnosno objekta posudbe treba zapisati?</strong></p>
<ul>
<li>naziv filma &#8211; na lokalnom jeziku, u našem slučaju na hrvatskom<strong><br />
</strong></li>
<li>naslov originala</li>
<li>godina izdanja</li>
<li>žanr</li>
<li>podžanr &#8211; npr. akcijske komedije, horror komedije i sl.</li>
<li>medij &#8211; DVD, BlueRay, VHS,&#8230;</li>
<li>datum kada je neki medij došao u videoteku</li>
<li>redatelj(i)</li>
<li>glumci &#8211; glavni muški, ženski i nekoliko značajnijih sporednih</li>
</ul>
<p>Ovdje ću ostaviti mogućnost dopune jer program se uvijek može proširiti u smjeru koji niti nakon pomnog planiranja nije planiran.</p>
<p><strong>Prva skica tablica</strong></p>
<p><strong>MP_CLAN</strong> &#8211; član videoteke</p>
<ul>
<li>CLAN INT</li>
<li>IME  VARCHAR(60)</li>
<li>PREZIME VARCHAR(60)</li>
<li>ADRESA VARCHAR(120)</li>
<li>GRAD CHAR(10)</li>
<li> DATUM_RODJENJA DATETIME</li>
<li>TELEFON1 VARCHAR(60)</li>
<li>TELEFON2 VARCHAR(60)</li>
<li>POREZNI_BROJ VARCHAR(60)</li>
<li>DATUM_UCLANJENJA DATETIME</li>
<li>DATUM_PRESTANKA_CLANSTVA DATETIME</li>
</ul>
<p><strong>MP_GRAD</strong></p>
<ul>
<li>GRAD CHAR(10)</li>
<li>NAZIV VARCHAR(120)</li>
<li>DRZAVA CHAR(3)</li>
</ul>
<p><strong>MP_DRZAVA</strong></p>
<ul>
<li>DRZAVA CHAR(3)</li>
<li>NAZIV VARCHAR(120)</li>
<li>NAZIV_EN VARCHAR(120)</li>
<li>VALUTA CHAR(3)</li>
</ul>
<p><strong>MP_VALUTA</strong></p>
<ul>
<li>VALUTA CHAR(3)</li>
<li>NAZIV VARCHAR(60)</li>
<li>OZNAKA CHAR(3)</li>
</ul>
<p>Kazete odnosno objekte posudbe treba rasšlaniti na podatke koji se odnose na sami film kao takav i na podatke koji se odnose na medij.</p>
<p>Recimo da ćemo nepromjenjive podatke zapisivati u tablicu</p>
<p><strong>VD_NASLOV</strong></p>
<ul>
<li>NASLOV INT</li>
<li>NAZIV VARCHAR(120)</li>
<li>NAZIV_EN VARCHAR(120)</li>
<li>ZANR INT</li>
<li>GODINA_IZDANJA INT</li>
</ul>
<p>Žanrove moramo spremiti u posebnu tablicu</p>
<p><strong>MP_ZANR</strong></p>
<ul>
<li>ZANR INT</li>
<li>NAZIV VARCHAR(60)</li>
</ul>
<p>Ostaju nam osobe vezane uz film &#8211; redatelji, glumci, scenaristi,&#8230;</p>
<p><strong>VD_OSOBA</strong></p>
<ul>
<li>OSOBA INT</li>
<li>NAZIV VARCHAR(120)</li>
<li>NAZIV_EN VARCHAR(120)</li>
</ul>
<p>Kako se jedna osoba u istom filmu može pojaviti na više funkcija (npr. Clint Eastwood kao redatelj i glumac), potrebno je imati i tablicu za to (1 redatelj, 2 scenarist, 3 glavna uloga, 4 sporedna uloga, 5 producent,&#8230;)</p>
<p><strong>VD_OSOBA_TIP</strong></p>
<ul>
<li>OSOBA_TIP INT</li>
<li>NAZIV VARCHAR(60)</li>
</ul>
<p>Sve to je potrebno kako bi se definirala tablica u koju ćemo moći povezati sve osobe bitne za taj film.</p>
<p><strong>VD_NASLOV_OSOBA</strong></p>
<ul>
<li>NASLOV INT</li>
<li>OSOBA INT</li>
<li>OSOBA_TIP INT</li>
</ul>
<p>&#8230; nastavak slijedi &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.savjetovanje.net/sql-baza-podataka-za-videoteku/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zapis u tablicu s automatskim generiranjem šifre</title>
		<link>http://www.savjetovanje.net/zapis-u-tablicu-s-automatskim-generiranjem-sifre/</link>
		<comments>http://www.savjetovanje.net/zapis-u-tablicu-s-automatskim-generiranjem-sifre/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 09:55:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.savjetovanje.net/?p=173</guid>
		<description><![CDATA[Podaci tablice MP_MJERA će sadržavati podatke koji imaju šifru u slijedu, npr: 1 komad, 2 kilogram, 3 metar,&#8230;


CREATE PROCEDURE dbo.mp_mjera_insert
 @mjera            INT,
 @naziv            VARCHAR(60),
 @oznaka            VARCHAR(5),
 @out_mjera        INT        OUT
AS
SET NOCOUNT ON

DECLARE    @err    INT,
 @pomerr    INT,
 @ima    INT

SET @err = -1

SET @pomerr = 1
EXEC @pomerr = dbo.mp_mjera_exists
 @mjera   [...]]]></description>
			<content:encoded><![CDATA[<p>Podaci tablice MP_MJERA će sadržavati podatke koji imaju šifru u slijedu, npr: 1 komad, 2 kilogram, 3 metar,&#8230;</p>
<pre class="brush: sql;">

CREATE PROCEDURE dbo.mp_mjera_insert
 @mjera            INT,
 @naziv            VARCHAR(60),
 @oznaka            VARCHAR(5),
 @out_mjera        INT        OUT
AS
SET NOCOUNT ON

DECLARE    @err    INT,
 @pomerr    INT,
 @ima    INT

SET @err = -1

SET @pomerr = 1
EXEC @pomerr = dbo.mp_mjera_exists
 @mjera        = @mjera,
 @out_ima    = @ima        OUT
SET @err = @err + CASE @pomerr WHEN -1 THEN 0 ELSE 1 END

IF @ima = 0
 BEGIN
 IF @mjera = 0
 BEGIN
 SELECT    @mjera    = MAX(MJERA)
 FROM    MP_MJERA
 SET @err = @err + @@ERROR

 SET @mjera = ISNULL(@mjera, 0) + 1
 END

 INSERT    INTO    MP_MJERA (
 MJERA,
 NAZIV,
 OZNAKA)
 VALUES     (
 @mjera,
 @naziv,
 @oznaka)
 SET @err = @err + @@ERROR
 END
ELSE
 BEGIN
 UPDATE    MP_MJERA
 SET    NAZIV        = @naziv,
 OZNAKA        = @oznaka
 WHERE    MJERA        = @mjera
 SET @err = @err + @@ERROR
 END

SET @out_mjera    = @mjera

RETURN @err
GO
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.savjetovanje.net/zapis-u-tablicu-s-automatskim-generiranjem-sifre/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tablica s automatskom šifrom, mjerne jedinice, MP_MJERA</title>
		<link>http://www.savjetovanje.net/tablica-s-automatskom-sifrom-mjerne-jedinice-mp_mjera/</link>
		<comments>http://www.savjetovanje.net/tablica-s-automatskom-sifrom-mjerne-jedinice-mp_mjera/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 09:28:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.savjetovanje.net/?p=150</guid>
		<description><![CDATA[U tablici MP_MJERA se nalaze mjerne jedinice kao npr. komad, kilogram, pakiranje, metar, sat i sl.
Šifre mjernih jedinica nisu zadane te će se ovdje pokazati kako zapisivati takve podatke.


CREATE TABLE [dbo].[MP_MJERA] (
 [MJERA] [int] NOT NULL ,
 [NAZIV] [varchar] (60) COLLATE Croatian_CI_AS NOT NULL ,
 [OZNAKA] [varchar] (5) COLLATE Croatian_CI_AS NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [...]]]></description>
			<content:encoded><![CDATA[<p>U tablici MP_MJERA se nalaze mjerne jedinice kao npr. komad, kilogram, pakiranje, metar, sat i sl.</p>
<p>Šifre mjernih jedinica nisu zadane te će se ovdje pokazati kako zapisivati takve podatke.</p>
<pre class="brush: sql;">

CREATE TABLE [dbo].[MP_MJERA] (
 [MJERA] [int] NOT NULL ,
 [NAZIV] [varchar] (60) COLLATE Croatian_CI_AS NOT NULL ,
 [OZNAKA] [varchar] (5) COLLATE Croatian_CI_AS NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[MP_MJERA] ADD
 CONSTRAINT [PK_MP_MJERA] PRIMARY KEY  CLUSTERED
 (
 [MJERA]
 )  ON [PRIMARY]
GO
</pre>
<p>..</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.savjetovanje.net/tablica-s-automatskom-sifrom-mjerne-jedinice-mp_mjera/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kako provjeriti postojanje sloga na drugi način</title>
		<link>http://www.savjetovanje.net/kako-provjeriti-postojanje-sloga-na-drugi-nacin/</link>
		<comments>http://www.savjetovanje.net/kako-provjeriti-postojanje-sloga-na-drugi-nacin/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 08:43:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.savjetovanje.net/?p=142</guid>
		<description><![CDATA[U proceduri mp_valuta_exists je bio ovaj dio koda:


SELECT    @out_ima    = COUNT(VALUTA)
 FROM    MP_VALUTA
 WHERE    VALUTA    = @valuta
SET @err = @err + @@ERROR

Dva načina za koji kažu da su bolji od ovo gore navedenog su:
1. Koristi se EXISTS za provjeru


IF EXISTS (SELECT VALUTA FROM MP_VALUTA WHERE VALUTA = @valuta)
 BEGIN
 SET @err = @err + @@ERROR
 [...]]]></description>
			<content:encoded><![CDATA[<p>U proceduri mp_valuta_exists je bio ovaj dio koda:</p>
<pre class="brush: sql;">

SELECT    @out_ima    = COUNT(VALUTA)
 FROM    MP_VALUTA
 WHERE    VALUTA    = @valuta
SET @err = @err + @@ERROR
</pre>
<p>Dva načina za koji kažu da su bolji od ovo gore navedenog su:</p>
<p>1. Koristi se EXISTS za provjeru</p>
<pre class="brush: sql;">

IF EXISTS (SELECT VALUTA FROM MP_VALUTA WHERE VALUTA = @valuta)
 BEGIN
 SET @err = @err + @@ERROR
 SET @out_ima = 1
 END
</pre>
<p>2. Koristi se varijabla koja vraća broj zahvaćenih slogova, @@ROWCOUNT. Pomoćna varijabla @pom se koristi za prihvat podatka šifre varijable.</p>
<pre class="brush: sql;">

SELECT    @pom = VALUTA
 FROM    MP_VALUTA
 WHERE    VALUTA    = @valuta
SET @err = @err + @@ERROR
SET @out_ima = @@ROWCOUNT
</pre>
<p>Kako se radi o provjeri primarnog ključa, uvijek će broj vraćenih slogova biti 0 ili 1.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.savjetovanje.net/kako-provjeriti-postojanje-sloga-na-drugi-nacin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Procedura za selektiranje podataka, SELECT</title>
		<link>http://www.savjetovanje.net/procedura-za-selektiranje-podataka-select/</link>
		<comments>http://www.savjetovanje.net/procedura-za-selektiranje-podataka-select/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 08:23:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.savjetovanje.net/?p=135</guid>
		<description><![CDATA[U ovoj proceduri nema pozivanja neke deuge procedure niti nema provjera. Vrlo je jednostavna, vraća podatke za traženu šifru valute.


CREATE PROCEDURE dbo.mp_valuta_select
 @valuta        CHAR(3),
 @naziv        VARCHAR(60)    = ''    OUT,
 @oznaka        CHAR(3)        = ''    OUT
AS
SET NOCOUNT ON

DECLARE    @err    INT
SET @err = -1

SELECT    @naziv        = NAZIV,
 @oznaka        = OZNAKA
 FROM    MP_VALUTA
 [...]]]></description>
			<content:encoded><![CDATA[<p>U ovoj proceduri nema pozivanja neke deuge procedure niti nema provjera. Vrlo je jednostavna, vraća podatke za traženu šifru valute.</p>
<pre class="brush: sql;">

CREATE PROCEDURE dbo.mp_valuta_select
 @valuta        CHAR(3),
 @naziv        VARCHAR(60)    = ''    OUT,
 @oznaka        CHAR(3)        = ''    OUT
AS
SET NOCOUNT ON

DECLARE    @err    INT
SET @err = -1

SELECT    @naziv        = NAZIV,
 @oznaka        = OZNAKA
 FROM    MP_VALUTA
 WHERE    VALUTA    = @valuta
SET @err = @err + @@ERROR

RETURN @err
GO
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.savjetovanje.net/procedura-za-selektiranje-podataka-select/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Razlike između COUNT(*), COUNT(field) i COUNT(const)</title>
		<link>http://www.savjetovanje.net/razlike-izmedu-count-countfield-i-countconst/</link>
		<comments>http://www.savjetovanje.net/razlike-izmedu-count-countfield-i-countconst/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 09:44:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.savjetovanje.net/?p=96</guid>
		<description><![CDATA[Jedan sažetak nakon rasprave na news grupi:
COUNT(*) 
De facto standard za brojanje svih redaka u tablici.
COUNT(field) npr. COUNT(VALUTA)
Vraća broj redaka u tablici za koje polje field nema vrijednost NULL. Za polje koje je NOT  NULL vraća  broj redaka u tablici.
COUNT(const) npr. COUNT(1)
Uvijek vraća broj redaka u tablici.
]]></description>
			<content:encoded><![CDATA[<p>Jedan sažetak nakon rasprave na news grupi:</p>
<p><strong>COUNT(*) </strong></p>
<p>De facto standard za brojanje svih redaka u tablici.</p>
<p><strong>COUNT(field) </strong>npr. COUNT(VALUTA)</p>
<p>Vraća broj redaka u tablici za koje polje <strong>field</strong> nema vrijednost <strong>NULL</strong>. Za polje koje je NOT  NULL vraća  broj redaka u tablici.</p>
<p><strong>COUNT(const) </strong>npr. COUNT(1)</p>
<p>Uvijek vraća broj redaka u tablici.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.savjetovanje.net/razlike-izmedu-count-countfield-i-countconst/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zapis podataka u tablicu pomoću stored procedure</title>
		<link>http://www.savjetovanje.net/zapis-podataka-u-tablicu-pomocu-stored-procedure/</link>
		<comments>http://www.savjetovanje.net/zapis-podataka-u-tablicu-pomocu-stored-procedure/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 16:05:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.savjetovanje.net/?p=74</guid>
		<description><![CDATA[Ova procedura ima dvojaku ulogu, zapisuje slog ukoliko se radi o novom zapisu i radi izmjenu sloga ako se radi o postojećem zapisu.
Zadatak procedure za zapis i iumjenu  u našoj tablici MP_VALUTA je

prihvat svih podataka potrebnih za zapis u tablicu
provjera postojanja primarnog ključu pomoću procedure mp_valuta_exists
ako je novi slog radi se INSERT, za postojeći [...]]]></description>
			<content:encoded><![CDATA[<p>Ova procedura ima dvojaku ulogu, zapisuje slog ukoliko se radi o novom zapisu i radi izmjenu sloga ako se radi o postojećem zapisu.</p>
<p>Zadatak procedure za zapis i iumjenu  u našoj tablici MP_VALUTA je</p>
<ul>
<li>prihvat svih podataka potrebnih za zapis u tablicu</li>
<li>provjera postojanja primarnog ključu pomoću procedure <strong>mp_valuta_exists</strong></li>
<li>ako je novi slog radi se <strong>INSERT</strong>, za postojeći slog se radi <strong>UPDATE</strong></li>
<li>u pomoćnu varijablu zapisati upješnost izvršenja radnje</li>
</ul>
<p>Evo kako bi ta procedura izgledala:</p>
<pre class="brush: sql;">

CREATE PROCEDURE dbo.mp_valuta_insert
 @valuta        CHAR(3),
 @naziv        VARCHAR(60)    = '',
 @oznaka        CHAR(3)        = '',
 @insert        TINYINT,
 @postoji    TINYINT        OUT
AS
SET NOCOUNT ON

DECLARE @ima        INT,
 @err        INT,
 @pomerr        INT

SET @err = -1

SET @pomerr = 1
EXEC @pomerr = dbo.mp_valuta_exists
 @valuta        = @valuta,
 @out_ima    = @ima        OUT
SET @err = @err + CASE @pomerr WHEN -1 THEN 0 ELSE 1 END
SET @postoji = 0

IF @ima = 0
 BEGIN
 INSERT    INTO    MP_VALUTA (
 VALUTA,
 NAZIV,
 OZNAKA)
 VALUES    (
 @valuta,
 @naziv,
 @oznaka)
 SET @err = @err + @@ERROR
 END
ELSE
 IF @insert = 0
 BEGIN
 UPDATE    MP_VALUTA
 SET    NAZIV        = @naziv,
 OZNAKA        = @oznaka
 WHERE    VALUTA        = @valuta
 SET @err = @err + @@ERROR
 END
 ELSE
 SET @postoji = 1

RETURN @err
GO
</pre>
<p>Prihvaćaju se podaci u varijable</p>
<pre class="brush: sql;">
 @valuta        CHAR(3),
 @naziv        VARCHAR(60)    = '',
 @oznaka        CHAR(3)        = '',
 @insert        TINYINT,
</pre>
<p>rade se deklaracije pomoćnih varijabli, poziva se procedura <strong>mp_valuta_exists </strong>koja vraća<strong> @ima = 1 </strong>ako postoji slog sa istom šifrom valute odnosno<strong> @ima = 0 </strong>ako<strong> </strong>šifre nema.</p>
<p>Ako šifre nema, radi se INSERT podataka, a ako šifra postoji radi se UPDATE ukoliko smo to željeli (<strong>@insert = 0</strong>). Ako smo željeli zapisati novi slog (<strong>@insert = 1</strong>), a šifra valute je već zapisana, output varijabla @postoji će biti postavljena na 1 i neće se izvršiti niti INSERT niti UPDATE.</p>
<p><strong><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.savjetovanje.net/zapis-podataka-u-tablicu-pomocu-stored-procedure/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Procedura za provjeru postoji li slog istog primarnog ključa</title>
		<link>http://www.savjetovanje.net/procedura-za-provjeru-postoji-li-slog-istog-primarnog-kljuca/</link>
		<comments>http://www.savjetovanje.net/procedura-za-provjeru-postoji-li-slog-istog-primarnog-kljuca/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 08:07:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[COUNT]]></category>
		<category><![CDATA[SELECT]]></category>
		<category><![CDATA[stored procedure]]></category>

		<guid isPermaLink="false">http://www.savjetovanje.net/?p=64</guid>
		<description><![CDATA[Procedura za provjeru postojanja sloga s istim primarnim ključem koristi se kod zapisa odnosno izmjene podataka. Koristi se  output varijabla kao rezultat pretrage.
Zadatak procedure za provjeru postojanja sloga  u našoj tablici MP_VALUTA je

prihvat podataka šifre valute koju želimo provjeriti
provjera postojanja sloga običnim preborjavanjem slogoca (COUNT)
rezultat prebrojavanja se sprema u output varijablu
u pomoćnu varijablu [...]]]></description>
			<content:encoded><![CDATA[<p>Procedura za provjeru postojanja sloga s istim primarnim ključem koristi se kod zapisa odnosno izmjene podataka. Koristi se  output varijabla kao rezultat pretrage.</p>
<p>Zadatak procedure za provjeru postojanja sloga  u našoj tablici MP_VALUTA je</p>
<ul>
<li>prihvat podataka šifre valute koju želimo provjeriti</li>
<li>provjera postojanja sloga običnim preborjavanjem slogoca (COUNT)</li>
<li>rezultat prebrojavanja se sprema u output varijablu</li>
<li>u pomoćnu varijablu zapisati upješnost izvršenja radnje</li>
</ul>
<p>Evo kako bi ta procedura izgledala:</p>
<pre class="brush: sql;">

CREATE PROCEDURE dbo.mp_valuta_exists
 @valuta     CHAR(3),
 @out_ima    INT        OUT
AS

SET NOCOUNT ON

DECLARE    @err    INT
SET @err = -1

SELECT    @out_ima    = COUNT(VALUTA)
 FROM    MP_VALUTA
 WHERE    VALUTA    = @valuta
SET @err = @err + @@ERROR

RETURN @err
GO
</pre>
<p>Ovdje se koristi funkcija COUNT koja vraća broj slogova tablice. Kao parametar se koristi primary key polje VALUTA ali sam na puno mjesta vidio da se koristi i COUNT(*). Ta solucija je isto ispravna jedino je zanemarivo sporija ukoliko se radi o većoj tablici koja ima više polja.</p>
<p>Output varijabla @out_ima dobija vrijednost broja slogova koji imaju u polju VALUTA vrijednost @valuta. Kako se radi o primarnom ključu, vrijednost može biti samo <strong>0</strong> ili <strong>1</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.savjetovanje.net/procedura-za-provjeru-postoji-li-slog-istog-primarnog-kljuca/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Procedura za brisanje podataka</title>
		<link>http://www.savjetovanje.net/procedura-za-brisanje-podataka/</link>
		<comments>http://www.savjetovanje.net/procedura-za-brisanje-podataka/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 10:56:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.savjetovanje.net/?p=57</guid>
		<description><![CDATA[Prva procedura koju ću opisati je procedura za brisanje. Ona je najjednostavnija i na njoj se mogu pokazati neke stvari koje će se kasnije stalno ponavljati.
Zadatak procedure za brisanje sloga u našoj tablici MP_VALUTA je

prihvat podataka šifre valute koju želimo obrisati
obrisati slog koji ima traženu šifru valute
u pomoćnu varijablu zapisati upješnost izvršenja radnje

Evo kako bi [...]]]></description>
			<content:encoded><![CDATA[<p>Prva procedura koju ću opisati je procedura za brisanje. Ona je najjednostavnija i na njoj se mogu pokazati neke stvari koje će se kasnije stalno ponavljati.</p>
<p>Zadatak procedure za brisanje sloga u našoj tablici MP_VALUTA je</p>
<ul>
<li>prihvat podataka šifre valute koju želimo obrisati</li>
<li>obrisati slog koji ima traženu šifru valute</li>
<li>u pomoćnu varijablu zapisati upješnost izvršenja radnje</li>
</ul>
<p>Evo kako bi ta procedura izgledala:</p>
<pre class="brush: sql;">
CREATE PROCEDURE dbo.mp_valuta_delete
@valuta        CHAR(3)
AS
SET NOCOUNT ON

DECLARE    @err    INT
SET @err = -1

DELETE
FROM    MP_VALUTA
WHERE    VALUTA    = @valuta
SET @err = @err + @@ERROR

RETURN @err
GO</pre>
<p>Varijabla @valuta prihvaća vrijednost šifre valute koju želimo obrisati.</p>
<p>Svaka SQL naredba vraća poruku o broju zahvaćenih slogova. U procedurama je taj podatak suvišan, a često i smeta te se koristi SET NOCOUNT ON kako se te poruke ne bi javljale.</p>
<p>Varijabla @err je tipa INT i dodijeljena je inicijalna vrijednost -1.</p>
<p>Izvršava se naredba DELETE nad tablicom MP_VALUTA za slog gdje je VALUTA = @valuta.</p>
<p>Odmah nakon izvršavanja naredbe DELETE postoji redak: SET @err = @err + @@ERROR.</p>
<p>@@ERROR je sistemska varijabla samog MS SQL Servera u koju se zapisuje rezultat izvršavanja posljednje SQL naredebe. Ako nije došlo do greške, @@ERROR je 0, a ako je bila greška, zapisuje se broj te greške koji je uvijek neki broj veći od nule. Bitno je vrijednost preuzeti nakon samog izvođenja naredbe jer se vrijednost prepisuje s novom vrijednošću nakon izvršavanja ideuće naredbe.</p>
<p>Analogno tome, ako nije došlo do greške na kraju vrjednost lokalne varijable mora biti -1. U slučaju bilo kakve greške vrijednost je veća od -1.</p>
<p>Na kraju se vraća vrijednost varijable @err. To nije <strong>output</strong> varijabla nego tzv. return value.</p>
<p>Jako je korisna kada se procedura poziva iz neke druge procedure.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.savjetovanje.net/procedura-za-brisanje-podataka/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Procedure, stored procedures ili skraćeno &#8220;store&#8221;</title>
		<link>http://www.savjetovanje.net/procedure-stored-procedures-ili-skraceno-store/</link>
		<comments>http://www.savjetovanje.net/procedure-stored-procedures-ili-skraceno-store/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 10:33:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.savjetovanje.net/?p=55</guid>
		<description><![CDATA[Za svaku jednostavnu tablicu koristim 4 procedure. Jedna je za brisanje sloga (DELETE), druga za provjeru da li postoji slog za traženi PK, treća za zapis i ispravak podataka (INSERT / UPDATE) i četvrta je za vraćanje cijelog slog (SELECT).
Kako se daju imena?
Vrlo jednostavno. Za tablicu MP_VALUTA procedure se zovu

mp_valuta_delete
mp_valuta_exists
mp_valuta_insert
mp_valuta_select

Kao što se vidi, procedure se [...]]]></description>
			<content:encoded><![CDATA[<p>Za svaku jednostavnu tablicu koristim 4 procedure. Jedna je za brisanje sloga (DELETE), druga za provjeru da li postoji slog za traženi PK, treća za zapis i ispravak podataka (INSERT / UPDATE) i četvrta je za vraćanje cijelog slog (SELECT).</p>
<p><strong>Kako se daju imena?</strong></p>
<p>Vrlo jednostavno. Za tablicu MP_VALUTA procedure se zovu</p>
<ul>
<li>mp_valuta_delete</li>
<li>mp_valuta_exists</li>
<li>mp_valuta_insert</li>
<li>mp_valuta_select</li>
</ul>
<p>Kao što se vidi, procedure se sastoje od naziva tablice nad kojom se odvija radnja i naziv radnje. Ovakva podjela je za veliku većinu procedura. Izvan toga pravila izlaze procedure koje rade složene poslove ali o njima nešto kasnije.</p>
<p>Naziv procedure je napisan malim slovima.</p>
<p>Store koristim za sve (dobro, skoro za sve) radnje nad podacima. Uz dobro odabrane nazive nije se teško snaći niti u tisućama procedura.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.savjetovanje.net/procedure-stored-procedures-ili-skraceno-store/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
