我从
中选择了3个表格SELECT STUDENT_ID, STUDENT_CLASS FROM STUDENT;
SELECT EMP_NAME, EMP_SKILL FROM EMP;
SELECT PATIENT_NAME, DISEASE FROM PATIENT;
注意:这3个表之间没有关系,但我需要在函数中使用它,所以我可以将它传递给API。
我有一个GET_DATA函数。我需要使用单一返回返回所有3个表,这可能吗?
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;
答案 0 :(得分:1)
根据Gordon的建议,使用UNION ALL是解决方案
SELECT STUDENT_ID, STUDENT_CLASS FROM STUDENT
UNION ALL
SELECT EMP_NAME, EMP_SKILL FROM EMP
UNION ALL
SELECT PATIENT_NAME, DISEASE FROM PATIENT
但请记住:
如果您不对列进行别名,则结果集的列名称将是第一个查询的列名称
如果您的列具有混合数据类型(CHAR / NUMBER / ..),则最终会出现以下错误:
ORA-01790:表达式必须与对应的数据类型相同 表达
绕过这个,将你的数字列(如果有的话)转换成CHAR
你最终应该得到这样的结论:
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