使用sqlplus在Oracle中插入多行字符串

Lou*_*hys 34 sql oracle newline sqlplus

我有一个SQL脚本,将长字符串插入表中.该字符串包含一个新行(并且这个新行是绝对必要的),因此当它在文本文件中写入时,查询将被拆分为多行.就像是:

insert into table(id, string) values (1, 'Line1goesHere 

Line2GoesHere 
blablablabla
');
Run Code Online (Sandbox Code Playgroud)

这蟾蜍运行正常,但是当我保存这个作为一个.sql文件,并用sqlplus运行它,它会认为每行一个单独的查询,这意味着每行会失败(怎么一回事,因为insert into table(id, string) values (1, 'Line1goesHere,Line2GoesHere没有很好地格式化的脚本.

SP2-0734: unknown command beginning "Line2GoesHere" - rest of line ignored.
Run Code Online (Sandbox Code Playgroud)

有没有办法来解决这个问题?

jim*_*ara 52

启用SQLBLANKLINES允许在SQL语句中的空行.例如:

SET SQLBLANKLINES ON
insert into table(id, string) values (1, 'Line1goesHere 
Line2GoesHere 

blablablabla
');
Run Code Online (Sandbox Code Playgroud)

这个问题的前提是略有错误的.SQL*Plus默认允许多行字符串.只有行会导致问题.

  • 它会影响整个会话-从连接到注销。因此,您可能需要根据需要将其设置为OFF或ON。 (2认同)

ibr*_*041 11

您还可以使用Oracle SQL的非常有名的功能:Perl样式引用的字符串.

SQL> select q'[f dfgdfklgdfkjgd
  2  sdffdslkdflkgj dglk
  3  glfdglkjdgkldj ]'
  4  from dual;

Q'[FDFGDFKLGDFKJGDSDFFDSLKDFLKGJDGLKGLFDGLKJDGKLDJ]'
----------------------------------------------------
f dfgdfklgdfkjgd
sdffdslkdflkgj dglk
glfdglkjdgkldj
Run Code Online (Sandbox Code Playgroud)

  • 这样做更好,因为它不是特定于SQL * Plus的。+1。 (2认同)