Novo

Forum kao aplikacija na telefonu

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

  • 27 odgovora
  • 9.689 pregleda

Najnovija ↓

Stored procedure - prva pomoc 13.02.2007. u 21:32 · pre 240 meseci #1
Da li je moguce napraviti stored proceduru koja vraca neke kolone? Ili ona moze samo da puni neku tabelu a ne i da je kreira?
Ako moze neko kratak kurs o stored procedurama i sta znace pojedini redovi u sledecoj (napisao sam ono sta znam ili pretpostavljam pa me ispravite ako gresim):

set ANSI_NULLS ON /ne znam/
set QUOTED_IDENTIFIER ON /ne znam/
go




-- =============================================
-- Author: Pero Perovic /ko je autor/
-- Create date: 19 February 2007 /datum kreiranja
-- Description: Insert record in table PROBA /opis/
-- =============================================
ALTER PROCEDURE [dbo].[Ubacuje_u_Proba]
/kljucne reci kojim se kreira sp sa svojim imenom/
@Prvi int, @Drugi int, @Treci tinyint, @Cetvrti tinyint, @Stanje char(1)
/parametri procedure/
AS
BEGIN /pocetak procedure/
SET NOCOUNT ON; /ne znam/
IF
(NOT EXISTS
(
SELECT *
FROM PROBA
WHERE (Prvi_ID=@Drugi) AND (Drugi_ID=@Drugi)
/ako ne postoji slog koji ima ovaj par promenljivih (primarni kljuc)/
)
)
BEGIN
INSERT INTO PROBA(Prvi_ID, Drugi_ID, Treci,
Cetvrti , Stanje)
VALUES (@Prvi, @Drugi, @Treci, @Cetvrti, @Stanje)
END /ubacuje slog sa ovim vrednostima/
ELSE
EXEC NemamPojma @Prvi, @Drugi, @Treci, @Cetvrtii, 'A'
END /kraj procedure/


Unapred hvala svima koji mi pruze bilo kakvu informaciju.
Re: Stored procedure - prva pomoc 13.02.2007. u 21:48 · pre 240 meseci #2

Code:


--ovo su mislim neke odredbe za sql ser.man.studio., nisam siguran

set ANSI_NULLS ON /ne znam/
set QUOTED_IDENTIFIER ON /ne znam/
go


-- =============================================
-- Author: Pero Perovic /ko je autor/
-- Create date: 19 February 2007 /datum kreiranja
-- Description: Insert record in table PROBA /opis/
-- =============================================

-- Create je za kreiranje a Alter je za promjenu (znači da ta SP več postoji) inače treba Create ako ne postoji

ALTER PROCEDURE [dbo].[Ubacuje_u_Proba]
/kljucne reci kojim se kreira sp sa svojim imenom/
@Prvi int, @Drugi int, @Treci tinyint, @Cetvrti tinyint, @Stanje char(1)
/parametri procedure/
AS
BEGIN /pocetak procedure/

--kada je ON, eliminira se poruka xx row(s) affested u prozoru SQL Ser.man.stud., i eliminira se poruka 
-- koja se prolsjeduje klijentskoj aplikaciji mislim done_in_proc, da bi saznao broj redova ako je ovo na on korsti se
-- sistemska var. @@RowCount

SET NOCOUNT ON; /ne znam/
IF
(NOT EXISTS
(
SELECT *
FROM PROBA
WHERE (Prvi_ID=@Drugi) AND (Drugi_ID=@Drugi)
/ako ne postoji slog koji ima ovaj par promenljivih (primarni kljuc)/
)
)
BEGIN
INSERT INTO PROBA(Prvi_ID, Drugi_ID, Treci,
Cetvrti , Stanje)
VALUES (@Prvi, @Drugi, @Treci, @Cetvrti, @Stanje)
END /ubacuje slog sa ovim vrednostima/
ELSE

--exec služi za izvršavanje recimo druge SP kod ugnježdivanja, recimo exec druga_sp 'parametar', ili ako u varijabli
--imaš neki sql upit
--declare upit nvarchar(100)
--set upit="select * from tablica"
--exec upit 

EXEC NemamPojma @Prvi, @Drugi, @Treci, @Cetvrtii, 'A'
END /kraj procedure/


