Problem z funkcją wewnątrz procedury - MS SQL 2005
KrisKomp - 12-11-2006 01:31
Problem z funkcją wewnątrz procedury - MS SQL 2005
Witam wszystkich Deklarowałem procedure w MS SQL 2005, proceudura utworzyła się poprawnie, jednak po jej wywołaniu exec Proc @period = '20060930' pojawia się błąd: "Msg 201, Level 16, State 4, Procedure AdjIntCalculation, Line 0, Procedure or Function 'AdjIntCalculation' expects parameter '@date_now', which was not supplied"
create procedure Proc
@period char(8), @date_now smalldatetime, @date_before smalldatetime, @period_before char(6), @period_now char(6), @period_before_short char(4), @period_now_short char(4), @querry varchar(2500) as set @date_now = convert(smalldatetime,@period,112) set @date_before = dateadd(d,-datepart(d,@date_now),@date_now) set @period_before = convert(char,@date_before,112) set @period_now = convert(char,@date_now,112) set @period_before_short = substring (@period_before,3,4) set @period_now_short = substring (@period_now,3,4)
set @querry = 'treść zapytania'
exec(@querry)
Proszę o pomoc, dlaczego zmiennej @date_now nie przypisuje się wynik z funkcji convert i co za tym idzie pracdura nie działa.
Grzesiek G. - 12-11-2006 01:31
KrisKomp napisał(a): > Witam wszystkich > Deklarowałem procedure w MS SQL 2005, proceudura utworzyła się > poprawnie, jednak po jej wywołaniu exec Proc @period = '20060930' > pojawia się błąd: > "Msg 201, Level 16, State 4, Procedure AdjIntCalculation, Line 0, > Procedure or Function 'AdjIntCalculation' expects parameter > '@date_now', which was not supplied" > > create procedure Proc > > @period char(8), > @date_now smalldatetime, > @date_before smalldatetime, > @period_before char(6), > @period_now char(6), > @period_before_short char(4), > @period_now_short char(4), > @querry varchar(2500) > as > set @date_now = convert(smalldatetime,@period,112) > set @date_before = dateadd(d,-datepart(d,@date_now),@date_now) > set @period_before = convert(char,@date_before,112) > set @period_now = convert(char,@date_now,112) > set @period_before_short = substring (@period_before,3,4) > set @period_now_short = substring (@period_now,3,4) > > set @querry = 'treść zapytania' > > exec(@querry) > > Proszę o pomoc, dlaczego zmiennej @date_now nie przypisuje się wynik > z funkcji convert i co za tym idzie pracdura nie działa. > Polecam dowolny kurs z pisania procedur lub lekturę BOL. Przecież @date_now jest parametrem wejściowym (podobnie jak kilka innych), więc procedura nie jest wywoływana, o czym mówi komunikat. Do deklarowania parametrów wyjściowych służy klauzula OUTPUT.
Pozdrawiam
-- Grzegorz Gruza Odpowiadając usuń "spamerom_nie." z adresu!!!
Robert Winkler - 12-11-2006 01:31
Jeśli potrzebujesz w procedurze zmiennych lokalnych to nie deklaruj ich jako parametrów procedury tylko jako zmienne za pomocą dyrektywy DECLARE
create procedure Proc @period char(8) as declare @date_now smalldatetime declare @date_before smalldatetime declare @period_before char(6) declare @period_now char(6) declare @period_before_short char(4) declare @period_now_short char(4) declare @querry varchar(2500)
set @date_now = convert(smalldatetime,@period,112) set @date_before = dateadd(d,-datepart(d,@date_now),@date_now) set @period_before = convert(char,@date_before,112) set @period_now = convert(char,@date_now,112) set @period_before_short = substring (@period_before,3,4) set @period_now_short = substring (@period_now,3,4)
set @querry = 'treść zapytania'
exec(@querry)
-- ____________ Robert Winkler
KrisKomp - 12-11-2006 01:31
Poszedlem droga deklaracji zmiennych lokalnych wewnatrz procedury, zamiast parametrów jak to mialo miejsce wczesniej, procedura sie stworzyla jednak podczas jej uruchamiania pojawia sie blad: "Msg 137, Level 15, State 2, Line 1 Must declare the scalar variable "@dat_now"" Wczesniej w innym przypadku mialem podobny problem, ale powiem szczerze nie wiem jak go rozwiazac, bede wdzieczny za pomoc.
Krzysztof
Robert Winkler - 12-11-2006 01:31
> Poszedlem droga deklaracji zmiennych lokalnych wewnatrz procedury, > zamiast parametrów jak to mialo miejsce wczesniej, procedura sie > stworzyla jednak podczas jej uruchamiania pojawia sie blad: "Msg > 137, Level 15, State 2, Line 1 Must declare the scalar variable > "@dat_now"" > Wczesniej w innym przypadku mialem podobny problem, ale powiem szczerze > nie wiem jak go rozwiazac, bede wdzieczny za pomoc.
Nie jest to przypadkiem tylko literówka w nazwie zmiennej lokalnej? W declaracji zmienna nazywa sie @date_now a blad mówi o braku zmiennej @dat_now brakuje jednego 'e'
PS. W MSSQL'u procedura nie moze nazywac sie proc. Rozumiem ze ta nazwa to byl jedynie przyklad. -- ____________ Robert Winkler
KrisKomp - 12-11-2006 01:31
Literówka była ale w poście na grupach. Probowalem juz tworzyć inna procedure wg. przedstawionego przez Ciebie zalecenia o czym powyzej napisalem, na wszelki wypadek aby nie uzywać slowa date uzylem dat i pozniej skopiowalem komunikat z tej nowej procedurym zapominając piszcząc posta dodać e. Oczywuiscie procedura nie nazywa się proc, to by był przykład. Zastanawia mnie po prostu sens i przczyna otrzymywanego błędu.
KrisKomp - 12-11-2006 01:31
Literówka była ale w poście na grupach. Probowalem juz tworzyć inna procedure wg. przedstawionego przez Ciebie zalecenia o czym powyzej napisalem, na wszelki wypadek aby nie uzywać slowa date uzylem dat i pozniej skopiowalem komunikat z tej nowej procedurym zapominając piszcząc posta dodać e. Oczywuiscie procedura nie nazywa się proc, to by był przykład. Zastanawia mnie po prostu sens i przczyna otrzymywanego błędu.
KrisKomp - 12-11-2006 01:31
Postanowiłem wybróbować opisaną powyżej metodę poprzez stworzenie innej procedury i na wszelki wypadek wyraz 'date' zastąpiłem wyrazem 'dat', do posta wkleiłem opis błędu jaki zwrócil MS SQL dla nowej procedury i zapomnialem dopisac e aby było zgodne z postem. To nie dotyczy literówki tylko tego że SQL chce aby '@date_now' było wartością skalarną, kiedy tak jak jest jest dobrze i to jest tekstem... Oczywiscie to wszystko kiedy jest jako normalny skrypt działa poprawnie. Moze problem dotyczy tego że po stworzeniu procedury wywołuje się ją EXEC a wewnątrz niej jest jeszcze jeden exec...
Krzysztof Olszewski
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?=
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=
[Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?=
=?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
mysql i mysql-front, problem
String line; if (line=="cos"){...}....problem
zanotowane.pldoc.pisz.plpdf.pisz.plmelooonka.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|