在視圖中,我在SOURCE列下有以下值。爲存儲過程重建字符串Oracle
SRC - TERM - randomtext - LOCATION(僅有FYI在源列的格式)
ABC DE RANDOMJIBBERISH MORE RANDOMJIBBERISH FORWARD
ARY HES RANDOMJIBBERISH MORE RANDOMJIBBERISH BACKWARD
IGHE UER RANDOMJIBBERISH MORE RANDOMJIBBERISH LEFT
現在我有一個需要查找基於所述源在該視圖上的查詢。這個工作非常好。現在
SELECT
t.DATE_, t.PX_LAST
FROM
THIS.TABLE_NEW t
WHERE
t.DATE_ >= '2003-03-02'
AND t.DATE_ <= '2013-03-02'
AND t.SOURCE LIKE 'ABC DE % FORWARD' --Where the magic happens
AND t.SOURCE LIKE '%'||'1M'||'%'
AND t.PX_LAST is NOT NULL
ORDER BY
t.DATE_ ASC;
,問題是,當我嘗試在一個存儲過程來實現這一點,我將需要插入百分號我得到的參數。這是不行的,特別是部分地方查找使用內購
PROCEDURE Get_It
(
inSource VARCHAR2,
inStartDate DATE,
inEndDate DATE,
inLength VARCHAR2,
inRC1 OUT SYS_REFCURSOR
) AS
BEGIN
OPEN inRC1 FOR
SELECT t.DATE_, t.PX_LAST
FROM THIS.TABLE_NEW t WHERE
t.DATE_ >= inStartDate
AND t.DATE_ <= inEndDate
AND t.SOURCE LIKE inSource --Where the magic needs to happen
AND t.SOURCE LIKE '%'||length||'%'
AND t.PX_LAST is NOT NULL
ORDER BY t.DATE_ ASC;
END GET_IT;
所以基本上我需要插入的字符串(inSource
)的中間百分號源,最後和二線之間最後一句話,在任何時候。我能夠在查詢中完成它,因爲我可以手動將它放入字符串中,但在實際的存儲過程中,我不知道如何操作字符串。
「這行不通」不是有效的錯誤消息。你需要更加明確。你有什麼工作(如果你使用'inLength'而不是'@ length'作爲@smokeyrobot注意到的),但只有當你將'inSource'作爲一個包含'%'的字符串傳遞給'',看起來就是這個問題吧?你想通過「ABC DE FORWARD」,並將程序翻譯成「ABC DE%FORWARD」?你確定總是會有三個單詞,並且你想要那個位置上的'%'? –