2012-08-28 53 views
-1

關於爲什麼以下行抱怨DATEPART沒有被定義爲標識符的任何想法?Oracle:必須定義DatePart ...?

IF DATEPART(v_ExpireTime, year) = 1899 THEN v_ExpireTime := NULL;

它返回: Error(68,10): PLS-00201: identifier 'DATEPART' must be declared

編輯:沒關係,我找到了答案。我現在做的事:

IF to_number(to_char(v_ExpireTime, 'YY')) = 1899 THEN v_ExpireTime := NULL;

回答

2

正如您已經發現的那樣,DATEPART是一個SQL Server功能,而不是Oracle。您已經顯示的替代方案to_number(to_char(v_ExpireTime, 'YY'))會給您一個兩位數的價值,所以如果您的日期的一部分是它只會返回99,所以您不會得到一個匹配。您可以使用四位數年份日期格式模型YYYY而不是YY

另一種選擇是使用extract function

IF extract(year from v_ExpireTime) = 1899 THEN ... 
+0

乾杯亞歷克斯。 Oracle現在抱怨v_ExpireTime不能用作賦值目標(我在猜測'v_ExpireTime:= NULL;'部分)。我應該如何解決這個問題? – Skulmuk

+0

不同的問題,但是......猜測它是存儲過程的'IN'參數?您可以將其設置爲「IN OUT」,這可能會在客戶端產生意想不到的副作用,或者添加一個分配了原始值的本地變量,並在此情況下重置爲空。 –

1

如果我是正確的那是因爲DATEPART不是PLSQL庫的一部分,所以它不知道你在做什麼。第二種方法是PLSQL。

相關問題