簡體   English   中英

在Oracle 11g存儲過程中將日期與時間戳進行比較

[英]Compare Date with Timestamp in oracle 11g stored procedure

我對這個問題感到非常困惑。 我們將Oracle DB與存儲過程一起使用,這些存儲過程從C#中調用。

這是存儲過程中有問題的部分:

  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的IN參數類型。 credated_on是TIMESTAMP的列類型。 我從C#代碼調用此過程,並將C#類型的DateTime用於pi_to_date和pi_from_date。 它不起作用。 我沒有任何結果,但是在數據庫中有一些記錄。 我嘗試了TO_DATE,TO_CHAR之類的功能,但沒有任何效果。 有時我會出錯:

SQL錯誤:ORA-00904:“ APR”:無效的標識符

您能幫我解決這個問題嗎? 謝謝。

編輯:這是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);

DB中記錄着日期為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#會將日期轉換為不同格式的字符串(例如dd / mm / yyyy,DD-MM-YYYY..etc),因此您需要指定也一樣 如果必須使用D-SQL,則where子句應將要傳遞的日期值轉換為使用TO_DATE的日期,並具有與在C#中轉換為的日期格式相同的日期格式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM