Oracle SQL的一些語法

regonly1發表於2009-08-15
真是慚愧,以前認為Oracle的SQL語法沒有懂各個具體引數麼,所有使用格式都已經不在
話下了。結果看了1z0-047的內容,發現自己有點過於狂妄了。
這裡要講的都是insert的語法。
通常情況下,我們看到的insert的語法不外乎以下幾種:
insert into [table_name]([column_list]) values([values_list]);--最簡單的
insert into [table1]([column_list]) select ([column_list]) from [table2];--從table2中取資料插入到table1中
insert into [table_name] values row; --這裡row是一個關鍵字,用在forall/for等的insert迴圈中
根據我以往的經驗,總結下來,應該就只有這麼三種了。
但是實際上Oracle還支援這樣的語法:
第一種:
帶檢查的插入語句
insert into (select a,b,c from test1 t where t.id=10 with check option) values(1,2,3);
insert into (select a,b,c from test1 t where t.id=10 with check option) select 1,2,3 from dual;
該語法的含義是:在test1表中插入一條記錄,該記錄的id必須為10(因為有with check option選項)。
第二種:
insert first / insert all語法
用於向多個表插入資料:
insert first時首先根據第一個when進行檢索,將結果插入第一條件指定的表。
當遇到第二個when時,將第一個when中檢索結果集外的資料與第二個when做條件匹配
然後將匹配到的資料插入第二個條件指定的表。
以此類推。例子(轉自網路):
create table table_storage
 (
 table_name varchar2(30),
 tablespace_name varchar2(30),
 pct_free number,
 pct_used number,
 ini_trans number,
 max_trans number,
 initial_extent number,
 next_extent number,
 min_extents number,
 max_extents number,
 pct_increase number,
 freelists number,
 freelist_groups number
 );
create table table_stat
  (
  table_name varchar2(30),
  num_rows number,
  blocks number,
  empty_blocks number,
  avg_space number,
  chain_cnt number,
  avg_row_len number
  );

insert all
into table_storage values(table_name, tablespace_name, pct_free, pct_used, ini_trans,
max_trans, initial_extent, next_extent, min_extents, max_extents,
pct_increase, freelists, freelist_groups)
into table_stat values(table_name, num_rows, blocks, empty_blocks, avg_space, chain_cnt, avg_row_len)
select * from user_tables;

select * from table_storage
select * from table_stat

create table table_all(table_name varchar2(30));
create table index_all(index_name varchar2(30));
create table object_other(object_name varchar2(30), object_type varchar2(30));
insert all
when object_type = 'TABLE' then
into table_all values(object_name)
when object_type = 'INDEX' then
into index_all values(object_name)
when object_type not in('TABLE','INDEX') then
into object_other values(object_name, object_type)
select * from user_objects o;

select * from table_all;
truncate table table_all;
truncate table tablespace_users ;

create table tablespace_users(name varchar2(30), type varchar2(30));
insert all
when (segment_type = 'TABLE') then
into table_all values (segment_name)
when (tablespace_name = 'LYONTBS') then
into tablespace_users values (segment_name, segment_type)
select segment_name, segment_type, tablespace_name
from user_segments;
 
select * from table_all ;
select * from tablespace_users;
 
insert first
 when (segment_type = 'TABLE') then
 into table_all values (segment_name)
 when (tablespace_name = 'LYONTBS') then
 into tablespace_users values (segment_name, segment_type)
 select segment_name, segment_type, tablespace_name
 from user_segments;
 
由於佔用版面太大,只將語句放上來。

 
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-612420/,如需轉載,請註明出處,否則將追究法律責任。

相關文章