Я очень смущен этой проблемой. Мы используем Oracle DB с хранимыми процедурами, которые вызывается из C#.Сравнить Дата с отметкой времени в оракуле 11g хранимой процедуры
Это проблематично, часть хранимой процедуры:
IF pi_from_date IS NOT NULL THEN
where_part := where_part || 'and created_on >= ''' || pi_from_date || '''';
END IF;
IF pi_to_date IS NOT NULL THEN
where_part := where_part || 'and created_on <= ''' || pi_to_date || '''';
END IF;
pi_from_date и pi_to_date являются параметрами типа DATE. credited_on - тип столбца TIMESTAMP. Я вызываю эту процедуру из кода C# и использую C# типа DateTime для pi_to_date и pi_from_date. Не работает. Я не получаю никаких результатов, но в DB есть несколько записей. Я пробовал такие функции, как TO_DATE, TO_CHAR, но ничего не работает. Иногда я получаю ошибку:
SQL Error: ORA-00904: "APR": invalid identifier
Не могли бы вы помочь мне решить эту проблему, пожалуйста? Спасибо.
EDIT: Вот C# код:
var parameters = new OracleDynamicParameters();
parameters.Add("pi_from_date", filterData.From); //DateTime.Now.AddMonths(-1);
parameters.Add("pi_to_date", filterData.To); //DateTime.Now.AddMonths(1);
var payments = conn.Query<Payment>("TEST_PCG.find_proc", parameters, commandType: commandType.StoredProcedure);
В БД есть записи с датой 1.8.2013.
Хранимая процедура:
PROCEDURE find_proc (pi_from_date IN DATE,
pi_to_date IN DATE,
items_ret OUT sys_refcursor)
AS
stmt varchar2(32767);
where_part varchar2(32767);
BEGIN
-- select statement part
stmt := 'SELECT * FROM (SELECT a.*, rownum r__ FROM (SELECT * FROM Payment WHERE 1=1 ';
-- where statement part
IF pi_from_date IS NOT NULL THEN
where_part := where_part || 'and created_on >= ''' || pi_from_date || '''';
END IF;
IF pi_to_date IS NOT NULL THEN
where_part := where_part || 'and created_on <= ''' || pi_to_date || '''';
END IF;
stmt := stmt || where_part;
-- get ref cursor from query
OPEN items_ret FOR stmt;
END find_proc;
Вы должны использовать правильно типизированные, параметризованные переменные вместо того, чтобы передавать даты как строки или динамически создавать инструкцию SQL, строя строки. Пожалуйста, покажите часть C# вашего кода. Пожалуйста, также покажите остальную часть sproc - по крайней мере, чтобы мы могли видеть, как создается и выполняется весь оператор. –
Просьба показать вашу настройку вызова C# для этой процедуры и объявление процедуры. – OldProgrammer