2016-07-29 26 views
1

Ich habe 3 Tabellen ausgewählt ausOracle - Rückkehr mehrere Tabellen

SELECT STUDENT_ID, STUDENT_CLASS FROM STUDENT; 
SELECT EMP_NAME, EMP_SKILL FROM EMP; 
SELECT PATIENT_NAME, DISEASE FROM PATIENT; 

Hinweis: Es gibt keine Beziehung zwischen diesen drei Tabellen, aber ich brauche diese in der Funktion, so kann ich es an die API übergeben.

Ich habe eine Funktion GET_DATA. Ich muss alle 3 Tabellen mit Single Return zurückgeben, ist das möglich?

FUNCTION GET_DATA(PARA1 NUMBER DEFAULT 1,PARA2 NUMBER DEFAULT 1)RETURN SYS_REFCURSOR AS 
    RESULT SYS_REFCURSOR; 
BEGIN 

OPEN RESULT FOR SELECT STUDENT_ID, STUDENT_CLASS FROM STUDENT; 
OPEN RESULT FOR SELECT EMP_NAME, EMP_SKILL FROM EMP; 
OPEN RESULT FOR SELECT PATIENT_NAME, DISEASE FROM PATIENT; 
    RETURN RESULT ; 
END GET_DATA; 
+3

Verwenden 'Vereinigung all'. –

Antwort

1

Wie von Gordon vorgeschlagen, ist UNION ALL mit der Lösung

SELECT STUDENT_ID, STUDENT_CLASS FROM STUDENT 
UNION ALL 
SELECT EMP_NAME, EMP_SKILL FROM EMP 
UNION ALL 
SELECT PATIENT_NAME, DISEASE FROM PATIENT 

Bedenken Sie jedoch, dass:

  1. Wenn Sie alias nicht die Spalten, die Spaltennamen der Resultset wird die der ersten Abfrage sein

  2. Wenn Sie gemischte Datentypen für Ihre Spalte haben UMNS (CHAR/NUMBER/..) Sie werden mit dem folgenden Fehler am Ende:

ORA-01790: Ausdruck muss denselben Datentyp haben als Ausdruck

entspricht dies zu umgehen , werfen Sie Ihre numerischen Spalten (falls vorhanden) auf CHAR

  1. Es ist besser, eine Spalte hinzuzufügen, die definiert, aus welcher Tabelle die Datensätze stammen, wie es wahrscheinlich in den Programmen mit der API erforderlich sein wird

Sie sollten also mit etwas am Ende wie folgt:

SELECT 'STUDENT' AS ORIGTABLE, TO_CHAR(STUDENT_ID) As COL1 , STUDENT_CLASS AS COL2 FROM STUDENT 
UNION ALL 
SELECT 'EMP' AS ORIGTABLE, EMP_NAME AS COL1, EMP_SKILL AS COL2 FROM EMP 
UNION ALL 
SELECT 'PATIENT' AS ORIGTABLE, PATIENT_NAME AS COL1, DISEASE AS COL2 FROM PATIENT