[英]'ORA-00933: SQL command not properly ended' when executing multiple Select statements in C#
我想從下面的代碼中的兩個Select
語句中檢索數據,我得到了
Oracle.DataAccess.Client.OracleException:'ORA-00933:SQL命令未正確結束'
例外。
編輯:實際上,我用以下查詢替換了查詢: "Select id from T_penalty_order; Select id from T_payment;"
而且我仍然遇到相同的錯誤
“ Oracle.DataAccess.Client.OracleException:'ORA-00933:SQL命令未正確結束'
using (var connection = new OracleConnection(connectionString))
using (var command = connection.CreateCommand())
{
connection.Open();
command.CommandText = "select id from t_penalty_order where protokol_no = :invoiceNumber; select A.NAME, A.SURNAME , A.FATHER_NAME, P.PROTOKOL_NO, P.PROTOKOL_TARIHI , P.PENALTY_FINE, A.FIN, PA.AMOUNT, P.LOCATION_DESCRIPTION, P.QARAR_TARIHI , e.name as \"KANUN\", P.IS_PAID from t_penalty_order p JOIN t_applicant a on p.applicant_id = a.id JOIN t_payment pa on p.id = pa.penalty_order_id JOIN t_penalty_order_kanun_maddesi km ON KM.PENALTY_ORDER_ID = p.id JOIN t_enum_value e ON km.kanun_maddesi_enum = e.id where km.kanun_maddesi_enum = e.id and p.protokol_no = :invoiceNumber group by a.name, a.surname, A.FATHER_NAME, P.PROTOKOL_NO, P. PROTOKOL_TARIHI , P.PENALTY_FINE, A.FIN, PA.AMOUNT, P.LOCATION_DESCRIPTION, P.QARAR_TARIHI , e.name, P.IS_PAID;";
command.Parameters.Add(new OracleParameter(@"invoiceNumber", OracleDbType.Varchar2, 255)).Value = request.identificationCode.invoiceNumber;
using (var reader = command.ExecuteReader())
{
do
{
while (reader.Read())
{
generalInfoResponse.account = new Account();
generalInfoResponse.account = null;
generalInfoResponse.invoice = new Invoice[1];
generalInfoResponse.invoice = null;
generalInfoResponse.response = new Response();
generalInfoResponse.response.code = 111;
generalInfoResponse.response.message = reader.GetInt32(0).ToString();
}
//Console.WriteLine("--next command--");
} while (reader.NextResult());
}
}
請格式化查詢,使其保持可讀性 ,您可以輕松地看到許多討厭的語法錯誤:
command.CommandText =
@"select id
from t_penalty_order
where protokol_no = :invoiceNumber; -- <- Do you really want to perform next query?
select A.NAME,
A.SURNAME,
A.FATHER_NAME,
P.PROTOKOL_NO,
P.PROTOKOL_TARIHI,
P.PENALTY_FINE,
A.FIN,
PA.AMOUNT,
P.LOCATION_DESCRIPTION,
P.QARAR_TARIHI,
e.name as ""KANUN"", -- <- double quots in case of verbatim strings @"..."
P.IS_PAID
from t_penalty_order p
join t_applicant a ON p.applicant_id = a.id
join t_payment pa ON p.id = pa.penalty_order_id
join t_penalty_order_kanun_maddesi km ON KM.PENALTY_ORDER_ID = p.id
join t_enum_value e ON km.kanun_maddesi_enum = e.id
where km.kanun_maddesi_enum = e.id
and p.protokol_no = :invoiceNumber
group by a.name,
a.surname,
A.FATHER_NAME,
P.PROTOKOL_NO,
P.PROTOKOL_TARIHI, -- <- Not P. PROTOKOL_TARIHI
P.PENALTY_FINE,
A.FIN,
PA.AMOUNT,
P.LOCATION_DESCRIPTION,
P.QARAR_TARIHI,
e.name,
P.IS_PAID;";
編輯:如果您堅持要一次性執行兩個查詢,則應通過Oracle中的匿名塊來執行:
command.CommandText =
@"begin -- please, note begin..end anonymous block
open :prm_query1 for
select id
from t_penalty_order
where protokol_no = :invoiceNumber;
open :prm_query2 for
select A.NAME,
A.SURNAME,
A.FATHER_NAME,
P.PROTOKOL_NO,
P.PROTOKOL_TARIHI,
P.PENALTY_FINE,
A.FIN,
PA.AMOUNT,
P.LOCATION_DESCRIPTION,
P.QARAR_TARIHI,
e.name as ""KANUN"",
P.IS_PAID
from t_penalty_order p
join t_applicant a ON p.applicant_id = a.id
join t_payment pa ON p.id = pa.penalty_order_id
join t_penalty_order_kanun_maddesi km ON KM.PENALTY_ORDER_ID = p.id
join t_enum_value e ON km.kanun_maddesi_enum = e.id
where km.kanun_maddesi_enum = e.id
and p.protokol_no = :invoiceNumber
group by a.name,
a.surname,
A.FATHER_NAME,
P.PROTOKOL_NO,
P.PROTOKOL_TARIHI,
P.PENALTY_FINE,
A.FIN,
PA.AMOUNT,
P.LOCATION_DESCRIPTION,
P.QARAR_TARIHI,
e.name,
P.IS_PAID;
end;";
不要忘記聲明:prm_query1
和:prm_query2
command.Parameters.Add(":prm_query1", OracleDbType.RefCursor).Direction =
ParameterDirection.Output;
command.Parameters.Add(":prm_query2", OracleDbType.RefCursor).Direction =
ParameterDirection.Output;
通過ExecuteReader()
執行時,我們應借助NextResult()
讀取每個游標:
using (var reader = command.ExecuteReader()) {
int queryIndex = 1;
do {
while (reader.Read()) {
//TODO: Read values here
// Convert.ToString(reader[0]);
}
queryIndex += 1;
}
while(reader.NextResult());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.