2013-08-20 50 views
1

到一个SQL文件单独的查询: 与MySQL: 我们可以用 Delimiter /单独的查询在MySQL,DB2和Oracle

例如:

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

并为Oracle和DB2?使用什么?还有分界符?

回答

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脚本中自定义终止符。

1

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

终止。不同于SQL终止(;),终止和执行SQL语句, PL/SQL块

终止(.)只通知SQL * PLUS该块已经结束,在缓冲留待进一步的编辑

如果使用斜杠/产生或执行这样的需求。

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

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

要终止并执行一个使用正斜杠的PL/SQL块/

+0

据我所知,用oracle我们在产品中添加了sqlterminator/select *; / select * from h_product; / sqlterminator; 插入到ptoduct(prod_name)值('my_prod_name'); ? – junior

+0

@neila要执行DML语句,只需使用分号(';')('select * from h_product; select * from product;')就足够了。如果你省略了分号,你可以在下一行使用斜杠。这两种方法都将终止并执行DML语句。 –

+0

我试过SET SQLTERMINATOR'/'for oracle,这没关系:) thx – junior

1

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

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

例如,执行多个SQL,你叫DB2这样的:

db2 -tf script.sql 

script.sql

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

当执行包含存储过程,触发器或功能的脚本,您可以用任何字符分隔它们,并通过-td选项定义语句终止字符。大多数时间都是使用。

db2 [email protected] -f scriptSQLPL.sql 

scriptSQLPL.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) 

在最后一个例子,是替代使用的文件交互模式。