SQL UDF를 사용하여 일부 행을 집계하려고합니다. 먼저 자신의 ID가 & 인 행을 선택하고 쉼표로 구분 된 열로 연결합니다. 내 함수에서 for 루프 내부에있는 order by 절에서 오류가 발생했습니다. order by 절을 제거하지 않고이 방법을 사용할 수 있습니까?for 루프 (SQL UDF)
where recId=recId
DB2는 함수 매개 변수와 다른 것으로 이들 중 하나를 원하는 실현되지 않습니다 내 데이터베이스는 DB2
CREATE FUNCTION mySchema.getDates(recId INTEGER)
RETURNS VARCHAR(1024)
LANGUAGE SQL
BEGIN ATOMIC
DECLARE STR VARCHAR(1024);
SET STR = '' ;
LOOP1 : FOR ROW AS (select replace(char(myDate,EUR),'.','/') as myDate from myTable.BookingDates where recId=recId order by rec_crt-id)
DO
IF ROW.myDate IS NOT NULL THEN
SET STR = STR || CAST (ROW.myDate AS VARCHAR (20)) || ', ' ;
END IF ;
END FOR;
RETURN STR ;
END
SQL State: 42601 Vendor Code: -199 Message: [SQL0199] Keyword ORDER not expected. Valid tokens:) UNION EXCEPT. Cause . . . . . : The keyword ORDER was not expected here.
... 왜 이것을 구분 된 열로 사용 하시겠습니까? 대부분의 형식 지정은 응용 프로그램 계층에서 수행해야합니다. DB2의 어떤 버전입니까? 또한 SQL은 일반적으로 루프와 함께 사용하지 않아야합니다. 왜냐하면 대부분의 엔진이 이러한 용어로 '생각'하도록 작성되지 않았기 때문입니다. 그리고 'EUR'는 '모호한'형식으로, 월/일이 반전되어 나타날 수 있습니다 (특히 '표준'분리자를 사용할 때). 이 결과가 나왔다면 아마 미국의 날짜가 정해 졌을 것입니다! 이것은 재귀 적 CTE의 사용을 통해 이루어질 수 있지만, 반드시 해야할지는 모르지만 ... –
@ Clockwork-Muse 자세한 응답을 주셔서 감사합니다.하지만 루프를 사용하지 않는 것에 동의하지만 바보입니다. 요구 사항. 요구 사항은 쿼리에서 이미 반환 된 각 데이터 행의 날짜를 표시해야하는 보고서에 대한 것입니다. 나는 dd/MM/yyyy 형식으로 날짜 형식을 지정하기 위해 EUR를 사용했습니다 (기본값은 yyyy/dd/MM으로 데이터베이스에 저장됩니다). –
@ Clockwork-Muse 재귀에 대해서는 오류가 발생하기 쉽기 때문에 재귀를 사용하고 싶지 않습니다. 재귀 SQL 문에 대한 최대 레벨도 알지 못합니다. –