2011-12-13 28 views
4

我得到了一個選擇語句工作(沒有語法錯誤,並返回所需的結果),但當我嘗試在視圖中使用相同的select語句時出現錯誤。我認爲它與「=>」有關,以命名參數。我可以使用在視圖中使用「=>」語法參數的函數嗎?

select SDO_UTIL.AFFINETRANSFORMS(
    geometry => STRTS.GEOMETRY, 
    translation => 'FALSE', tx => 0.0, ty => 0.0, tz => 0.0, 
    scaling => 'TRUE', psc1 => 
    MDSYS.SDO_GEOMETRY(3001, NULL, SDO_POINT_TYPE(0, 0, 0), NULL, NULL), 
    sx => 0.8, sy => 0.8, sz => 0.8, 
    rotation => 'FALSE', p1 => NULL, 
    line1 => NULL, angle => 10.0, dir => 2, 
    shearing => 'FALSE', shxy => 0.0, 
    shyx => 0.0, shxz => 0.0, shzx => 0.0, shyz => 0.0, shzy => 0.0, 
    reflection => 'FALSE', pref => NULL, lineR => NULL, dirR => 0, 
    planeR => 'FALSE', n => NULL, bigD => NULL) AS GEOMETRY 
FROM (
    SELECT 
    MDSYS.SDO_GEOMETRY(3002, NULL, NULL, 
    SDO_ELEM_INFO_ARRAY(1, 2, 1), 
    SDO_ORDINATE_ARRAY(-90, 30, 0, -90, 30, 0)) 
    as GEOMETRY 
    FROM DUAL) STRTS 

我簡化了聲明,只使用了雙重使其更容易重現。我有一個線性幾何圖形的表格,我將使用它來代替「SELECT ... FROM DUAL」,並用一種​​方法從線條中拉出一個點用於psc1。

使用的SQLDeveloper的測試語法時,我得到的錯誤是

Error(s) parsing SQL: Unexpected token at 45 near =>. 

第一個「=>」是45個字符到字符串,所以我想,這裏還有一些關於在創建視圖中使用它無效。

我很確定我可以通過創建一個不使用此「=>」語法的函數來解決此問題,但希望有一種方法可以直接從創建視圖調用此oracle函數。

編輯:所以它似乎sqldeveloper/sqlplus支持像命名參數的東西。我添加了有關命名參數(/ * named_pa​​ram => * /)的註釋以停止使用命名參數語法。現在它只是一個「錯誤的數字或類型的參數」錯誤。不幸的是,我將所有參數按照Oracle在線文檔(從http://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_util.htm#BJEGCCDF)中顯示的順序排列。所以我想這成爲如何找到我的函數參數的正確順序的問題。

回答

5

是的,你可以,但只有自Oracle 11G以來。在此之前,任何SQL語句中都只允許使用位置表示法,其中包括視圖定義。

+1

這是正確的,除了可能sqldeveloper仍然有一些使用命名參數創建視圖對話框的問題。我將相同的文本放入一個sql文件並從sqlplus中執行它,並最終能夠添加視圖。謝謝。 – jmc 2011-12-13 23:48:53

相關問題