2013-08-20 55 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) 

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