naravno da može vračati vrijednosti sp, možeš kako koristiš između ostalog koristiti i izlazne parametre, deklarira se isto kao i ovaj al mu dodš output!!
Potpis
----Roberto----
Re: Stored procedure - prva pomoc 13.02.2007. u 23:00 · pre 240 meseci #3
Koliko ja znam Sp moze da radi sve kao klasicni upit- ona i nije nista drugo.
Naravno da mozes da kreiras sta hoces i da vracas pojedine kolone.Sve je isto kao i inace.
Re: Stored procedure - prva pomoc 14.02.2007. u 09:06 · pre 239 meseci #4
Gore su ti (skoro) sve rekli, samo jos malo da dopunim ono sto nije receno
Citat:
U prolazu: Da li je moguce napraviti stored proceduru koja vraca neke kolone? Ili ona moze samo da puni neku tabelu a ne i da je kreira?


Mozes da vracas kolone (izvrsis select naredbu), ona takodje moze da puni i tabelu i da je kreira.

I ono sto je roberto propustio da napise je:
set ANSI_NULLS ON
ANSI_NULLS se odnosi na nacin kako sprocedure tretira NULL vrednosti u WHERE odredbi. Kada je postavljeno na ON
where nesto = null ili where nesto <> null nikada nece vratiti rezultat (moras koristiti IS NULL i IS NOT NULL).

set QUOTED_IDENTIFIER ON
ti omogcujuje da promenljive stavljas pod znakove navodnika. Sa OFF se ova mogucnost iskljucuje
Potpis
Every hamster has his day.
Re: Stored procedure - prva pomoc 14.02.2007. u 15:16 · pre 239 meseci #5
Malo teorestkog nklapanja, cisto radi prcisznosti:

Citat:
Koliko ja znam Sp moze da radi sve kao klasicni upit- ona i nije nista drugo.

Ovo je samo delimicno tacno. SP naravno moze moze da radi sve sto i klasican upit. Ali moze i mnogo vise - da prima parametre, da poziva druge procedure, da kreira tabele, da manipulise objekte, da izvrsi nekoliko upita i da ih kombinuje. Ispravnije je reci mozda "SP moze da radi sve sto mozes da uradis u query analyzery" sto je isto sto i "SP je sacuvana SKRIPTA" sto je opstije nego "SP je sacuvani upit". Sacuvani upit je VIEW.

Re: Stored procedure - prva pomoc 15.02.2007. u 13:17 · pre 239 meseci #6
Hvala svima na odgovorima.

Moze li neko da napise primer kako stored procedura kreira neku tabelu?
Re: Stored procedure - prva pomoc 15.02.2007. u 13:45 · pre 239 meseci #7
Code:

CREATE Table ime_tablice (kolona1 int not null primary key, kolona2 nvarchar(30))

/*dođe ovo:
ime_tablice--

-kolona1-------kolona2-----*/


kad u sql server management studiu napraviš tablicu u 'dizajneru', desni klik na nju -> script as -> create table ->[tako nekako piše] i tu stavi u međumemoriju(imaš i datoteku,ili new query), te onda negdje napravi 'Paste' i dobit češ upit koji da si napisao bi kreirao istu takvu kao što si tu u dizajneru!!!

