如何使用q' []'具有变量功能的运算符

时间:2016-03-04 09:41:44

标签: oracle

我写了一个oracle函数,我需要数据作为q' [var]'其中var是一个变量。但是oracle并没有把它作为一个变量来阅读。

我试过q' [' || var ||']'哪个不起作用。把q' [在字符串中也不起作用,因为它不会将q作为运算符读取。我已尝试过多种组合,但似乎都没有效果。我做错了什么。

我正在使用oracle 11g。

编辑:其实我正在使用sql loader来插入数据。在插入之前的控制文件中,我必须从数据中删除单引号。

在控制文件中调用REPLACE_QUOTE函数,该函数发送从file接收的列数据。我已经为该特定列添加了控制文件的内容。

 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 loader控制文件中直接尝试了替换函数,但它似乎不起作用。我也尝试了REPLACE_QUOTE(Q' [:COLUMN]),这也没有用。

以下是删除引号之前的数据。

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

我需要删除引号,因为此列无法在数据库中插入。

请帮忙。感谢。

2 个答案:

答案 0 :(得分:0)

你可以这样做:

operator<<()

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']' );

答案 1 :(得分: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)"