我写了一个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''
我需要删除引号,因为此列无法在数据库中插入。
请帮忙。感谢。
答案 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)"