-ako ispred 'ime_tablice' stavis znak #, kreiraš privremenu tabelu,koju može koristiti samo onaj tko ju je kreirao, ona se kreira u systemskoj bazi tempDB!
Potpis
----Roberto----
Re: Stored procedure - prva pomoc 15.02.2007. u 15:10 · pre 239 meseci #8
Budi oprezan sa kreiranjem tabela pomocu stored procedura. Ako je to temp tabela (#TableName) OK. Ali ako tvoje procedure treba da kreiraju permanentne tabele u run time, ti verovatno ima sproblem sa dizajnom baze. SQL Serevr je relaciona baza podataka, uglavnom. To znaci da ne bi trebalo kreirati tabele 'on the fly'. Neznanjem ili nepaznjom mozes lako SQL bazu da pretvoris u najobicniji file sistem, onako kako se to radilo u Dbase i Clipper sistemima. Ono sto je u SQL tabela, tamo se zvalo 'file' ili 'datoteka' ili cak 'baza'. Aplikacija je morala da sve datoteke (baze :)) poveze u neki logican sistem i da vodi racuna o integritetu podataka. U SQL sistemima, baza vodi racuna o tome. Kad dizajniras bazu, aplikacija te uopste ne interesuje.

Bolje je da se zabavis dizajnom baze nego programiranjem stored procedura. Previse programiranja u SQL sistemim cesto vodi u propast a najcesce je potreba za mnogo programiranja znak da nesto u dizajnu nije u redu, pogotovo ako stored procedure kreiraju objekte baze (permanentne tabele). I kreiranje temp tabela u proceduri najcesce je znak da u dizajnu nie sve kako valja, ali se tolerise zbog brzine izvrsavanja (teorije je teorija a praksa je praksa)
Re: Stored procedure - prva pomoc 01.03.2007. u 14:18 · pre 239 meseci #9
Citat:
Bolje je da se zabavis dizajnom baze nego programiranjem stored procedura. Previse programiranja u SQL sistemim cesto vodi u propast a najcesce je potreba za mnogo programiranja znak da nesto u dizajnu nije u redu.


Ovo apsolutno nije tacno. Sto vise programiras ( u ovom slucaju MSSQL stored proc), bolju kontrolu ces imati nad celim SQL sistemom, a mislim da je suvisno cak i da pominjem koliko mozes dobiti na performansama.
Citat:
I kreiranje temp tabela u proceduri najcesce je znak da u dizajnu nie sve kako valja, ali se tolerise zbog brzine izvrsavanja (teorije je teorija a praksa je praksa)


Imao sam skoro u praksi jedan zanimljiv zadatak. Naime, trebalo je napraviti u MSSQL2000 nesto poput pivot tabele -sto se u MS Accessu !! trivijalno resava i nazalost nije bilo drugog nacina osim da sednem i napisem stored proc sa dve temp tabele- jednostavno nije bilo drugog nacina-bar za MSSQL2000.

Mislim da je bolje da sto vise izbegavas "poglede", trigere i sve ostale stvari o kojima SQL servis " sam vodi racuna " - sve su to u sustini bespotrebne stvari koje samo mogu usporiti SQL sistem ( pa i ceo server ) i da, sto je moguce vise, paznje posvetis izradi i implemetaciji stored procedura.

Pozdrav

Re: Stored procedure - prva pomoc 01.03.2007. u 15:01 · pre 239 meseci #10
Citat:
Imao sam skoro u praksi jedan zanimljiv zadatak. Naime, trebalo je napraviti u MSSQL2000 nesto poput pivot tabele -sto se u MS Accessu !! trivijalno resava i nazalost nije bilo drugog nacina osim da sednem i napisem stored proc sa dve temp tabele- jednostavno nije bilo drugog nacina-bar za MSSQL2000.


Pivot tabele se i u SQL 2000 sasvim lepo rade SELECT upitom, samo treba umeti. Svo vreme pokusavam da kazem da se cesto nedostatk SQL znanja nadoknadjuje sa mnogo programiranja. Programeri naravno uzivaju u programiranju i nije im tesko to da rade i zaista ih je tesko ubediti da tako ne treba. Zato ne vredi raspravljati, svako ce ostati na svome ionako.

I ja sam bivsi programer, a sad imam gomilu progarmera koji rade sta im kazem. U pocetku smo imali problem da odvojimo funkcije front enda od funkcija baze. Kad smo sve podesili kako treba, odjedamput je nestala potreba da programeri bilo sta rade na samoj bazi. Onda su iznenada programeri prestali da razmisljau o tome kako na front endu odrzati integritet podataka i slicne stvari. Sada se bave korisnijim stvarima. Mogu da se fokusiraju na user interface, reporte, i sta vec drugo treba. A DBA ne provodi po ceo dan pisuci nove i nove stored procedure, kako kome sta zatreba. Za tim jednostavno nema potrebe, kad je baza lepo dizajnirana. Pravila poslovanja se ponekad promene, nema veze, dobar dizajn baze to trpi bez problema.

Poenta je da svi odjednom imaju vise vremena nego ranije i mozemo da krenemo i na projekte koje nismo mogli da radimo ranije jer smo bili previse zauzeti programiranjem. Dobar dizajn baze smanjuje potrebu za programiranjem jer baza preuzme mnogo poslova na sebe. Ukupna produktivnost je dakle porasla, a to je krajnji cilj.

:-)
Re: Stored procedure - prva pomoc 01.03.2007. u 15:30 · pre 239 meseci #11
Zidar ne bi se slozio sa tobom u jednoj stvari a to je

Citat:

