我有一个SQL脚本,它会将长字符串插入表中。该字符串包含一个新行(并且这个新行是绝对必要的),因此当它在文本文件中写入时,查询将被拆分为多行。类似的东西:
insert into table(id, string) values (1, 'Line1goesHere
Line2GoesHere
blablablabla
');
这在Toad中运行正常,但当我将其保存为.sql文件并使用sqlplus运行时,它会将每一行视为一个单独的查询,这意味着每一行都将失败(beacuse insert into table(id, string) values (1, 'Line1goesHere
,{{1不是格式良好的脚本。
Line2GoesHere
有没有办法解决这个问题?
答案 0 :(得分:50)
启用SQLBLANKLINES
以允许SQL语句中出现空行。例如:
SET SQLBLANKLINES ON
insert into table(id, string) values (1, 'Line1goesHere
Line2GoesHere
blablablabla
');
这个问题的前提是略有错误。 SQL * Plus默认允许多行字符串。只有空白行会导致问题。
答案 1 :(得分:7)
您还可以使用Oracle SQL的不为人知的功能:Perl style quoted strings.
SQL> select q'[f dfgdfklgdfkjgd
2 sdffdslkdflkgj dglk
3 glfdglkjdgkldj ]'
4 from dual;
Q'[FDFGDFKLGDFKJGDSDFFDSLKDFLKGJDGLKGLFDGLKJDGKLDJ]'
----------------------------------------------------
f dfgdfklgdfkjgd
sdffdslkdflkgj dglk
glfdglkjdgkldj
答案 2 :(得分:3)
SQL * Plus手册
您可以通过以下三种方式之一结束SQL命令:
- 用分号(;)
- 单独使用斜线(/)
- 有一个空行
醇>SQL语句或脚本中的空行告诉SQL * Plus您有 完成输入命令,但不想再运行它。按 返回命令最后一行的末尾。
在这种情况下启用SQLBLANKLINES可能就是答案,但即使使用它,您仍然需要担心以下SQL * Plus命令。
@ ("at" sign) (Start of line)
@@ (double "at" sign) (Start of line)
# SQLPREFIX (Start of line)
. BLOCKTERMINATOR (Start of line and by itself)
/ (slash) (Start of line and by itself)
; SQLT[ERMINATOR] (Start of line and by itself, or at the end)
SQLPREFIX是你无法关闭的东西;它是SQL * Plus的一个特性。可以激活或禁用BLOCKTERMINATOR。另一方面,如果它出现在新行的开头,则会导致它执行缓冲区中的内容。 SQL [TERMINATOR]具有类似的行为。
答案 3 :(得分:0)
将换行符插入字符串的另一种方法是连接:
chr(13)||chr(10)
(在Windows上)
或只是:
chr(10)
(否则)