Oracle 用の ADO.Net プロバイダーを使用して、セミコロンで区切られた 2 つの select ステートメントを実行しています。system.Data.OracleClient データ プロバイダーを使用しています。ただし、ADO.Net コードの実行時に無効な文字エラーが発生するため、Oracle はセミコロンを好まないようです。同じデータベーストリップで両方の SELECT ステートメントを実行する必要があるため、これをどのように解決できるかについてのアイデアはありますか?
string sql = @"
WITH
x AS
(
SELECT
RowNum AS RowIndex,
CAST(Contract_Id AS VARCHAR2(1000)) Contract_Id,
Contract_Number,
Name AS Contract_Name,
Contract_Number
|| ' '
|| Name AS Contract_Description,
Eff_Date,
Expiry_Date
FROM
contracts
WHERE
contract_number LIKE :ContractSearchText
OR name LIKE :ContractSearchText
)
SELECT
*
FROM
x
WHERE
RowIndex >= :StartingRowIndex
AND RowIndex < (:StartingRowIndex + :MaxRows) ;
SELECT
COUNT(*)
FROM
contracts
WHERE
contract_number LIKE :ContractSearchText
OR name LIKE :ContractSearchText;
";
アップデート
アレックスの返信は、私が見つけた最良の回答です。しかし、テーブルが 2 回ヒットしたのか 1 回だけヒットしたのかはわかりません。代替クエリは、カウント派生テーブルを使用した CROSS JOIN の作成に依存しています。この代替回答でテーブルが1回だけヒットした場合、誰かが教えてくれますか?
WITH
x AS
(
SELECT
RowNum AS RowIndex,
CAST(Contract_Id AS VARCHAR2(1000)) Contract_Id,
Contract_Number,
Name AS Contract_Name,
Contract_Number
|| ' '
|| Name AS Contract_Description,
Eff_Date,
Expiry_Date
FROM
vha_int_contract
WHERE
contract_number LIKE :ContractSearchText
OR name LIKE :ContractSearchText
),
y as ( select count(distinct contract_id) TotalCount from x)
SELECT
*
FROM
x cross join y
WHERE
RowIndex >= :StartingRowIndex
AND RowIndex < (:StartingRowIndex + :MaxRows)