Oracleデータベースを使用しています。単一のselectクエリを使用してデータをフェッチしようとすると、データセット内に単一のテーブルが返されました。 2-3(複数の)テーブルを持つデータセットを取得できるOracleで選択クエリまたはプロシージャを作成するにはどうすればよいですか?複数の結果セットを返すための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();
これらのテーブルに参加する必要がある場合は、通常の結合を使用してクライアント上で結果を分割することもできます(これは多くのORMがそれを行う方法です)。
+0
あなたのソリューションは本当に助けになりました。 – ABC
関連する問題
- 1. Oracleストアドプロシージャの複数の結果セット
- 2. JdbcTemplate複数の結果セット
- 3. BLToolkit:複数の結果セット?
- 4. Oracleの匿名ブロックの複数の結果セット
- 5. cfcから複数のストアドプロシージャの結果セットを返す
- 6. 複数の結果セットを返すストアドプロシージャから挿入する
- 7. 複数の結果セットを返すストアドプロシージャを持つSimple.data
- 8. 複数の結合結果セット
- 9. カーソル(結果セット)を返す関数
- 10. 複数の結果セットを含むFSharp.Data.SqlClient
- 11. デメリット(複数のアクティブな結果セット)
- 12. SQL Azureストアドプロシージャ複数の結果セット
- 13. DataTable.Load複数結果のDataReaderで次の結果セットにスキップ
- 14. 結果セットがOracleクエリーを使い果たしました
- 15. JDBC:1つのデータベース呼び出しで複数の結果セットを返す - Oracleでは機能しない
- 16. どのように複数の行をカウントし、結果を返すために、PL/SQLのOracleパッケージ内
- 17. oracleストアドプロシージャから結果セットを取得
- 18. mybatisは複数の結果セットを返すストアドプロシージャをサポートしていますか?
- 19. Oracle SQL - 複数のテーブルの結果セットの1つの列の同じ列の値を結合する
- 20. innerHTMLで複数の結果を返す
- 21. 複数の結果を返す
- 22. 実際の結果よりも少ない行数を返す結果セット
- 23. oracleプロシージャを使用した結果セットの取得
- 24. Azure Easy API JavaScript:MSSQLクエリから複数の結果セットを返す方法
- 25. 複数のフィールドを持つMongoDBテキスト検索重複結果セット
- 26. みとめ結果セット1.0
- 27. コード複数の結果を返すための最初の呼び出しストアドプロシージャ
- 28. 複数のテーブルの同じ結果セットを1つの結果セットにマージする
- 29. 複数の結果セットをT-SQLの結合と組み合わせた
- 30. 結果セットを返す方法
は、uは2-3のテーブルを結合し、SELECT文を使用してデータを取得したいですか? – Teja
テーブルが関連している場合と関連付けられていない場合があります。しかし、データベースのヒット数を減らすために、1回のヒットで複数のテーブルを取得したいと考えています。 – ABC
あなたのテーブルは何ですか?何を試しましたか? –