Wywołanie procedury z parametrami dynamicznymi

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, obiekty COM .NET

Moderator: mikey

aga
Posty: 24
Rejestracja: 01 paź 2011, 00:01
Rola: Użytkownik CDN XL
Wersja: 9.8

Wywołanie procedury z parametrami dynamicznymi

Post autor: aga »

Witam

Chciała utworzyć raport, który parametry dynamiczne wprowadza do zdefiniowanej procesory.
Niestety podczas generowania raportu pojawia się błąd "Incorrect syntax near the keyword 'CONVERT'." gdy typ akcji jest "zapytanie sql" lub "Brak zdefiniowanego typu CallView dla kodu = EXEC [CDN].[RAPORT_O] Parameter name: callViewCode" gdy typ akcji jest "wywołanie procedury"

Prośba o podpowiedź co tutaj jest nie tak

Kod w Optimie

Kod: Zaznacz cały

@PAR ?@R(select twp_twpId, twp_nazwa from cdn.typwyplata )|Dodatek1|&Dodatek1:'<wybierz dodatek>' @? PAR@
@PAR ?@D17|Data1|&Data1:{DateClwLastDay('m')}@? PAR@
@PAR ?@D17|Data_dla_Wydziału|&Data_dla_Wydziału:{DateClwLastDay('m')}@? PAR@

exec [CDN].[raport_O] (??Data_dla_Wydziału,??Data1,??Dodatek1)
Kod procedury

Kod: Zaznacz cały

USE [BAZA_XXX]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [CDN].[raport_O] 
(
@Data_dla_Wydziału as date,
@Data1 as date ,
@Dodatek1 as int 
)
AS
SET NOCOUNT ON
BEGIN
	select
	PRI_Nazwisko + ' '+ pri_imie1 as [Pracownik]
	,(select cdn.DzialSciezka(PRE_DzlId)
		from cdn.PracEtaty
		join cdn.Dzialy on PRE_DzlId=dzl_dzlid
		where PRE_PraId = PRI_PraId and @Data_dla_Wydziału>=pre_dataod and @Data_dla_Wydziału<=PRE_DataDo)  as [Wydział]  
     , DOH_Wartosc1 as [Wartość]
	 , @data1 as[data]

from cdn.Dodatki
	join cdn.DodatkiHist on DOD_DodId=DOh_DodId
	join cdn.TypWyplata on DOH_TwpId=twp_twpid
	join cdn.Pracidx on dod_praid=PRI_PraId 

where pri_typ=1 and @Data1 >= DOH_WaznyOd and @Data1 <= DOH_WaznyDo and  DOH_TwpId in (@Dodatek1)

END


Awatar użytkownika
STAY_PJE
Posty: 646
Rejestracja: 24 wrz 2009, 12:08
Rola: Konsultant CDN XL
Lokalizacja: Warszawa i od Helu do Wawelu
Kontakt:

Re: Wywołanie procedury z parametrami dynamicznymi

Post autor: STAY_PJE »

Argumenty w procedurze podaje się bez nawiasów. Najpewniej na tym polega błąd u Ciebie.
Argumenty w nawiasach podaje się tylko dla funkcji.

aga
Posty: 24
Rejestracja: 01 paź 2011, 00:01
Rola: Użytkownik CDN XL
Wersja: 9.8

Re: Wywołanie procedury z parametrami dynamicznymi

Post autor: aga »

niestety usunięcie nawiasów nie pomogło.

Po wygenerowaniu raportu w O! pojawia się okno "Podgląd definicji przed testowym wykonaniem analizy"

Kod: Zaznacz cały

exec [CDN].[raport_O] CONVERT(DATETIME,'2014-09-30', 120),CONVERT(DATETIME,'2014-09-30', 120),132
a następnie występuje błąd

Kod: Zaznacz cały

Incorrect syntax near the keyword 'CONVERT'.
Jak ręcznie usunę funkcję convert, jak niżej do raport się wygeneruje. Co zrobić aby funkcja convert nie pojawiała się automatem?

Kod: Zaznacz cały

exec [CDN].[raport_O] '2014-09-30','2014-09-30',132

balascior
Posty: 166
Rejestracja: 27 lis 2012, 17:22
Rola: Administrator CDN XL
Wersja: 2014

Re: Wywołanie procedury z parametrami dynamicznymi

Post autor: balascior »

hej,

a spróbuj pomiędzy parametry dynamiczne wcisnąć zmienne sql i dopiero je przekazać do execa i zamiast:
aga pisze: Kod w Optimie

Kod: Zaznacz cały

@PAR ?@R(select twp_twpId, twp_nazwa from cdn.typwyplata )|Dodatek1|&Dodatek1:'<wybierz dodatek>' @? PAR@
@PAR ?@D17|Data1|&Data1:{DateClwLastDay('m')}@? PAR@
@PAR ?@D17|Data_dla_Wydziału|&Data_dla_Wydziału:{DateClwLastDay('m')}@? PAR@

exec [CDN].[raport_O] (??Data_dla_Wydziału,??Data1,??Dodatek1)
wstawić do Optimy:

Kod: Zaznacz cały

@PAR ?@R(select twp_twpId, twp_nazwa from cdn.typwyplata )|Dodatek1|&Dodatek1:'<wybierz dodatek>' @? PAR@
@PAR ?@D17|Data1|&Data1:{DateClwLastDay('m')}@? PAR@
@PAR ?@D17|Data_dla_Wydziału|&Data_dla_Wydziału:{DateClwLastDay('m')}@? PAR@

declare @data1 datetime = ??Data1
declare @data_dla_wydzialu datetime = ??Data_dla_Wydziału
declare @dodatek int = ??Dodatek1

exec [CDN].[raport_O]  @data_dla_wydzialu,@data1,@dodatek

może zadziała, podpowiadam trochę na czuja :D

EDIT:
No i doczytałem, że parametrem execa nie może być funkcja i trzeba convert przeciągnąć przez zmienną jak powyżej.
pozdrawiam,
Balaścior

Awatar użytkownika
STAY_PJE
Posty: 646
Rejestracja: 24 wrz 2009, 12:08
Rola: Konsultant CDN XL
Lokalizacja: Warszawa i od Helu do Wawelu
Kontakt:

Re: Wywołanie procedury z parametrami dynamicznymi

Post autor: STAY_PJE »

Do procedury nie możesz przekazać argumentów w postaci wartości przeliczeniowych. Wartości muszą zostać przeliczone wcześniej.
Umieść w raporcie typu wykres odpowiednie polecenie przeliczania argumentów, a następnie przekaż do procedury gotowe argumenty.
Przykładowo:

Kod: Zaznacz cały

declare @data1 smalldatetime, @data2 smalldatetime
set @data1=CONVERT(DATETIME,'2014-09-30', 120),
set @data2=CONVERT(DATETIME,'2014-09-30', 120)
exec [CDN].[raport_O] @data1, @data2,132
Z resztą o tym samym pisze poprzednik.

aga
Posty: 24
Rejestracja: 01 paź 2011, 00:01
Rola: Użytkownik CDN XL
Wersja: 9.8

Re: Wywołanie procedury z parametrami dynamicznymi

Post autor: aga »

dodałam zmienne i raport śmiga
dziękuje

ODPOWIEDZ