Oracle 데이터베이스를 사용하고 있습니다. 단일 선택 쿼리를 사용하여 데이터를 가져 오려고 시도하면 데이터 집합에 단일 테이블이 반환됩니다. 오라클에서 선택 쿼리 또는 프로 시저를 작성하는 방법, 여기서 2-3 (다중) 테이블을 가진 데이터 세트를 얻을 수 있습니까?여러 개의 결과 집합을 반환하는 Oracle 쿼리/저장 프로 시저
1
A
답변
1
이것은 내가, 그것은 아주 간단 무슨 짓을했는지 정확히 :
Database db = DatabaseFactory.CreateDatabase("ConnectionString");
object[] results = new object[3];
DbCommand cmd = db.GetStoredProcCommand("DATABASE.SELECT_JOB_HISTORY.GetJobHistoryByEmployeeId",results);
DataSet ds = db.ExecuteDataSet(cmd);
DataTable dt1 = ds.Tables[0];
DataTable dt2 = ds.Tables[1];
4
나는 당신이 당신의 데이터베이스에 대한 왕복을 줄이기를 원한다고 생각하는 한 멀리 생각했다. 이것은 다음과 같은 방법으로 저장 프로 시저에 의해 수행 할 수 있습니다
http://msdn.microsoft.com/en-us/library/ms971506.aspx#msdnorsps_topic6
패키지 헤더 :
CREATE OR REPLACE PACKAGE SELECT_JOB_HISTORY AS
TYPE T_CURSOR IS REF CURSOR;
PROCEDURE GetJobHistoryByEmployeeId
(
p_employee_id IN NUMBER,
cur_JobHistory OUT T_CURSOR
);
END SELECT_JOB_HISTORY;
패키지 :
CREATE OR REPLACE PACKAGE BODY SELECT_JOB_HISTORY AS
PROCEDURE GetJobHistoryByEmployeeId
(
p_employee_id IN NUMBER,
cur_JobHistory OUT T_CURSOR
)
IS
BEGIN
OPEN cur_JobHistory FOR
SELECT * FROM JOB_HISTORY
WHERE employee_id = p_employee_id;
END GetJobHistoryByEmployeeId;
END SELECT_JOB_HISTORY;
클라이언트 :
// create connection
OracleConnection conn = new OracleConnection("Data Source=oracledb;
User Id=UserID;Password=Password;");
// create the command for the stored procedure
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT_JOB_HISTORY.GetJobHistoryByEmployeeId";
cmd.CommandType = CommandType.StoredProcedure;
// add the parameters for the stored procedure including the REF CURSOR
// to retrieve the result set
cmd.Parameters.Add("p_employee_id", OracleType.Number).Value = 101;
cmd.Parameters.Add("cur_JobHistory", OracleType.Cursor).Direction =
ParameterDirection.Output;
// open the connection and create the DataReader
conn.Open();
OracleDataReader dr = cmd.ExecuteReader();
// output the results and close the connection.
while(dr.Read())
{
for(int i = 0; i < dr.FieldCount; i++)
Console.Write(dr[i].ToString() + ";");
Console.WriteLine();
}
conn.Close();
이 테이블에 가입해야하는 경우 일반 조인을 사용하여 결과를 클라이언트에서 분할 할 수 있습니다 (imho가 많은 ORM에서 수행하는 방식 임).
+0
감사합니다. Eggi, 귀하의 솔루션이 실제로 도움이되었습니다. – ABC
관련 문제
- 1. 결과 집합을 반환하는 Oracle 저장 프로 시저
- 2. 여러 결과 집합을 반환하는 저장 프로 시저
- 3. Simple.data 여러 결과 집합을 반환하는 저장 프로 시저 사용
- 4. MySQL - 여러 결과 집합을 사용하는 저장 프로 시저
- 5. 여러 값을 반환하는 프로 시저
- 6. Linq2Sql 디자이너 저장 프로 시저 여러 결과 집합을 단일
- 7. SQL 2005에서 여러 레코드 집합을 반환하는 출력 저장 프로 시저
- 8. cfc에서 여러 저장 프로 시저 결과 집합을 반환
- 9. Codeigniter에서 여러 결과 집합을 사용하는 저장 프로 시저
- 10. R에서 Oracle 저장 프로 시저를 호출 - 결과 집합을 얻는 방법?
- 11. Oracle : 일괄 처리로 여러 프로 시저 호출
- 12. Oracle 저장 프로 시저
- 13. oracle 저장 프로 시저
- 14. CREATE Oracle 프로 시저
- 15. Oracle 저장 프로 시저
- 16. 여러 엔티티의 결과를 반환하는 저장 프로 시저
- 17. Oracle 저장 프로 시저 횟수
- 18. 여러 호출에 대해 동일한 값을 반환하는 Hibernate 저장 프로 시저
- 19. 저장 프로 시저 결과 쿼리
- 20. sql 저장 프로 시저 결과 지우기
- 21. 트리 구조에서 결과 집합을 빌드하는 저장 프로 시저?
- 22. java에서 oracle 저장 프로 시저로 결과 집합을 전달하는 방법
- 23. SQL 저장 프로 시저 결과
- 24. Oracle Java 저장 프로 시저
- 25. Oracle 저장 프로 시저 - 커서
- 26. Oracle SQLDeveloper의 MySQL 프로 시저
- 27. Oracle 저장 프로 시저 벤치마킹
- 28. Oracle 저장 프로 시저 작성
- 29. 여러 커서에서 Oracle 저장 프로 시저의 여러 행을 반환하는 방법?
- 30. 하나의 결과 만 반환하는 Entity Framework 저장 프로 시저
유 2 ~ 3 개 테이블을 조인하고 SELECT 문을 사용하여 데이터를 얻을시겠습니까? – Teja
테이블이 관련이 있거나 다를 수 있습니다. 그러나 데이터베이스 히트 수를 줄이기 위해 단일 히트에서 여러 개의 테이블을 얻고 싶습니다. – ABC
테이블은 무엇이며 무엇을 시도 했습니까? –