我有一个使用sql plus执行的sql脚本。它读取输入参数,开头如下所示:
SET DEFINE ON
DEFINE PARAM1 = '&1'
DEFINE PARAM2 = '&2'
DECLARE
...
现在我想将此脚本与参数一起使用,但我需要使用一些特殊字符,尤其是'
@@./update.sql 'value of first param' 'Doesn't work'
^
--------------------------------------------| Here's the problem
commit;
当我按照通常的方式连接字符串时这样:
'Doesn'||chr(39)||'t work'
仅Doesn
出现PARAM2
。有没有办法以sqlplus将其作为单个字符串读取的方式来转义字符?
答案 0 :(得分:1)
您需要使用escape characters来实现此目标。
{}
使用大括号来转义一串字符或符号。在一组括号中的所有内容都被认为是转义序列的一部分。当您使用大括号转义单个字符时,转义字符将成为查询中的单独标记。
\
使用反斜杠字符来转义单个字符或符号。只有反斜杠后面的字符才会被转义。
单字符转义的一些例子
SELECT 'Frank''s site' AS text FROM DUAL;
TEXT
--------------------
Franks's site
了解更多here
用于在SQL * Plus中转义&
SET ESCAPE '\'
SELECT '\&abc' FROM dual;
OR
SET SCAN OFF
SELECT '&ABC' x FROM dual;
逃离外卡
SELECT name FROM emp
WHERE id LIKE '%/_%' ESCAPE '/';
SELECT name FROM emp
WHERE id LIKE '%\%%' ESCAPE '\';
答案 1 :(得分:1)
从shell中你应该像这样调用脚本:
sqlplus user@db/passwd @update 'value of first param' "Doesn't work"
( @update 这个词指的是你的脚本名为update.sql)
然后你必须在你的脚本中使用文字引用:
DEFINE PARAM2 = q'[&2]';
文字can be found here的文档。