Emmablakes Ответов: 1

ORA-00936: отсутствует ошибка выражения из моего метода ниже


пожалуйста, помогите устранить это сообщение об ошибке.

я предполагаю, что проблема может быть связана с параметром, который я передаю в запросе oracle.

пожалуйста, просто помогите разобраться и посмотреть, что я делаю неправильно.

спасибо

Что я уже пробовал:

public string getEMails(string staffid)
{
используя (объекта oracleconnection OracleConn = нового объекта oracleconnection(или))
{
OracleConn.Открыть();
пробовать
{
query = "ВЫБЕРИТЕ uetc.team_codes, LPAD (papf.employee_number, 5, 0) staff_id, papf.full_name full_name, papf.email_address, LPAD (papf1.employee_number, 5, 0) supervisor_id, papf1.full_name_address_papf1.full_name, papf1.full_name, papf1.email_name супервизора" hl.location_code, SUBSTR (hl.location_code, 1, 3) branch_code, SUBSTR (hl.location_code, 6) branch_name, hl.loc_information15 имя_региона, hl.loc_information14 имя_зоны FROM per_all_people_f papf, per_all_assignments_frjobs papf, per_all_assignments_frjobs papf, per_all_assignments_frjobs papf , hr_all_organization_units haou, per_all_people_f papf1, per_all_assignments_f paaf1, per_grades PG1, per_jobs PJ1, hr_locations_all HL1, hr_all_organization_units haou1, ub_emp_team_codes_new uetc ГДЕ papf.person_id = paaf.person_id И papf.current_employee_flag = 'Y' И SYSDATE МЕЖДУ papf.effective_start_date И papf.effective_end_date И paaf.primary_flag = 'Y' И papf.employee_number <7000 И papf.employee_number <> 00000 И SYSDATE МЕЖДУ paaf.effective_start_date И paaf.ef fective_end_date И paaf.grade_id = pg.grade_id (+) И paaf.job_id = pj.job_id (+) И paaf.location_id = hl.location_id (+) И paaf.organization_id = haou.organization_id (+) AND paaf.supervisor_id = papf1.person_id (+) И papf1.person_id = paaf1.person_id (+) И papf1.current_employee_flag (+) = 'Y' И ДАТА СИНХРОНИЗАЦИИ МЕЖДУ papf1.effective_start_date (+) И papf1.effective_end_date (+) ) = 'Y' И SYSDATE МЕЖДУ paaf1.effective_start_date (+) AND paaf1.effective_end_date (+) И paaf1.grade_id = pg1.grade_id (+) И paaf1.job_id = pj1.job_id (+) И paaf1.location_id = hl1. location_id (+) И paaf1.organization_id = haou1.organization_id (+) И papf.person_id = uetc.person_id (+) И uetc.person_id (+) = papf.person_id И papf.employee_number = @staff_id ";
OracleCommand OraC = new OracleCommand(query, OracleConn);
OraC.CommandType = CommandType. Text;
Орак.Параметры.Добавить(новый OracleParameter("@staff_id", OracleDbType.Varchar2)).Значение = staffid;
// OraC.Parameters.Добавить(новый OracleParameter("идентификатора session_id", OracleDbType.Varchar2)).Значение = Код Сеанса;
// OraC.Parameters.Добавить (новый OracleParameter("V_RESULT", OracleDbType.Varchar2, 32767)).Направление = ParameterDirection.Выход;


//OracleDataReader dr = OraC. ExecuteNonQuery();
OracleDataReader dr = OraC. ExecuteReader();
в то время как (dr. Read())
{
SupervisorEmail = dr ["EMAIL_ADDRESS_1"]. ToString();
StaffEmail = dr ["EMAIL_ADDRESS"].Метод toString();
string id = dr ["STAFF_ID"].Метод toString();

}

}
поймать (исключение бывший)
{

например, сообщение.Метод toString();
}
наконец
{
OracleConn.Рядом();
}
возвращение супервайзера;
//возврат StaffEmail;

}
}

1 Ответов

Рейтинг:
1

Jochen Arndt

Вы действительно ожидаете, что кто-то проверит этот большой SQL-запрос?

Распространенным методом отслеживания таких ошибок является упрощение запроса путем удаления частей до тех пор, пока ошибка не исчезнет.

Это было бы в самом простом варианте:

SELECT * FROM papf WHERE papf.employee_number = @staff_id;


[Обновление с помощью вопрошающего]
С OracleCommand именованные параметры должны иметь префикс двоеточия вместо символа at:
SELECT * FROM papf WHERE papf.employee_number = :staff_id;

[/ОБНОВЛЕНИЕ]


Emmablakes

спасибо @jochen, на самом деле я не ожидаю, что кто-то прочитает этот длинный запрос, но просто хотел показать точно, что я делаю, и получить наилучшее возможное решение, показывающее все.
думал, кто-то сказал, что я не могу использовать @ в параметре oracle, так что именно поэтому я должен был показать все это.

Jochen Arndt

Я не знаю конкретных ограничений Oracle (до сих пор не использовал его; только другие базы данных SQL). Но мой вышеприведенный короткий запрос и некоторые исследования должны дать вам знать.

Похоже, вы правы: используйте двоеточие вместо @. Я обновлю свой ответ.