Svo vreme pokusavam da kazem da se cesto nedostatk SQL znanja nadoknadjuje sa mnogo programiranja. Programeri naravno uzivaju u programiranju i nije im tesko to da rade i zaista ih je tesko ubediti da tako ne treba. Zato ne vredi raspravljati, svako ce ostati na svome ionako.


To da li programeri uzivaju u programiranju spageti koda je veoma dikutabilno. Ja licno ne uzivam. Moje vidjenje je da ti programeri koji mnogo pisu SQL code, recimo radije ce koristiti cursore nego select, je da su isto toliko dobri i u imperativnim jezicim, ovim klasicnim. Drugim recima, onaj koji pise u SQL bespotrebno dugacak i velik spageti code, taj isto to radi i u programskim jezicima, isto pise gomilu koda, ima mngo redudancije, kod je ne citljiv i rezultat svega je isto kao sto si i naveo, spor program, motanje gresaka, tesko za odrzavanje i jos gomila negativnih propratnih efekata.
Problem je u logici svakog pojedincanog programera, neki uvek teze za sto cistijim i kracim kodom/resenjima dok neki potezu tesku artiljeriju, dal' iz ne znanja ili neceg drugog ja to ne znam, ali do sada ja sam stekao takav utisak. Po meni, najbolja resenja kada se sistem usloznjava je kompozitnost programa, modularnost. Sto vise malih gotovih celina koje su kompaktne i spremene za 'plug in' sto na kraju rezultuje jednom cvrstom celinom. Mislim da se ovaj model moze uspesno implementirati na skoro sve oblasti, od dizajna DB-a, do modela aplikacije, do samih modula u aplikaciji.


Re: Stored procedure - prva pomoc 01.03.2007. u 15:42 · pre 239 meseci #12
Citat:
Pivot tabele se i u SQL 2000 sasvim lepo rade SELECT upitom, samo treba umeti.


Citat:
...I ja sam bivsi programer...


Jasno mi je zasto vise nisi (SQL) programer :).

Citat:
baza preuzme mnogo poslova na sebe
.

Salu na stranu, to sto navodis jeste ok kada su tabele reda srednjih velicina ( do 1000 000 slogova). Dizajniras bazu i tabele , postavis kljuceve, definises relacije, indexe constrainte i miran si :).
Citat:
Onda su iznenada programeri prestali da razmisljau o tome kako na front endu odrzati integritet podataka

Sve to lepo radi kada je u poolu 100 ak konekcija....Ali sta ako -teorijski- imas vise hiljada konekcija, kada je isti SQL server vidljiv "spolja" - hoces li tada prepustiti bazi da vodi racuna o integritetu podataka ?

Pozdrav

Re: Stored procedure - prva pomoc 01.03.2007. u 15:55 · pre 239 meseci #13
Citat:

Sve to lepo radi kada je u poolu 100 ak konekcija....Ali sta ako -teorijski- imas vise hiljada konekcija, kada je isti SQL server vidljiv "spolja" - hoces li tada prepustiti bazi da vodi racuna o integritetu podataka ?


E sad si mene bacio u razmisljanje. A kako ti to resavas ako nije tajna?
Re: Stored procedure - prva pomoc 01.03.2007. u 16:09 · pre 239 meseci #14
Citat:
negyxo
radije ce koristiti cursore nego select


Sta fali kursorima?
Pa nisi valjda lud da emitujes komandu UPDATE ili ne daj Boze DELETE nad ogromnim tabelama??
Kursori su jako korisni u ovakvim situacijama.

Naravno da je zlatno programersko pravilo - sto manje koda - to je bolje, preglednije i efikasnije. Iskreno, ni ja nisam razumeo nikada one programere koje ti nazivas "teskom artiljerijom" ili kako god.

Citat:
E sad si mene bacio u razmisljanje. A kako ti to resavas ako nije tajna?

Postoji drugo zlatno pravilo u programiranju koje se zove "defanzivno programiranje" - predvidi i handluj situaciju iako se ista mozda nikada nece desiti .

Pozdrav

Re: Stored procedure - prva pomoc 01.03.2007. u 17:23 · pre 239 meseci #15
Citat:
branimir.ts: Pa nisi valjda lud da emitujes komandu UPDATE ili ne daj Boze DELETE nad ogromnim tabelama??
Kursori su jako korisni u ovakvim situacijama.

