我對Oracle中的綁定變量的正確使用日期感到困惑。這不在數據庫內或使用PL/SQL時,而是通過OCI接口與Oracle進行交互時,需要使用to_date函數將日期作爲字符串傳入。正確使用綁定變量和Oracle中的日期?
我還以爲是正確的做法,以確保正確使用綁定變量是做到以下幾點:
to_date(:my_date, :my_date_format)
其中的日期格式不使用結合做然而,我見過的方法,所以我有點困惑。
任何人都可以證實這一點或建議最好的辦法?
我對Oracle中的綁定變量的正確使用日期感到困惑。這不在數據庫內或使用PL/SQL時,而是通過OCI接口與Oracle進行交互時,需要使用to_date函數將日期作爲字符串傳入。正確使用綁定變量和Oracle中的日期?
我還以爲是正確的做法,以確保正確使用綁定變量是做到以下幾點:
to_date(:my_date, :my_date_format)
其中的日期格式不使用結合做然而,我見過的方法,所以我有點困惑。
任何人都可以證實這一點或建議最好的辦法?
日期格式是否爲常量?還是在運行時更改?
通常情況下,你知道字符串是什麼格式(至少是預期的),所以日期格式是一個常數。如果某個東西是一個常數,那麼就沒有必要把它變成一個綁定變量,它可以作爲聲明的一部分進行硬編碼。在這種情況下,這兩種方法都無關緊要,但有些情況下,您寧願在SQL語句中對值進行硬編碼,因爲您希望爲優化程序提供更多信息(想想您的數據高度偏斜的列'一直在尋找一個特定的硬編碼值)。另一方面,如果日期格式在運行時更改,因爲有人正在傳遞日期的字符串表示形式以及該字符串與您的過程相關的格式,那麼將日期格式視爲綁定變量。
謝謝賈斯汀。該日期格式不會改變。它是有道理的,你說的硬編碼它。除此之外,使用to_date綁定變量的正確方法是什麼? – TrojanName
@BrianFenton - 綁定變量應該在數據在運行時改變的地方使用。如果日期格式沒有改變,我不會使用綁定變量。然而,在這種情況下,從功能或性能的角度來看,這並不重要。 –
謝謝賈斯汀,接受了答案 – TrojanName
回答你的問題是,它取決於...
如果你動態地創建DATE_FORMAT,那麼你應該使用綁定變量來讓自己的SQL注入安全。如果你沒有動態創建日期格式,那麼它已經是硬編碼,並且沒有什麼意義。
select to_date(:my_date,'yyyymmdd') from dual
是安全的,但無論如何:
select to_date(:my_date,:my_date_format) from dual
真的應該綁定。
這是假設:my_date不是一個列,在這種情況下它根本不能是一個綁定變量。
如果您綁定:my_date
,雖然您將一個靜態日期傳遞給Oracle,但不使用列,那麼無需OCI就可以爲您解決這個問題(我不確定,從來沒有使用過它)。
你能描述你想要做什麼以及錯誤是什麼? –
@FlorinGhita,沒有錯誤。想象一下,用戶選擇一個日期的網頁。它被傳遞到一個報告中,該報告根據該日期的值返回數據。這些數據由帶有WHERE子句的SQL查詢生成,該子句在日期進行過濾。我想確保WHERE子句使用綁定變量。 – TrojanName