2016-05-05 19 views
0

Ich habe 2 Funktionen Benutzer definiert, die eine Tabelle zurück: Können sagen, sie UDF1 und UDF2Sybase -User Defined Functions

select * from UDF1(param1) -> gibt 1 Ergebnis

select * from UDF2(param2) -> gibt 1 Ergebnis

Das Problem ist, wenn ich mache

select * from UDF1(param1) union all select * from UDF2(param2) -returns nur 1 Ergebnis.

Idealerweise sollte es 2 Ergebnisse als eine Union alle zurückgeben.

Kann mir jemand helfen, warum dieses Verhalten in Sybase beobachtet wird?

Der genaue Code lautet wie folgt: Erstellt Funktion wie folgt:

EXEC SQL. 
CREATE FUNCTION "ZCHECK_4" ( 
    @COL3_VAL smallint 
) 
RETURNS TABLE ( 
    "COL1" varchar(000030), 
    "COL2" varchar(000030), 
    "COL3" smallint 
) AS RETURN SELECT 
    "ZTESTFUNC"."COL1", 
    "ZTESTFUNC"."COL2", 
    "ZTESTFUNC"."COL3" 
FROM "ZTESTFUNC" "ZTESTFUNC" 
WHERE "ZTESTFUNC"."COL3" = @COL3_VAL 
ENDEXEC. 

Finale Sql Ansicht -> Welche nur 1 Zeile

CREATE VIEW "ZCHECK_5" AS SELECT 
    "ZCHECK_4"."COL1", 
    "ZCHECK_4"."COL2", 
    "ZCHECK_4"."COL3" 
FROM "ZCHECK_4"( 
    CAST( 
    20 AS TINYINT 
) 
) "ZCHECK_4" 
UNION ALL SELECT 
    "ZCHECK_4"."COL1", 
    "ZCHECK_4"."COL2", 
    "ZCHECK_4"."COL3" 
FROM "ZCHECK_4"( 
    CAST( 
    10 AS TINYINT 
) 
) "ZCHECK_4" 

Hinweis ist returing: die zugrunde liegende Tabelle (ZTESTFUNC) hat 2 Datensätze, die ich validiere.

+0

können Sie den Code für UDF1 & 2 einfügen – Meet

+0

Vielleicht ist dies ein Fall, in dem zusätzliche (theoretisch nutzlose) Klammern helfen würden: '(wählen Sie * aus UDF1 (param1)) union all (wählen Sie * aus UDF2 (param2))' –

Antwort

0

Offenbar für eine UDF (benutzerdefinierte Funktion) würde Syntax nach einer SELECT-Anweisung einer Funktion vom Sybase-Compiler ignoriert werden.

Betrachten Sie die unten sceanrio:

Select F1 UNION ALL F2. F1 und F2 sind UDF mit Parametern, der markierte Text wird nicht in Sybase kompiliert. Es könnte eine Einschränkung von Sybase sein.

Hinweis: Dies ist kein Fall mit Tabellen oder Ansichten, wo Union alles einwandfrei funktioniert.