1

在 sql 文件中分隔查询:使用 mysql:我们可以使用 Delimiter /

例子:

Delimiter /
select * from product;
/
select * from h_product;
/
Delimiter ;
insert into ptoduct(prod_name)values('my_prod_name');

对于 oracle 和 db2?用什么?还有分隔符?

4

3 回答 3

2

在 DB2 CLP 脚本中,您可以使用 SET TERMINATOR 指令“即时”更改语句终止符:

--#SET TERMINATOR ;
select * from sysibm.sysdummy1;

--#SET TERMINATOR /
create or replace trigger t1 ...
begin
 ...
end
/

然后,您可以将其称为db2 -tf myscript.sql. 请注意,SET TERMINATOR 指令必须为大写。

我认为在 Oracle SQL*Plus 脚本中没有自定义终止符的选项。

于 2013-08-20T14:04:27.270 回答
1

在 Oracle SQL*PLUS 中,您使用分号;作为 SQL 终止符和.PL/SQL 块

终结者。与终止并执行 SQL 语句的 sql terminator( ;) 不同,PL/SQL 块

terminator( .) 仅通知 SQL*PLUS 该块已结束并留在缓冲区中以供进一步编辑

如果出现这种需要或使用 slash 执行/

您可以通过发出SET SQLTERMINATOR ':'(例如)更改 SQl 终止符。

您可以通过发出SET BLOCKTERMINATOR '!'(例如)更改 PL/SQL 块终止符。

要终止和执行 PL/SQL 块,请使用正斜杠/

于 2013-08-20T11:44:09.890 回答
1

在 DB2 中,您;用作 SQL 终止符(用于 SQL PL 和 PL/SQL)。

您可以使用 td 选项定义语句终止字符。

例如,要执行多条 SQL,您可以像这样调用 db2:

db2 -tf script.sql

脚本.sql

create table t1 (c1 int);
create table 
  t2 (c2 int);

在执行包含存储过程、触发器或函数的脚本时,您可以使用任何字符将它们分隔开,并通过 -td 选项定义语句终止字符。大多数时候使用@。

db2 -td@ -f scriptSQLPL.sql

脚本SQLPL.sql

CREATE PROCEDURE TEST ()
 RESULT SETS 1
 LANGUAGE SQL
BEGIN
 DECLARE value INT DEFAULT 1;

 SET value = 0;
END @

如果您不指定任何语句终止字符,则由回车分隔的每一行都将被视为一个语句。但是,您可以放置​​反斜杠以执行多行语句

db2

create \
table \
t1 \
( col1 int )

在最后一个示例中,使用交互模式而不是使用文件。

于 2013-08-20T12:53:59.200 回答