2016-03-04 62 views
0

我寫了一個oracle函數,我需要將數據作爲q'[var]',其中var是一個變量。但是oracle並沒有把它看作一個變量。如何在函數中使用q'[]'運算符與變量

我試過q'['|| var ||']',它不起作用。把q'放在字符串中也是行不通的,因爲它並不讀q作爲操作符。我嘗試了多種組合,但似乎沒有任何工作。我究竟做錯了什麼。

我使用的是oracle 11g。

編輯:其實我正在使用sql加載程序來插入數據。在插入之前的控制文件中,我必須從數據中刪除單引號。

在控制文件中調用REPLACE_QUOTE函數,它發送從文件接收到的列數據。以下我添加了該特定列的控制文件的內容。

COLUMN "MY_SCHEMA.REPLACE_QUOTE(:COLUMN)" 

這裏是函數。

create or replace function REPLACE_QUOTE(v_str in varchar2) return varchar2 
is 
reason varchar2(240); 
begin 
dbms_output.put_line(v_str); 
reason := REPLACE(q'[v_str]','''',null); 
RETURN reason; 
END; 

我試過直接在sql加載器控制文件中的替換函數,但它似乎並沒有工作。我也試過REPLACE_QUOTE(Q'[:COLUMN]),這也行不通。

這裏是刪除引號前的數據。

'Failed to connect to 'http://172.17.70.74:80/xyz.x'' 

我需要刪除引號,因爲此列無法在數據庫中插入。

請幫忙。謝謝。

+0

列每列請編輯您的問題補充功能你寫的。我很好奇你爲什麼認爲你需要使用引用機制來對付已經是變量的東西 - 通常只有當你有字符串時才使用它。如果在變量中已經有一個包含引號的字符串,那麼您不需要解決報價問題,因爲該步驟已經完成。例如。 'v_string:= q'{該字符串的內容包含單引號}';''v_new_string:= v_string ||' OK!';' – Boneist

+1

爲什麼你需要從你的數據中刪除單引號?請在刪除任何引號之前提供一些您要加載的示例數據。 – Boneist

+0

也許你根本不需要刪除引號 - 也許這將有助於:http://www.orafaq.com/forum/t/153592/ – Boneist

回答

0

我已經解決了這個問題。在控制文件中我去掉OPTIONALLY ENCLOSED BY'「」像

FIELDS TERMINATED BY "," TRAILING NULLCOLS 

,並把它添加到除其中有單引號中它像

column1 OPTIONALLY ENCLOSED BY "'",column2 OPTIONALLY ENCLOSED BY "'", 
columnwithquotes char "substr(:columnwithquotes , 2, length(:columnwithquotes) - 2)" 
0

你可以簡單地做:

CREATE OR REPLACE FUNCTION REPLACE_QUOTE(
    v_str IN VARCHAR2 
) RETURN VARCHAR2 DETERMINISTIC 
IS 
BEGIN 
    dbms_output.put_line(v_str); 
    RETURN REPLACE(v_str, ''''); 
END; 
/

v_str充當綁定變量所以不管內容傳遞到REPLACE_QUOTE功能正好可以直接傳遞給內部調用REPLACE不改變分隔符的字符串字面。

然後,您可以將其稱爲:

REPLACE_QUOTE(q['Failed to connect to 'http://172.17.70.74:80/xyz.x']'); 

REPLACE_QUOTE('Failed to connect to ''http://172.17.70.74:80/xyz.x'''); 
+0

更改功能後嘗試了兩種方法。同樣的錯誤 - 在TERMINATED和ENCLOSED字段後找不到終止符 – Jaydeep

+0

您看過http://stackoverflow.com/a/35323077/1509264 – MT0

相關問題