我们将JSON发送到oracle函数,有时它包含&符号。我想知道是否还有其他方法可以阻止"变量替换"问题是因为&符号而不必将字符串修改为
'{"this is the JSON &'||' it contains an ampersand"}'
我已经尝试过这些并且它们不起作用。
'{"this is the JSON && it contains an ampersand"}'
'{"this is the JSON /& it contains an ampersand"}'
'{"this is the JSON \\& it contains an ampersand"}'
修改
这是我们在Toad中手动导入的方式:
declare
vOut varchar2(400);
begin
vOut:=CartJSON.RequestEntry('JSON HERE'); -- function to parse JSON
dbms_output.put_line('Here:'||vOut);
end;
答案 0 :(得分:1)
更新
OP使用的是TOAD而不是SQL * Plus。
在TOAD中,有三种方法可以执行语句而不用&符号替换&符号(&):
查看 - > TOAD选项:转到“执行/编译”节点/项目 取消选中“提示替换变量”选项。
在编辑器中右键单击并取消选中“提示替换 变量“选项。
大多数基于GUI的工具,如SQL Developer,TOAD等,现在支持很多SQL*Plus
命令,并且执行脚本看起来与SQL*Plus
中的脚本非常相似。但是,旧版GUI工具很可能不支持SQL*Plus
命令。
&符号用作替代变量是 Oracle SQL * Plus客户端功能。
在SQL*Plus
你可以做
例如,
SQL> SET DEFINE OFF
SQL> SELECT '{"this is the JSON && it contains an ampersand"}' str FROM dual;
STR
------------------------------------------------
{"this is the JSON && it contains an ampersand"}
或者,
例如,
SQL> SET SCAN OFF
SQL> SELECT '{"this is the JSON && it contains an ampersand"}' str FROM dual;
STR
------------------------------------------------
{"this is the JSON && it contains an ampersand"}
SQL>
或者,
例如,
SQL> SELECT '{"this is the JSON '|| chr(38)||chr(38) ||' it contains an ampersand"}' str FROM dual;
STR
------------------------------------------------
{"this is the JSON && it contains an ampersand"}
SQL>
答案 1 :(得分:0)
好的,现在我们知道您正在使用Toad,问题是您正在尝试运行set define off
,就像它是一个sql语句一样(在caret上执行语句/ F9)而不是作为SQLPlus语句(即作为脚本的一部分 - 作为脚本/ F5执行)。您有两种选择:
1:将两个语句作为脚本运行(F5):
set define off;
declare
vOut varchar2(400);
begin
vOut:=CartJSON.RequestEntry('JSON HERE'); -- function to parse JSON
dbms_output.put_line('Here:'||vOut);
end;
/