Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

stored procedura ne radi

[es] :: MS SQL :: stored procedura ne radi

Strane: 1 2

[ Pregleda: 7009 | Odgovora: 23 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dzigi753
Kipar

Član broj: 19136
Poruke: 19
*.cytanet.com.cy.



Profil

icon stored procedura ne radi24.05.2005. u 10:43 - pre 229 meseci
cao

izgleda OK ovaj kod,ali kad probam da ga izvrsim ispisuje mi "null" ...stored procedura izgleda ovako :

CREATE PROCEDURE sp_pera
@myInput varchar
AS
SELECT SUM(CustFinTrxnLoyalPoints)
FROM CUSTOMERFINTRANSACTIONS
Where CustAccCardNum = @myInput
GO

CustAccCardNum je varchar u tabeli
CustFinTrxnLoyalPoints je float

unapred hvala
 
Odgovor na temu

Simke
Marko Simic
Sandfield Associates (Solution
Developer)
Novi Zeland

Član broj: 1158
Poruke: 751
*.bitstream.orcon.net.nz.

ICQ: 71578686
Sajt: www.sandfield.co.nz


Profil

icon Re: stored procedura ne radi24.05.2005. u 11:21 - pre 229 meseci
Nije nista pogresno, NULL ce ti vratiti ako ne nadje nista za
Where CustAccCardNum = @myInput
All beer is good. Some beer is better.
 
Odgovor na temu

dzigi753
Kipar

Član broj: 19136
Poruke: 19
*.cytanet.com.cy.



Profil

icon Re: stored procedura ne radi24.05.2005. u 11:24 - pre 229 meseci
pa nece biti....imam masu brojeva i za sve mi vraca NULL...
izgleda sasavo ali ne radi
 
Odgovor na temu

dzigi753
Kipar

Član broj: 19136
Poruke: 19
*.cytanet.com.cy.



Profil

icon Re: stored procedura ne radi24.05.2005. u 12:01 - pre 229 meseci
ok
odgovor je :uz promenljivu obavezno mora da stoji i velicina(length)
pa bi kod izgledao ovako:

CREATE PROCEDURE sp_pera
@myInput varchar(32)
AS
SELECT SUM(CustFinTrxnLoyalPoints)
FROM CUSTOMERFINTRANSACTIONS
Where CustAccCardNum = @myInput
GO


e naucih nesto danas...
 
Odgovor na temu

joxa83
bg

Član broj: 96357
Poruke: 3
*.dynamic.sbb.co.yu.



Profil

icon Re: stored procedura ne radi30.05.2006. u 16:23 - pre 217 meseci
ako bilo koji zapis sadzi null sum ce biti null.
npr:select null+1+2 isto je iz agregatnu funkciju sum
 
Odgovor na temu

Fedya
Fedor Hajdu
Solution Architect
Emaratech
Dubai, UAE

Član broj: 28246
Poruke: 790
*.ADSL.neobee.net.

Jabber: fedya@elitesecurity.org
Sajt: devtechgroup.com


+34 Profil

icon Re: stored procedura ne radi30.05.2006. u 16:35 - pre 217 meseci
Imas metod ISNULL koji ce resiti taj problem

Znaci
SELECT SUM(ISNULL(CustFinTrxnLoyalPoints, 0))
Every hamster has his day.
 
Odgovor na temu

rooler
ej spuno ime i prezime
Banja luka

Član broj: 309258
Poruke: 12
31.223.216.*



Profil

icon Re: stored procedura ne radi29.11.2012. u 17:59 - pre 137 meseci
Pozdrav svima,
moj proble kod stored procedure je taj da mi javlja sledeću grešku


"Msg 4902, Level 16, State 1, Procedure menjam_tip, Line 7
Cannot find the object "@ime_tabele" because it does not exist or you do not have permissions."

procedura radi ovako:

reate procedure menjam_tip
@ime_tabele varchar(30),
@ime_kolone varchar(30),
@tip_podatka varchar(30)
as
begin
alter table [@ime_tabele]
alter column [@ime_kolone] [@tip_podatka] commit
end

ako ima pomoći pomagajte.
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: stored procedura ne radi30.11.2012. u 16:34 - pre 137 meseci
[quote]ako ima pomoći pomagajte.[\quote]
Nema ti pomoci. ALTER TABLE i ALTER COLUMN ne priznaju parametre.
 
Odgovor na temu

adzo_
Ivan Adžić

Član broj: 150302
Poruke: 464



+256 Profil

icon Re: stored procedura ne radi01.12.2012. u 09:57 - pre 137 meseci
Postoji resenje tvog problema
Treba da se upoznas sa dinamickim izvrsavanjem SQL procedura, narocito sa "sp_executesql"

Trebalo bi da dalje mozes sam...
 
Odgovor na temu

HladankaoLed
Database Consultant
Vienna, Austria

Član broj: 228937
Poruke: 36
78.142.172.*

Sajt: milossql.wordpress.com


+1 Profil

icon Re: stored procedura ne radi01.12.2012. u 11:41 - pre 137 meseci
Citat:
joxa83:
ako bilo koji zapis sadzi null sum ce biti null.
npr:select null+1+2 isto je iz agregatnu funkciju sum


Nece. Agregatne funkcije ignorisu NULL vrednosti. SUM(val) ekvivalentno je SUM(ISNULL(val,0)).
Obicna aritmeticka operacija vraca NULL ako je barem jedan operand NULL. SELECT NULL + 1 + 2 vratice NULL.
Sad šta je tu je. A možda će da dođe i ova tvoja tetka iz Bosanske Krupe.
 
Odgovor na temu

HladankaoLed
Database Consultant
Vienna, Austria

Član broj: 228937
Poruke: 36
78.142.172.*

Sajt: milossql.wordpress.com


+1 Profil

icon Re: stored procedura ne radi01.12.2012. u 11:48 - pre 137 meseci
Citat:
dzigi753:
ok
odgovor je :uz promenljivu obavezno mora da stoji i velicina(length)
pa bi kod izgledao ovako:

CREATE PROCEDURE sp_pera
@myInput varchar(32)
AS
SELECT SUM(CustFinTrxnLoyalPoints)
FROM CUSTOMERFINTRANSACTIONS
Where CustAccCardNum = @myInput
GO


e naucih nesto danas...



Ovo je tacan odgovor. Ukoliko se prilikom definicije parametra ne navede velicina podrazumevana velicina je 1. To je razlog sto SP vraca NULL. Za tip i velicinu parametra treba navesti tip i velicinu kolone CustAccCardNum.

Ilustracija problema inicijalizacije tekstualnih promenljivih bez navodjenja duzine:

DECLARE @n VARCHAR = 'abc'
SELECT @n

Rezultat:
----
a

Ali, u slucaju konverzije podrazumevana vrednost je 30:

DECLARE @n DATETIME = GETDATE()
SELECT CAST(SYSDATETIME() AS VARCHAR)
GO
DECLARE @n NVARCHAR(2000) = '0123456789012345678901234567890' --31
SELECT CAST(@n AS VARCHAR) -- poslednja nula je eliminisana jer je predsavljala 31. karakter

Rezultat:
------------------------------
2012-12-01 12:46:39.7474518


------------------------------
012345678901234567890123456789



Sad šta je tu je. A možda će da dođe i ova tvoja tetka iz Bosanske Krupe.
 
Odgovor na temu

rooler
ej spuno ime i prezime
Banja luka

Član broj: 309258
Poruke: 12
*.teol.net.



Profil

icon Re: stored procedura ne radi01.12.2012. u 15:44 - pre 137 meseci
Citat:
adzo_:
Postoji resenje tvog problema
Treba da se upoznas sa dinamickim izvrsavanjem SQL procedura, narocito sa "sp_executesql"

Trebalo bi da dalje mozes sam...


OK dalje ću sam da šljakam
 
Odgovor na temu

HladankaoLed
Database Consultant
Vienna, Austria

Član broj: 228937
Poruke: 36
*.5.14.univie.teleweb.at.

Sajt: milossql.wordpress.com


+1 Profil

icon Re: stored procedura ne radi02.12.2012. u 13:42 - pre 137 meseci
Citat:
rooler:
Pozdrav svima,
moj proble kod stored procedure je taj da mi javlja sledeću grešku


"Msg 4902, Level 16, State 1, Procedure menjam_tip, Line 7
Cannot find the object "@ime_tabele" because it does not exist or you do not have permissions."

procedura radi ovako:

reate procedure menjam_tip
@ime_tabele varchar(30),
@ime_kolone varchar(30),
@tip_podatka varchar(30)
as
begin
alter table [@ime_tabele]
alter column [@ime_kolone] [@tip_podatka] commit
end

ako ima pomoći pomagajte.


Generalno u stored procedure se ne pakuju komande koje menjaju strukturu baze podataka (dodavanje ili eliminsanje tabela i kolona, promena tipa podataka i sl.). U tu svrhu koristi se batch skript koji se izvrsava zajedno sa instalacijom verzije aplikacije. Znaci, prva sugestija je da se ova akcija preusmeri na batch skript umesto u stored proceduru.

Dalje, kod stored procedura imena database objekata ne mogu se koristiti kao parametri. Znaci ime tabele, kolone ili funkcije ne moze da bude argument jedne staticke SP. Kao sto rece Zidar, tu pomoci nema - SQL Server database engine ne podrzava imena objekata kao parametre.

Ako uprkos svemu moras da koristis SP i objekte kao argumente, onda, opet kao sto kolega rece, moras da koristis tzv. dinamicki SQL. U konkretnom slucaju to znaci da se SQL komanda dinamicki generise pomocu tekstualnih parametara kao obican string i kasnije, specijalnom komandom (ili sistemskom stored procedurom) tako generisani string dinamicki izvrsi.

Dinamicki SQL je veoma fleksibilan, po pravilu veoma performantan, ali pre svega toga opasan zbog mogucnosti SQL injection napada. Detalje o SQL Injection mozes da nadjes po webu. Ja ti dostavljam ovde jedno resenje koje je zasticeno od napada, vise kao demonstraciju jedne dinamicke SP nego kao putokaz za resenje tvog problema. Jos jednom, ALTER komandu treba da izbacis iz stored procedure i prebacis je u deploymnet skript.
A evo dinamicke SP:
Code:

IF OBJECT_ID('dbo.menjam_tip','P') IS NOT NULL DROP PROCEDURE dbo.menjam_tip
GO
CREATE PROCEDURE dbo.menjam_tip
@ime_tabele varchar(30),
@ime_kolone varchar(30),
@tip_podatka varchar(30)
AS
BEGIN
IF EXISTS(SELECT * FROM sys.tables WHERE name =@ime_tabele)
BEGIN
    IF EXISTS(SELECT * FROM sys.columns WHERE name =@ime_kolone AND object_id=OBJECT_ID(@ime_tabele))
    BEGIN
        IF EXISTS(SELECT * FROM sys.types WHERE name =LTRIM(RTRIM(LEFT(@tip_podatka,CHARINDEX('(',@tip_podatka)-1))))
        BEGIN
            DECLARE @sql NVARCHAR(2000);
            SET @sql = N'ALTER TABLE ' + CAST(@ime_tabele AS NVARCHAR(30));
            SET @sql+= N' ALTER COLUMN ' + CAST(@ime_kolone AS NVARCHAR(30));
            SET @sql+= N' ' + CAST(@tip_podatka AS NVARCHAR(30));
            EXEC (@sql);
        END
        ELSE
        BEGIN  
            RAISERROR ('SQL Server ne podrzava tip podataka sa navedenim imenom.',16,1);
        END
    END
    ELSE
    BEGIN  
        RAISERROR ('Kolona sa takvim imenom ne postoji u datoj tabeli.',16,1);
    END    
END 
ELSE
BEGIN  
    RAISERROR ('Tabela sa takvim imenom ne postoji.',16,1);
END
END


Ovi silni IF-ovi su tu da se user input poredi sa listom postojecih tabela, kolona i tipova (tzv. white list approach) kako bi se svi pokusaji manipulacije i injekcije elegantno i sigurno izbegli. Izostanak IF-ova iz procedure ulepsao bi dan nekom hakeru ili programu koji po bespucima weba traga za rupama u aplikacijama pogodnim za eksploataciju.


Sad šta je tu je. A možda će da dođe i ova tvoja tetka iz Bosanske Krupe.
 
Odgovor na temu

rooler
ej spuno ime i prezime
Banja luka

Član broj: 309258
Poruke: 12
*.teol.net.



Profil

icon Re: stored procedura ne radi17.12.2012. u 10:47 - pre 137 meseci
Citat:
HladankaoLed: Generalno u stored procedure se ne pakuju komande koje menjaju strukturu baze podataka (dodavanje ili eliminsanje tabela i kolona, promena tipa podataka i sl.). U tu svrhu koristi se batch skript koji se izvrsava zajedno sa instalacijom verzije aplikacije. Znaci, prva sugestija je da se ova akcija preusmeri na batch skript umesto u stored proceduru.

Dalje, kod stored procedura imena database objekata ne mogu se koristiti kao parametri. Znaci ime tabele, kolone ili funkcije ne moze da bude argument jedne staticke SP. Kao sto rece Zidar, tu pomoci nema - SQL Server database engine ne podrzava imena objekata kao parametre.

Ako uprkos svemu moras da koristis SP i objekte kao argumente, onda, opet kao sto kolega rece, moras da koristis tzv. dinamicki SQL. U konkretnom slucaju to znaci da se SQL komanda dinamicki generise pomocu tekstualnih parametara kao obican string i kasnije, specijalnom komandom (ili sistemskom stored procedurom) tako generisani string dinamicki izvrsi.

Dinamicki SQL je veoma fleksibilan, po pravilu veoma performantan, ali pre svega toga opasan zbog mogucnosti SQL injection napada. Detalje o SQL Injection mozes da nadjes po webu. Ja ti dostavljam ovde jedno resenje koje je zasticeno od napada, vise kao demonstraciju jedne dinamicke SP nego kao putokaz za resenje tvog problema. Jos jednom, ALTER komandu treba da izbacis iz stored procedure i prebacis je u deploymnet skript.
A evo dinamicke SP:
Code:

IF OBJECT_ID('dbo.menjam_tip','P') IS NOT NULL DROP PROCEDURE dbo.menjam_tip
GO
CREATE PROCEDURE dbo.menjam_tip
@ime_tabele varchar(30),
@ime_kolone varchar(30),
@tip_podatka varchar(30)
AS
BEGIN
IF EXISTS(SELECT * FROM sys.tables WHERE name =@ime_tabele)
BEGIN
IF EXISTS(SELECT * FROM sys.columns WHERE name =@ime_kolone AND object_id=OBJECT_ID(@ime_tabele))
BEGIN
IF EXISTS(SELECT * FROM sys.types WHERE name =LTRIM(RTRIM(LEFT(@tip_podatka,CHARINDEX('(',@tip_podatka)-1))))
BEGIN
DECLARE @sql NVARCHAR(2000);
SET @sql = N'ALTER TABLE ' + CAST(@ime_tabele AS NVARCHAR(30));
SET @sql+= N' ALTER COLUMN ' + CAST(@ime_kolone AS NVARCHAR(30));
SET @sql+= N' ' + CAST(@tip_podatka AS NVARCHAR(30));
EXEC (@sql);
END
ELSE
BEGIN  
RAISERROR ('SQL Server ne podrzava tip podataka sa navedenim imenom.',16,1);
END
END
ELSE
BEGIN  
RAISERROR ('Kolona sa takvim imenom ne postoji u datoj tabeli.',16,1);
END
END 
ELSE
BEGIN  
RAISERROR ('Tabela sa takvim imenom ne postoji.',16,1);
END
END


Ovi silni IF-ovi su tu da se user input poredi sa listom postojecih tabela, kolona i tipova (tzv. white list approach) kako bi se svi pokusaji manipulacije i injekcije elegantno i sigurno izbegli. Izostanak IF-ova iz procedure ulepsao bi dan nekom hakeru ili programu koji po bespucima weba traga za rupama u aplikacijama pogodnim za eksploataciju.




OK hvala na opširnom odgovoru, možda nekakav link sa batch skriptom.
 
Odgovor na temu

rooler
ej spuno ime i prezime
Banja luka

Član broj: 309258
Poruke: 12
*.teol.net.



Profil

icon Re: stored procedura ne radi17.12.2012. u 10:52 - pre 137 meseci
Narode kad smo već tu,
na koji način da postavim trigger koji će mi nakon unosa podatka u jednu tabelu u nekoj drugoj
da pravi npr sum dodanih elemenata?
npr.:
tbl1 ----------------------tbl2
_________________________
imena----------------------brojac
_________________________
mitar mirić _________________2
hanka paldum

i da li je tako nešto moguće.
predpostavljam da tabele treba da su uvezane sa pk i fk
 
Odgovor na temu

plague
Software Developer
Auckland, NZ

Član broj: 46734
Poruke: 623
*.dynamic.isp.telekom.rs.



+373 Profil

icon Re: stored procedura ne radi17.12.2012. u 11:31 - pre 137 meseci
Suma kakvih dodatnih elementa?

Ovo ti je forma triggera:
Code:

CREATE TRIGGER Okidac ON tbl1 
    AFTER INSERT
AS 
/*kod*/
GO


Ako hoces da ti konkretno pomognemo, opisi bolje sta ti zapravo treba.
 
Odgovor na temu

rooler
ej spuno ime i prezime
Banja luka

Član broj: 309258
Poruke: 12
*.teol.net.



Profil

icon Re: stored procedura ne radi17.12.2012. u 13:15 - pre 137 meseci
Citat:
plague: Suma kakvih dodatnih elementa?

Ovo ti je forma triggera:
Code:

CREATE TRIGGER Okidac ON tbl1 
AFTER INSERT
AS 
/*kod*/
GO


Ako hoces da ti konkretno pomognemo, opisi bolje sta ti zapravo treba.
Citat:
plague: Suma kakvih dodatnih elementa?


ovako:ako ja unesem podatak u tbl1, želeo bih da mi u tbl2 radi 'count' elemenata iz tbl1.

Recimo da mi je tbl2 nekakva statistička tabela, naravno tbl2 se neće sastojati od jedne kolone
 
Odgovor na temu

rooler
ej spuno ime i prezime
Banja luka

Član broj: 309258
Poruke: 12
*.teol.net.



Profil

icon Re: stored procedura ne radi17.12.2012. u 13:30 - pre 137 meseci
Citat:
rooler: ovako:ako ja unesem podatak u tbl1, želeo bih da mi u tbl2 radi 'count' elemenata iz tbl1.

Recimo da mi je tbl2 nekakva statistička tabela, naravno tbl2 se neće sastojati od jedne kolone
[quote]

ok Hvala plague!!!
moj sad izgleda ovako:
CREATE TRIGGER Okidac ON tbl1
AFTER INSERT
AS
/*kod*/
insert into tbl2(broj)
select COUNT(ime)from tbl1
GO
_______________________
Da li bi mogao da konstruišem ovaj triger sa nekakvom
dinamičkom vrednošću:
npr
CREATE TRIGGER Okidac ON @tbl1
AFTER INSERT
AS
/*kod*/
insert into @tbl2(@broj)
select COUNT(@ime)from @tbl1
GO
 
Odgovor na temu

plague
Software Developer
Auckland, NZ

Član broj: 46734
Poruke: 623
*.dynamic.isp.telekom.rs.



+373 Profil

icon Re: stored procedura ne radi17.12.2012. u 13:38 - pre 137 meseci
Razumem da hoces count, ali count cega? Po kom kriterijumu?

Kazes da su tbl1 i tbl2 vezane PK/FK, to bi znacilo da tbl2 sadrzi informaciju o konkretnom zapisu iz tbl1, ne znam kakav count tu mozes da uradis?

Npr zamislimo da je tbl1 = SaleOrders, a da je tbl2 neki coutner za tu tabelu. Ako hoces da prebrojis porudzbine za nekog Usera, tbl2 treba biti vezana za Users tabelu, a ne za SalesOrder.

Ovo tvoje ima smisla jedino ako postoji jos neka tabela npr SaleOrderItems vezana za SaleOrders, pa tada da brojis te SalesOrderItems koji su vezani za SaleOrders a dalje je tbl2 vezana za SalesOrderID, mada bi i tada mogao to da uradis bez dodatne tabele. Osim ako ne postoji neka zavrzlama koju ne mogu da prepoznam za sta se izvinjavam. Do tada moje pitanje je: Sta zapravo brojis?

I sta znaci staticka tabela? Mislis na tabele koje se veoma retko menjaju?

Citat:
rooler: ovako:ako ja unesem podatak u tbl1, želeo bih da mi u tbl2 radi 'count' elemenata iz tbl1.

Kada bi ovo uradio imao bi gomilu zapisa u tbl2 gde bi kolona "brojac" zapravo bila nesto sto podseca na "redni broj" zapisa iz tbl1. Da li ti to treba?


Edit:
Mislim da ne shvatas triggere. Oni se vezuju za tabelu ili bazu i predstavljaju evente koji se izvrsavaju kada se nesto dogodi. Oni postoje "snimljeni" i "zakaceni", kao sto ti postoji stored procedure, samo sto se izvrsavaju automatski(bez bilo kakvog manuelnog pozivanja) nakon nekog dogadjaja.
 
Odgovor na temu

rooler
ej spuno ime i prezime
Banja luka

Član broj: 309258
Poruke: 12
*.teol.net.



Profil

icon Re: stored procedura ne radi17.12.2012. u 14:02 - pre 137 meseci
Citat:
plague: Razumem da hoces count, ali count cega? Po kom kriterijumu?

Kazes da su tbl1 i tbl2 vezane PK/FK, to bi znacilo da tbl2 sadrzi informaciju o konkretnom zapisu iz tbl1, ne znam kakav count tu mozes da uradis?

Npr zamislimo da je tbl1 = SaleOrders, a da je tbl2 neki coutner za tu tabelu. Ako hoces da prebrojis porudzbine za nekog Usera, tbl2 treba biti vezana za Users tabelu, a ne za SalesOrder.

Ovo tvoje ima smisla jedino ako postoji jos neka tabela npr SaleOrderItems vezana za SaleOrders, pa tada da brojis te SalesOrderItems koji su vezani za SaleOrders a dalje je tbl2 vezana za SalesOrderID, mada bi i tada mogao to da uradis bez dodatne tabele. Osim ako ne postoji neka zavrzlama koju ne mogu da prepoznam za sta se izvinjavam. Do tada moje pitanje ........

Da, uvideo sam nedostatak mog koda, on mi pravi niz elemenata uvećanih za +1, pa sam razmišljao o uslovu 'where'
međutim, pada mi na pamet where broj=values (broj) što nije tačno

Ovaj triger mi je bio testni triger, ono što bi meni trebalo kasnije(slično tvom primeru) je sledeće:
Možda sam na krivom putu, htio sam da mi triger odrađuje nekakve operacije, npr. ako u tbl1 unesem u polje1 i polje2 određenu vrednost, u tbl2 da mi pomnoži ili odradi nekakvu drugu matematičku operaciju sa zadanim poljima iz tbl1.
zato sam razmišljao o promenjivim vrednostima
 
Odgovor na temu

[es] :: MS SQL :: stored procedura ne radi

Strane: 1 2

[ Pregleda: 7009 | Odgovora: 23 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.