Kakva je razlika da li UPDATE ili kurzor prolazi kroz milion redova?
Potpis
"The best code is no code at all."
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming."
- Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo
Re: Stored procedure - prva pomoc 01.03.2007. u 18:21 · pre 239 meseci #17
Citat:
chachka: Kakva je razlika da li UPDATE ili kurzor prolazi kroz milion redova?


Ovo bi i ja voleo da cujem.

Citat:
branimir.ts:
Postoji drugo zlatno pravilo u programiranju koje se zove "defanzivno programiranje" - predvidi i handluj situaciju iako se ista mozda nikada nece desiti .


Nisi mi odgovorio na pitanje ali nema veze pojasnici kasnije. Sto se tice defanzivnog programiranja, hm... ne znam sta da ti kazem, u redu je do one granice kada ne predstavlja udar na dve vrste performanse:
1.) developersko, inzenjersko/<nazovi kako god hoces> vreme
2.) same performance programa, u ovom slucaju baze

Za ono moje pitanje, kada sam ga postavio imao sam u vidu integritet podataka nad PK i FK. To kako god okrenes ne mozes da resis na klijentu (tj. mozes ali po cenu jos gorih performansi). Na ovaj deo sam mislio, mada to i ne treba da odgovoris, ovaj deo je jasno kako se resava. Ali u integritet podataka ne spada samo PK i FK, nego i sama biznis logika, ako bi tako mogao da nazovem, tj. sve vrste constrainta. Sa ovim delom bi se delimicno slozio da moze da se resi na klijentu, ili jos bolje receno, moglo bi na klijentu da se uradi mnogo provere, pre nego sto stignu u bazu, sto na kraju dovodi do boljih performansi. Sve zavisi kakva vrsta provrere je u pitanju. I sada dolazimo do onoga vec opsteg poznatog, u zavisnosti od problema se prave i resenja.
Re: Stored procedure - prva pomoc 01.03.2007. u 18:34 · pre 239 meseci
izmenjeno 1 put, poslednji put negyxo 01.03.2007. u 19:12
  1. negyxo01.03.2007. u 19:12zapis iz teksta poruke
#18
Citat:
branimir.ts: Razlika je u tome sto ce UPDATE formirati pokazivace na 1000 000 redova, dok ce kursor imati pointer samo na tekuci red.
Pozdrav


Taman sam hteo da ti napisem da nisi u pravu, bar ne za 99% slucajeva ali pre nego sto napisem najbolje ti daj primer. Ovako samo mogu da pogadjam na sta mislis, a nisam vidovit, tako da cu sigurno promasiti.
Re: Stored procedure - prva pomoc 01.03.2007. u 20:29 · pre 239 meseci #19
Citat:
branimir.ts: Sve to lepo radi kada je u poolu 100 ak konekcija....Ali sta ako -teorijski- imas vise hiljada konekcija, kada je isti SQL server vidljiv "spolja" - hoces li tada prepustiti bazi da vodi racuna o integritetu podataka?

Citat:
negyxo: E sad si mene bacio u razmisljanje. A kako ti to resavas ako nije tajna?

Pa šta razmišljaš negyxo? Stvar je prosta, svaka od 100 ak ili hiljadu konekcija će samostalno brinuti o integritetu podataka :)
Zašto jednostavno kada može složeno.
Re: Stored procedure - prva pomoc 01.03.2007. u 20:51 · pre 239 meseci #20
Ajde da si odgovorio neposredno posle pitanja ali ovako kada sam pojasnio sta se na sta odnosi...
Ako imas, hipoteticki, 100 000 konekcija i tabelu od 1 000 000 slogova zar ces ti na svakog klijenta svlaciti milion redova da bi odrzao integritet PK i FK kljuceva (nema smisla da posle PK i FK stavljam rec 'kljuceva' jer on K u PK i FK znaci key, ali ovako lepse zvuci :D) Cak ti ni to ne garantuje i da uradis da ce podaci biti u integritetu jer neko moze vec dodati kljuc pre tebe, smisla ima da klijent preuzima na sebe kada imas nesto poput JMBG, minimalne zarade, itd. sto mozes da proveris na klijentu da ne saljes serveru zbog neceg sto se zna i pre slanja, tj. zna se preko BL (biznis logike) ili keshiranih podataka sa servera na klijentu koje suu granicne vrednosti. Stvar je u tome da se neki integritet moze proveriti na klijentu a neki ne moze, iliti moglo bi, ali uz veliki trosak performanci. Ako ovo nije nekom jasno, ja bolje od ovog ne umem da objasnim.
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme