ďťż
 
Problem z funkcją wewnątrz procedury - MS SQL 2005 ďťż
 
Problem z funkcją wewnątrz procedury - MS SQL 2005
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • melooonka.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com