`
sibyl_pisces
  • 浏览: 146098 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
社区版块
存档分类
最新评论

oracle基本语句

 
阅读更多

区别是和sqlserver比较

-- 示例一:Create Table 命令,区别较小
Create   Table  vendor_master

 vencode 
varchar2 ( 5 ),
 venname 
varchar2 ( 20 ),
 venadd1 
varchar2 ( 20 ),
 venadd2 
varchar2 ( 20 ),
 venadd3 
varchar2 ( 20 )
 )
 
-- 示例二:Alter Table Modify 命令,区别较大
Alter   Table  vendor_master Modify (venname  varchar2 ( 25 ))

-- 示例三:Alter Table Add 命令,区别较小,主要是数据类型
Alter   Table  vendor_master
  
add  (tel_no  number ( 12 ),
       tngst_no 
number ( 12 ))
       
-- 示例四:Drop Column 命令:完全一样
Alter   Table  vendor_master  Drop   Column  tngst_no

-- 示例五:Oracle 独有
alter   Table  vendor_master  set  unused(tel_no)

-- 示例六:Truncate Table命令 :完全一样
truncate   table  vendor_master

-- 示例八:Desc命令:完全不一样
Desc  vendor_master

-- 示例九:Drop Table 命令:完全一样
drop   table  vendor_master



-- 示例10:Insert命令
Insert   into  vendor_master  values  ( ' v001 ' , ' John smith ' , ' 11 E main st ' , ' West Avenue ' , ' alabama ' , 1234567 )

-- 以下这种方法只在Orace中有效,l但不推荐使用此方法
Insert   into  vendor_master  values  ( ' &vencode ' , ' &venname ' , ' &venadd1 ' , ' &venadd2 ' , ' &venadd3 ' , & telno)


-- 示例15:Select命令
select   *   from  vendor_master


-- 示例20:Update命令 :注意大小写
update  vendor_master  set  tel_no  =   987654   where  vencode = ' V001 '    --  'v001'


-- 示例24:Grant 和 Revoke命令
grant   all   on  vendor_master  to  sys
revoke   all   on  vendor_master  from  sys

**********************************************************************************************
// 用户


connect system
/ manager @ydgl ;

-- 删除已有的用户和表空间

-- drop tablespace freemandatabase;
--
drop tablespace tempfreemandatabase;

-- 创建表空间
create  tablespace FreeManDataBase
datafile 
' c:\FreeManDataBase.ora '
size 25M;

 

    --查看当前用户的缺省表空间
 select username,default_tablespace from user_users;


-- 创建临时表空间
create   temporary  tablespace tempFreeManDataBase
tempfile 
' c:\tempFreeManDataBase.ora '
size 25M;

-- 创建用户
create   user  zong identified  by  " 123456 "
default  tablespace FreeManDataBase
temporary  tablespace tempFreeManDataBase;

-- 赋权限
grant  connect  to  zong;
grant  resource  to  zong;
grant  dba  to  aaa;

-- 登录
connect zong / 123456 @ydgl ;

create   table  zong.ccc(bh  varchar2 ( 10 ), xm  varchar2 ( 10 ), age  number , salary  number , birthday date) 
 
-- 事务处理 
    insert   into  zong.ccc(bh,xm,age,salary,birthday)  values  ( ' 000 ' , ' aaa ' , 56 , 12345 ,to_date( ' 1978-1-1 ' , ' yyyy-mm-dd ' ));
   
insert   into  zong.ccc(bh,xm,age,salary,birthday)  values ( ' 004 ' , ' peng ' , 24 , 3456.3 ,to_date( ' 1976-1-1 ' , ' yyyy-mm-dd ' ));
   savepoint ppp;
   
insert   into  zong.ccc(bh,xm,age,salary,birthday)  values ( ' 005 ' , ' cao ' , 21 , 345.3 ,to_date( ' 1996-1-1 ' , ' yyyy-mm-dd ' ));
   
rollback   to  ppp;
   
insert   into  zong.ccc(bh,xm,age,salary,birthday)  values ( ' 006 ' , ' li ' , 28 , 31456.3 ,to_date( ' 1966-1-1 ' , ' yyyy-mm-dd ' ));
   
update  zong.ccc  set  bh = ' 008 '  ,salary = 5000 ,age = 33   where  bh = ' 004 ' ;
    
commit  ;
--  清除数据
    truncate   table  zong.cc
   
delete   from  zong.ccc  where  bh = ' 006 '


  
create   table  zong.firsttable (xm  varchar2 ( 10 ),age  number ( 4 ),salary  number ( 7 , 2 ))
  
-- 添加列
   alter   table  zong.firsttable  add  (kk  number ( 10 ), birthday date)
  
-- 更新列类型
   alter   table  zong.firsttable modify (xm  number ( 2 ), birthday  varchar2 ( 10 ))
  
  
-- 收回权限
    revoke  dba  from  zong
  
-- 授予管理员角色
    grant  dba  to  zong 
   
   
-- 授予对象权限
    grant   select  , update   on  firsttable  to  system
   
   
-- 删除表
    drop   table  zong.ccc
   
   


-- 集合操作
Create   Table  zong.YYY(xm  Varchar2 ( 10 ),age  Number ( 8 ));
Insert   Into  zong.yyy  Values ( ' aaa ' , 10 )
Insert   Into  zong.yyy  Values ( ' bbb ' , 20 )

Create   Table  zong.xxx(xm  Varchar2 ( 10 ),age  Number ( 8 ));
Insert   Into  zong.xxx  Values ( ' aaa ' , 10 )
Insert   Into  zong.xxx  Values ( ' ccc ' , 30 )

Select   *   From  zong.yyy  Union   Select   *   From  fei.xxx

Select   *   From  zong.yyy  Union   All   Select   *   From  fei.xxx

Select   *   From  zong.yyy  Intersect   Select   *   From  fei.xxx

Select   *   From  zong.yyy Minus  Select   *   From  fei.xxx
 
 
*********************************************
**********************************************
-- 字符串函数
   select   ascii ( ' A ' ) A, ascii ( ' a ' ) a, ascii ( ' 0 ' ) zero, ascii ( '   ' space   from  dual
  
  
select  chr( 54740 ) zhao,chr( 65 ) chr65  from  dual
  
  
select  concat( ' 010- ' , ' 88888888 ' ) || ' 连接 '  实例  from  dual
  
  
select  initcap( ' smith ' ) upp  from  dual;
  
  
select  instr( ' oracle traning ' , ' ra ' , 1 , 2 ) instring  from  dual
  
  
select  lpad(rpad( ' gao ' , 10 , ' * ' ), 17 , ' * ' ) from  dual;
  
  
select   ltrim ( rtrim ( ' gao qian jing     ' , '   ' ), '   ' from  dual;
  
  
select  substr( ' 13088888888 ' , 3 , 8 from  dual;
  
select   replace ( ' he love you ' , ' he ' , ' i ' from  dual;
  
  
 
-- 数学函数
   select   floor ( 2345.67 from  dual;
  
select  mod( 10 , 3 ),mod( 3 , 3 ),mod( 2 , 3 from  dual;
  
select   round ( 55.5 ), round ( - 55.4 ),trunc( 55.5 ),trunc( - 55.5 from  dual;
  
select   sign ( 123 ), sign ( - 100 ), sign ( 0 from  dual;
  
  
  
-- 日期函数
    select  to_char(add_months(to_date( ' 199912 ' , ' yyyymm ' ), 2 ), ' yyyymm ' from  dual;
   
select  to_char(sysdate, ' yyyy.mm.dd ' ),to_char((sysdate) + 1 , ' yyyy.mm.dd ' from  dual;
   
select  last_day(sysdate)  from  dual;
  
   
select  months_between( ' 19-12月-1999 ' , ' 19-3月-1999 ' ) mon_between  from  dual;
   
select  months_between(to_date( ' 2000.05.20 ' , ' yyyy.mm.dd ' ),to_date( ' 2005.05.20 ' , ' yyyy.mm.dd ' )) mon_betw  from  dual;
   
   
select  to_char(sysdate, ' yyyy.mm.dd hh24:mi:ss ' ) 北京时间,to_char(new_time
  (sysdate,
' PDT ' , ' GMT ' ), ' yyyy.mm.dd hh24:mi:ss ' ) 埃及时间  from  dual;
  
  
select  next_day( ' 18-5月-2001 ' , ' 星期五 ' ) next_day  from  dual;
  
//
  
select   round (sysdate, ' year ' from  ccc;
  
  
select  to_char(sysdate, ' dd-mm-yyyy day ' from  dual;
  
select   *   from  ccc  where  birthday - to_date( ' 1977-11-11 ' , ' yyyy-mm-dd ' ) > 120 ;
  
select   *   from  ccc  where  birthday - to_date( ' 1977-11-11 ' , ' yyyy-mm-dd ' ) > 30 ;
   
select   *   from  ccc  where  birthday > to_date( ' 1977-11-11 ' , ' yyyy-mm-dd ' );
   
   
  
select  to_char(t.d, ' YY-MM-DD ' from  ( 
select  trunc(sysdate,  ' MM ' ) + rownum - 1   as  d 
from  dba_objects 
where  rownum  <   32 ) t 
where  to_char(t.d,  ' MM ' =  to_char(sysdate,  ' MM ' -- 找出当前月份的周五的日期
and  trim(to_char(t.d,  ' Day ' ))  =   ' 星期五 '  

-- 类型转换函数
select  to_char(sysdate, ' yyyy/mm/dd hh24:mi:ss ' from  dual;

select  to_number( ' 1999 ' year   from  dual;

-- 系统函数
select  username, user_id   from  dba_users  where   user_id = uid;
select   user   from  dual;


-- 集合函数
  create   table  table3(xm  varchar ( 8 ),sal  number ( 7 , 2 ));
 
insert   into  table3  values ( ' gao ' , 1111.11 );
 
insert   into  table3  values ( ' gao ' , 1111.11 );
 
insert   into  table3  values ( ' zhu ' , 5555.55 );
 
 
-- select avg(distinct sal) from gao.table3;
  -- select max(distinct sal) from scott.emp;


-- 分组函数和统计函数 
  select  deptno, count ( * ), sum (sal)  from  scott.emp  group   by  deptno;
 
select  deptno, count ( * ), sum (sal)  from  scott.emp  group   by  deptno  having   count ( * ) >= 5 ;
 
select  deptno, count ( * ), sum (sal)  from  scott.emp  having   count ( * ) >= 5   group   by  deptno ;
 
select  deptno,ename,sal  from  scott.emp  order   by  deptno,sal  desc ;

**********************************************************************************************
    
CREATE   TABLE  "ZONG"."CCC"("BH"  VARCHAR2 ( 10 ), "XM"  VARCHAR2 ( 10 ), "AGE"  NUMBER , "SALARY"  NUMBER , "BIRTHDAY" DATE) 

    
insert   into  zong.ccc(bh,xm,age,salary,birthday)  values  ( ' 000 ' , ' aaa ' , 56 , 12345 ,to_date( ' 1978-1-1 ' , ' yyyy-mm-dd ' ));
 
    
insert   into  zong.ccc(bh,xm,age,salary,birthday)  values  ( ' 001 ' , null , 33 , 4444 ,to_date( ' 1979-1-1 ' , ' yyyy-mm-dd ' ));
   
    
insert   into  zong.ccc(bh,xm,age,salary,birthday)  values ( ' 004 ' , ' peng ' , 24 , 3456.3 ,to_date( ' 1976-1-1 ' , ' yyyy-mm-dd ' ));
   
    
insert   into  zong.ccc(bh,xm,age,salary,birthday)  values ( ' 005 ' , ' cao ' , 21 , 345.3 ,to_date( ' 1996-1-1 ' , ' yyyy-mm-dd ' ));
  
    
insert   into  zong.ccc(bh,xm,age,salary,birthday)  values ( ' 006 ' , ' li ' , 28 , 31456.3 ,to_date( ' 1966-1-1 ' , ' yyyy-mm-dd ' ));
 
    
select  bh 编号, nvl(xm, ' ggg ' as  姓名  from  ccc  where  bh = ' 001 '
 
    
select  bh 编号,  nvl2(xm, ' yes ' , ' no ' as  姓名   from  ccc
 
   
-- select bh 编号,NULLIF('bbb','aaa') from ccc
   
   
-- is null 的用法
   
   
select   *   from  ccc   where  xm  is   null
   
select   *   from  ccc   where  xm   is   NOT   null
   
   
-- not in的用法
    
    
select   *   from  ccc  where   birthday  between   to_date( ' 1978-1-1 ' , ' yyyy-mm-dd ' and   to_date( ' 1996-1-1 ' , ' yyyy-mm-dd ' )
    
select   *   from  ccc  where   birthday  not    between   to_date( ' 1978-1-1 ' , ' yyyy-mm-dd ' and   to_date( ' 1996-1-1 ' , ' yyyy-mm-dd ' )
   
  
--  in的用法
      select   *   from  ccc  where   xm  in ( ' aaa ' , ' peng ' , ' cao ' )
     
select   *   from  ccc  where   xm   not   in ( ' aaa ' , ' peng ' , ' cao ' )
     
  
-- like的用法和=、!=、<、>、<=、>=的用法
    
    
select   *   from  ccc  where  age > 24   and  age  <= 56   and  xm  like   ' %a% '



   
   
     
--
     create    table   sales (xm  varchar2 ( 10 ), dTime date,  count   number , totalmoney  number ,city  varchar2 ( 10 ))
    
    
insert   into  sales  values ( ' 张三 ' ,to_date( ' 2003-01-01 ' , ' yyyy-mm-dd ' ), 1200 , 30000 , ' 南昌 ' );
    
insert   into  sales  values ( ' 张三 ' ,to_date( ' 2004-01-01 ' , ' yyyy-mm-dd ' ), 1200 , 30000 , ' 南昌 ' );
    
insert   into  sales  values ( ' 张三 ' ,to_date( ' 2003-01-01 ' , ' yyyy-mm-dd ' ), 1000 , 30000 , ' 北京 ' );
    
insert   into  sales  values ( ' 张三 ' ,to_date( ' 2004-01-01 ' , ' yyyy-mm-dd ' ), 2333 , 40000 , ' 北京 ' );
     
    
insert   into  sales  values ( ' 李四 ' ,to_date( ' 2003-01-01 ' , ' yyyy-mm-dd ' ), 800 , 24567 , ' 南昌 ' );
    
insert   into  sales  values ( ' 李四 ' ,to_date( ' 2004-01-01 ' , ' yyyy-mm-dd ' ), 600 , 15000 , ' 南昌 ' );
    
insert   into  sales  values ( ' 李四 ' ,to_date( ' 2003-01-01 ' , ' yyyy-mm-dd ' ), 400 , 20000 , ' 北京 ' );
    
insert   into  sales  values ( ' 李四 ' ,to_date( ' 2004-01-01 ' , ' yyyy-mm-dd ' ), 1000 , 18000 , ' 北京 ' );
    
    
select  xm, sum ( count ) 数量, sum (totalmoney) 金额 ,city  from  sales  group   by  xm , count  ,totalmoney,rollup(city)  order   by  xm , count  ,totalmoney,city
    
    
-- group分组语句
    select  xm, sum ( count ) 数量, sum (totalmoney) 金额 ,city  from  sales  group   by  xm , count  ,totalmoney,rollup(city)   having   count > 2000   order   by  xm , count  ,totalmoney,city
    
    
-- rollup函数
     select  xm,  sum ( count ) 数量,city  from  sales  group   by  xm , count  ,rollup(city)  order   by  xm , count  ,city
    
    
    
  
-- 事务级临时表是指临时表中的数据只在事务生命周期中存在。当一个事务结束(commit or rollback),Oracle自动清除临时表中数据
     CREATE  GLOBAL  TEMPORARY   TABLE  admin_work_area
        (startdate DATE,
         enddate DATE,
         class 
CHAR ( 20 ))
      
ON   COMMIT   DELETE  ROWS;
   
create   table  permernate( a  number );
   
insert   into  admin_work_area  values (sysdate,sysdate, ' temperary table ' );
   
   
insert   into  permernate  values ( 1 );
   
commit ;
   
select   *   from  admin_work_area;
   
select    *   from  permernate;


-- 会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,Oracle自动清除临时表中数据

     
drop   table  admin_work_area;
     
CREATE  GLOBAL  TEMPORARY   TABLE  admin_work_area
        (startdate DATE,
         enddate DATE,
         class 
CHAR ( 20 ))
      
ON   COMMIT  PRESERVE  ROWS;
   
create   table  permernate( a  number );
   
insert   into  admin_work_area  values (sysdate,sysdate, ' temperary table ' );
   
   
insert   into  permernate  values ( 2 );
   
commit ;
   
select   *   from  admin_work_area;
   
select    *   from  permernate;

**********************************************************************************************
//

 
create    table   sales (xm  varchar2 ( 10 ), dTime date,  count   number , totalmoney  number ,city  varchar2 ( 10 ))
    
    
insert   into  sales  values ( ' 张三 ' ,to_date( ' 2003-01-01 ' , ' yyyy-mm-dd ' ), 1200 , 30000 , ' 南昌 ' );
    
insert   into  sales  values ( ' 张三 ' ,to_date( ' 2004-01-01 ' , ' yyyy-mm-dd ' ), 1200 , 30000 , ' 南昌 ' );
    
insert   into  sales  values ( ' 张三 ' ,to_date( ' 2003-01-01 ' , ' yyyy-mm-dd ' ), 1000 , 30000 , ' 北京 ' );
    
insert   into  sales  values ( ' 张三 ' ,to_date( ' 2004-01-01 ' , ' yyyy-mm-dd ' ), 2333 , 40000 , ' 北京 ' );
     
    
insert   into  sales  values ( ' 李四 ' ,to_date( ' 2003-01-01 ' , ' yyyy-mm-dd ' ), 800 , 24567 , ' 南昌 ' );
     
insert   into  sales  values ( ' 李四 ' ,to_date( ' 2004-01-01 ' , ' yyyy-mm-dd ' ), 600 , 15000 , ' 南昌 ' );
    
insert   into  sales  values ( ' 李四 ' ,to_date( ' 2003-01-01 ' , ' yyyy-mm-dd ' ), 400 , 20000 , ' 北京 ' );
    
insert   into  sales  values ( ' 李四 ' ,to_date( ' 2004-01-01 ' , ' yyyy-mm-dd ' ), 1000 , 18000 , ' 北京 ' );
    
    
    
    
    
select   *   from  sales  where  xm = ' 张三 '   for   update   of   count
    
    
update  sales  set   count = 30000   where  xm = ' 张三 '
    
     
    
-- 另一用户登录
     update  ydgl.sales  set   count = 30000   where  xm = ' 张三 '
    
    
    
-- 在多个用户在同一张表中放置锁时,其他用户等待上一用户的时间.
     select   *   from  sales  where  xm = ' 张三 '   for   update   of   count   wait  10  
    
    
   
    
    
-- 只作查询
    lock  table  sales  in  share  mode
    
    
    
-- 能删除,更新,插入除锁定外的其他行
    
   lock 
table  sales  in  share  update  mode
   
   
   
-- 排他锁 ,在同一时间点上,只有一个用户在表中放置排他锁.
    lock  table  sales  in  exclusive  mode
    
    
-- 避免延迟时间,锁在用户之间的传递时间,不等待,立即提示错误信息
      lock  table  sales  in  exclusive  mode nowait
   
**********************************************************************************************
-- --创建临时表  
/**/ /* create temporary tablespace mydb
tempfile 'f:\mydb.ora'
size 10m;
*/


-- --创建抽象数据类型
create   or   replace  type address_ty  as  object
(street_no 
number ( 3 ),
street_name 
varchar2 ( 20 ),
city 
varchar2 ( 20 ),
state 
varchar2 ( 20 ));

-- --查看抽象数据类型实际值
select  attr_name,length,attr_type_name
from  user_type_attrs
where  type_name = ' ADDRESS_TY ' ;

-- --创建应用了抽象数据类型的表
create   table  vend_mast
(vencode 
varchar2 ( 5 ),
venname 
varchar2 ( 15 ),
venadd address_ty,
tel_no 
number ( 10 ));

-- --查看表结构
desc  vend_mast;

select  column_name,data_type  from  user_tab_columns  where
       table_name
= ' VEND_MAST ' ;
       
-- --插入记录
insert   into  vend_mast  values
(
' v100 ' , ' john ' ,address_ty( 110 , ' Clinton Rd ' ,
' Rosewood ' , ' Columbia ' , 234465987 );

-- --查看记录
select  a.venadd.city  from  vend mast a;

-- -修改记录,一定要用别名
update  vend_mast a
       
set  a.venadd.street_no = 10
       
where  venname = ' john ' ;
       
-- --删除记录       
delete   from  vend_mast a 
where  a.venadd.city = ' Rosewood ' ;

-- --强行删除抽象数据类型
drop  type address_ty force;

-- --创建应用了抽象数据类型的表的索引
create   index  streetnum  on  vend_mast(venadd.street_no);

-- --查看索引
select  owner,index_name,index_type,table_owner,table_name,table_type
from  all_indexes
where  owner = ' SCOTT ' ;

-- --创建不能继承的对象
create   or   replace  type Student_typ  as  object
(Ssn 
number ,
Name 
varchar2 ( 30 ),
Address 
varchar2 ( 100 )) not  final;

-- --修改是否能继承
alter  type Student_typ  not  final;

create  type t  as  object
(x 
number ,)
not  instantiable member  function  func1  return   number )
not  instantiable  not  final;

-- --创建可变数组
create  type itemcode  as  varray( 5 of   varchar2 ( 5 );

create  type qty_ord  as  varray( 5 of   number ( 5 );

create  type qty_deld  as  varray( 5 of   number ( 5 );

-- --基于可变数组创建表
create   table  order_detail(
      orderno 
varchar2 ( 5 ),
      item_va itemcode,
      qty_va qty_ord,
      qtyd_va qty_deld);

-- --插入记录
insert   into  order_detail 
       
values ( ' o100 ' ,itemcode( ' i100 ' , ' i101 ' , ' i102 ' , ' i103 ' , ' i104 ' ),
              qty_ord(
100 , 98 , 47 , 29 , 20 ),
              qty_deld(
100 , 900 , 800 , 700 , 600 ));

-- --查看整体
select   *   from  order_detail
-- --单个
select  item_va  from  order_detail
-- --查看可变数组内容
select   *   from   table (
-- --select * from order_detail a where a.orderno='o100')
select  a.item_va  from  order_detail a  where  a.orderno = ' o100 ' )

-- --嵌套表
--
--创建抽象数据类型即对象
create   or   replace  type ord_ty  as  object (
       itemcode 
varchar2 ( 5 ),
       qty_ord 
number ( 5 ),
       qty_deld 
number ( 5 ));

-- --表中包含嵌套表一定要基于一个对象创建一个新的对象作为嵌套表
create   or   replace  type ord_nt  as   table   of  ord_ty;

-- --创建包含嵌套表的表
create   table  order_master(
        orderno 
varchar2 ( 5 ),
        odate date,
        vencode 
varchar2 ( 5 ),
        dets ord_nt)
        nested 
table  dets store  as  ord_nt_tab;
-- 嵌套表放入某个任意任名的存储空间,嵌套表的存储空间与普通表不同,分别存储在不同的空间

insert   into  order_master  values (
' o100 ' ,to_date( ' 18-07-99 ' , ' DD-MM-YY ' ), ' v001 ' ,
ord_nt(ord_ty(
' i100 ' , 10 , 5 ),
ord_ty(
' i101 ' , 50 , 25 ),
ord_ty(
' i102 ' , 5 , 5 )));

-- --把记录插入到嵌套表中
insert   into   table ( select  p.dets  from  order_master p
where  p.orderno = ' o100 ' )
values ( ' i103 ' , 30 , 25 );

select  t.dets  from  order_master t  where  t.orderno = ' o100 ' ;

-- --查看嵌套表中的信息 
select   *   from   table ( select  t.dets  from  order_master t
where  t.orderno = ' o100 ' );

-- --修改
update   table ( select  t.dets  from  order_master t 
                    
where  t.orderno = ' o100 ' ) t
                           
set  value(t) = ord_ty( ' i103 ' , 50 , 45 )
                               
where  t.itemcode = ' i103 ' ;

-- --删除嵌套表的值
delete   from   table ( select  t.dets  from  order_master t
       
where  t.orderno = ' o100 ' ) t
       
where  t.itemcode = ' i102 ' ;
       
-- --把嵌套表中已存在的记录添加到创建的表中
insert   into  order_master  values ( ' o202 ' ,to_date( ' 2003-3-5 ' , ' YY-MM-DD ' ),
' v101 ' , cast (multiset( select   *   from   table ( select  dets  from  order_master
where  orderno = ' o201 ' ))  as  ord_nt));
       
-- --创建对象
create  type vend_ty  as  object(
vencode 
varchar2 ( 5 ),
venname 
varchar2 ( 20 ),
venadd1 
varchar2 ( 20 ),
venadd2 
varchar2 ( 20 ),
venadd3 
varchar2 ( 20 ),
tel_no 
number ( 6 ));

drop   table  vend_master;

-- --创建对象表,对象中不能定义约束,在对象表中可通过关键字constraint定义
create   table  vend_master  of  vend_ty(vencode  constraint  vc_pk  primary   key );

insert   into  vend_master  values (
vend_ty(
' v201 ' , ' John ' , ' 10 ' , ' Fezinnith ' , ' Mexico ' , 948456 ));

-- --查看地址(表中所分配的OID)
select  ref(a)  from  vend_master a;

-- --创建一个指向抽象数据类型的表
create   table  ord_master(
orderno 
varchar2 ( 5 ),
vendet ref vend_ty);
-- --数据类型为指向抽象数据类型的类型

-- --类似将查询记录插入一个表的语法插入记录
insert   into  ord_master( select ' o301 ' ,ref(a) from  vend_master a
where  vencode = ' v201 ' );

-- --查看所有记录
select   *   from  ord_master;

select  deref(a.vendet)  from  ord_master a;

delete   from  vend_master  where  vencode = ' v201 ' ;


-- --对象视图
create   table  item(
      itemcode 
varchar2 ( 10 ),
      item_on_hand 
number ( 10 ),
      item_sold 
number ( 10 ));

create   or   replace  type item_type  as  object
      (itemcode 
varchar2 ( 10 ),
      item_on_hand 
number ( 10 ),
      item_sold 
number ( 10 ));

create   view  item_view  of  item_type  with  object oid -- --表名of类型名with object oid
(itemcode)  as
select   *   from  item  where  item_on_hand < 20 ;

insert   into  item  values ( ' i201 ' , 10 , 5 );
-- --插入值调用函数
insert   into  item_view  values (item_type( ' i102 ' , 15 , 50 ));

create   view  nt_view  of  ord_ty  with  object oid(itemcode)
as   select   *   from   table ( select  d.dets
from  order_master d  where  d.orderno = ' o201 ' );

create   table  itemfile(
        itemcode 
varchar2 ( 5 primary   key ,
        itemdesc 
varchar2 ( 20 ),
        p_category 
varchar2 ( 20 ),
        qty_hand 
number ( 5 ),
        re_level 
number ( 5 ),
        max_level 
number ( 5 ),
        itemrate 
number ( 9 , 2 ));

create   table  order_detail (
        orderno 
varchar2 ( 5 ),
        itemcode 
varchar2 ( 5 ),
        qty_ord 
number ( 5 ),
        qty_deld 
number ( 5 ), primary   key (orderno,qty_ord,qty_deld),
        
foreign   key (itemcode)  references  itemfile(itemcode));

create   or   replace  type itemfile_ty  as  object
        (itemcode 
varchar2 ( 5 ),
        itemdesc 
varchar2 ( 20 ),
        p_category 
varchar2 ( 20 ),
        qty_hand 
number ( 5 ),
        re_level 
number ( 5 ),max_level  number ( 5 ),
        itemrate 
number ( 9 , 12 ));

create   view  itemfile_ov  of  itemfile_ty
       
with  object oid(itemcode)
       
as   select   *   from  itemfile;

select  make_ref(itemfile_ov,itemcode)  from  itemfile;

create   view  order_detail_ov 
as  
       
select  make_ref(itemfile_ov,itemcode) items,orderno,qty_ord,qty_deld 
              
from  order_detail;

-- --不能正确运行
select  deref(a.items)  from  order_detail_ov a;

**********************************************************************************************



-- --创建抽象数据类型
create   or   replace  type add_ty  as  object(
Street 
varchar2 ( 25 ),
City 
varchar2 ( 15 ),
State 
varchar2 ( 10 ),
Zip 
number );

-- --基于抽象数据类型创建表
create   table  customer(
Customer_id 
number ( 4 ),
person add_ty);

-- --插入记录
insert   into  customer  values (
1001 ,add_ty( ' No.2 downhill st. ' , ' Los Angles ' , ' California ' , 700023 ));

insert   into  customer  values (
1002 ,add_ty( ' No.120 stepahead rd. ' , ' houston ' , ' texas ' , 701024 ));

-- --查询记录
select  customer_id,c.person.city  from  customer c
where  c.person.state = ' texas ' ;

-- --删除记录
delete   from  customer a
where  a.person.zip = 701024 ;

-- --创建可变数组
create  type Phone  as  varray( 2 of   Number ( 8 );

-- --使用可变数组创建表
create   table  Employee(
Eno 
number ( 4 ),
name 
varchar2 ( 15 ),
phone phone);

-- --插入数据
insert   into  Employee  values (
1000 , ' George ' ,Phone( 67343344 , 3432342 ));

delete   from  Employee  where  name = ' gxj ' ;

select   *   from  employee;

select  phone  from  employee;

-- --创建对象
create  type person_details  as  object(
name 
varchar2 ( 15 ),
age 
number ( 2 ),
desg 
varchar2 ( 15 ));


create  type person_detail_table_ty  as   table   of  person_details;

create   table  other_info_person(
dept_name 
varchar2 ( 10 ),
dept_no 
number ( 3 ),
person_info person_detail_table_ty)
nested 
table  person_info store  as  person_store_table;


-- --创建抽象数据类型
create   or   replace  type Dept_type  as  object(
Deptno 
number ( 2 ),
Dname 
varchar2 ( 14 ),
Loc 
varchar2 ( 13 ));

-- --创建表
create   table  Student(
Name 
varchar2 ( 15 ),
Dept_detail Dept_type);

-- --插入数据
insert   into  Student  values (
' Jessica ' ,Dept_type( 20 , ' Computer ' , ' Chicago ' ));

insert   into  Student  values (
' Peter ' ,Dept_type( 40 , ' Electronics ' , ' California ' ));

-- --查询数据
select   *   from  Student;

select  name, a.dept_detail.Deptno  from  Student a 
where  a.Dept_detail.Loc = ' Chicago ' ;



insert   into  Employee  values (
1002 , ' Dick ' ,Phone( 33444876 , 87876565 ));
insert   into  Employee  values (
1003 , ' Jones ' ,Phone( 54576545 , 52457779 ));
  
plsql
-- 例二:创建具有LOB数据类型的表
CREATE   TABLE  vendor_master
 (vencode    
varchar2 ( 5 ),
  venname    
varchar2 ( 15 ),
  venadd1    
varchar2 ( 20 ),
  venadd2    
varchar2 ( 20 ),
  venadd3    
varchar2 ( 20 ),
  tel_no     
number ( 6 ),
  msg        CLOB);
  
-- 例三:初始化LOB值
INSERT   INTO  vendor_master  VALUES  
 (
' v201 ' , ' aryay ' , ' 10 ' , ' first st ' , ' mds ' , 475859 ,
  
' 这是我们的初始化LOB值 ' );
  
select   *   from  vendor_master;


-- 例9:条件控制
select   *   from  rs_employees
  
where  hetongid = ' WL-090001 ' ;

DECLARE
  v_department   rs_employees.department
% type;
BEGIN
  
SELECT  department  INTO  v_department
    
FROM  rs_employees
    
WHERE  HeTongId = ' WL-090001 ' ;
    
  
IF  v_department  =   ' 车间工人 '   THEN
    
UPDATE  rs_employees 
      
SET  department = ' 不是工人 '
      
WHERE  HeTongId = ' WL-090001 ' ;
  
ELSE
    
UPDATE  rs_employees 
      
SET  department = ' 车间工人 '
      
WHERE  HeTongId = ' WL-090001 ' ;
  
END   IF ;
END ;
/

-- CASE语句示例(下面的写法有错)
SET  SERVEROUT  ON ;
DECLARE
  I 
number : = 2 ;
BEGIN
  
CASE  
    
WHEN  (I = 1 THEN  dbms_output.put_line( ' Result is 1 ' );
    
WHEN  (I = 2 THEN  dbms_output.put_line( ' Result is 2 ' );
  
END   CASE ;
END ;



-- 和上面的区别是什么
SET  SERVEROUT  ON ;
DECLARE
  I 
number : = 2 ;
BEGIN
  
CASE  I(用于选择器)
    
WHEN   1   THEN  dbms_output.put_line( ' Result is 1 ' );
    
WHEN   2   THEN  dbms_output.put_line( ' Result is 2 ' );
  
END   CASE ;
END ;
/

-- 例11:简单循环:在Test Window中执行
--
SET SERVEROUT ON;
DECLARE
  a    
NUMBER  : =   100 ;
BEGIN
  LOOP
    a :
=  a + 25 ;
    
EXIT   WHEN  A = 250 ;
  
END  LOOP;
  dbms_output.put_line(TO_CHAR(a));
END ;

-- 例12:While循环,此值书上有错
DECLARE
  i    
NUMBER  : = 0 ;
  J    
NUMBER  : = 0 ;
BEGIN
 
while  i <= 100  Loop
   J :
=  J + 1 ;
   i :
=  i + 2 ;
 
end  loop;
 dbms_output.put_line(
' j的值是 ' || j);
END ;
 
-- 例13:FOR循环,结果是5050
DECLARE
  i  
number  : = 0 ;
  j  
number  : = 0 ;
BEGIN
  
for  i  in   1 .. 100
  loop
    j :
=  j  +   1 ;
  
end  loop;
  dbms_output.put_line(
' j的值是 ' || j);
END ;

分享到:
评论

相关推荐

    Oracle基本语句和基本函数

    这个压缩包文件"Oracle基本语句和基本函数.doc"显然包含了关于Oracle数据库操作的基础知识,包括SQL语句和内置函数的使用。 一、Oracle SQL基本语句 1. 数据查询:SQL的SELECT语句用于从数据库中检索数据,例如`...

    Oracle基本语句

    Oracle 基本语句 Oracle 是一种广泛使用的关系数据库管理系统,它提供了丰富的语句来操作和管理数据库。下面是 Oracle 的一些基本语句。 ### 创建用户 在 Oracle 中,创建用户需要使用 CREATE USER 语句,并且...

    oracle基本语句总结.text

    1)增删改查:2) 添加列:3)创建表空间4)创建临时表空间5)创建用户6)赋权7)建表/删表8)加约束/主键9)检查10)加默认的不行11)外键 12)复制表13)复制表结构 14)在已有的表结构中插入数据.....

    Oracle基本sql语句

    本文将总结一些Oracle基本SQL语句,帮助用户快速复习并掌握其用法。 首先,了解SQL(结构化查询语言)的基础功能是十分必要的。SQL由一系列命令组成,这些命令允许用户与数据库进行交流。其中,SELECT语句是SQL中最...

    excel2003 生成oracle 建表语句

    建表语句(CREATE TABLE)是SQL语言的基本组成部分,用于定义数据库中的表结构,包括字段名、数据类型、约束条件等。 Excel 2003作为一个电子表格软件,提供了丰富的数据组织和分析功能,但并不直接支持SQL操作。...

    Oracle数据库语句大全.doc

    Oracle 数据库语句大全还包括创建表空间、删除表空间、查询表空间基本信息、创建用户、更改用户、锁定用户、删除用户等语句。 二.数据操纵语言(DML) 数据操纵语言(DML)用于操作数据库中的数据,包括插入、...

    Oracle查询语句大全-精华版

    Oracle 查询语句大全是 Oracle 数据库管理系统中最基本也是最重要的组成部分,用于管理和维护数据库。本文将详细介绍 Oracle 查询语句的使用方法和实践操作。 一、创建用户和授权 在 Oracle 中,创建用户和授权是...

    oracle 的基本语句

    oracle 的基本语句 初学者使用 插入,删除 ,更新,视图的建立等基本的语句

    oracle查询语句大全

    Oracle基本操作语句 - **创建表**: - `CREATE TABLE 表名 (列名1 类型, 列名2 类型);` - **修改列属性**: - `ALTER TABLE 表名 MODIFY (列名 类型);` - **添加列**: - `ALTER TABLE 表名 ADD (列名 类型);` - **...

    oracle sql语句学习

    Oracle SQL语句是数据库管理与数据查询的重要工具,尤其在Oracle数据库系统中,掌握SQL的高效使用至关重要。这个"oracle sql语句学习"资源包显然旨在帮助初学者逐步提升到高级水平,通过全面的笔记资料,使用户能够...

    Oracle常用语句-总结文档汇总

    "Oracle常用语句-总结文档汇总"提供了丰富的资源,涵盖了SQL语句的基础到进阶应用,包括列行转换、SQL性能优化等多个关键知识点。 首先,列行转换是数据处理中常见的需求,Oracle提供了多种方法来实现这一操作。...

    Oracle_基本建表语句

    本文将详细介绍Oracle的基本建表语句及相关操作。 首先,创建用户是数据库管理的基础。Oracle中创建用户的基本语法如下: ```sql CREATE USER 用户名 IDENTIFIED BY 密码 DEFAULT TABLESPACE 表空间名 TEMPORARY ...

    Oracle导出INSERT语句

    INSERT语句是SQL语言的基本组成部分,用于向数据库表中插入新的数据记录。通过生成这些语句,我们可以方便地在目标环境中重新创建源数据库中的数据状态,而无需进行完整数据库的导入导出操作,这对于测试环境或数据...

    ORACLE常用SQL语句大全.pdf

    本文档总结了 Oracle 中常用的 SQL 语句,包括数据库的创建、删除、备份、表的创建、删除、修改、索引的创建、视图的创建等基本操作,以及一些高级查询运算符的使用。 一、数据库操作 * 创建数据库:CREATE ...

    oracle常用SQL语句(汇总版).docx

    Oracle 常用 SQL 语句汇总 Oracle 是一个功能强大且复杂的关系数据库管理系统,它提供了多种 SQL 语句来管理和操作数据库。在本文中,我们将详细介绍 Oracle 中常用的 SQL 语句,包括数据控制语句(DML)、数据定义...

    Oracle_基本建表语句-操作语句

    本篇将深入探讨Oracle中的基本建表语句及其相关操作。 首先,建表语句的基本格式如下: ```sql CREATE TABLE 表名 ( 列名1 数据类型 [约束条件], 列名2 数据类型 [约束条件], ... ); ``` 1. **表名**:这是你...

    经典的ORACLE查询语句教学资料

    本教学资料专注于Oracle查询语句,结合MySQL、JavaSE和Swing的相关知识,旨在帮助学习者深入理解和应用数据库操作。 首先,Oracle SQL是Oracle数据库系统中的数据查询和操纵语言。它允许用户检索、更新、插入和删除...

    Oracle入门语句

    对于初学者来说,掌握Oracle的基本查询语句是入门的第一步。本教程将重点讲解Oracle中的SQL查询语句,帮助你快速上手。 在Oracle中,SQL(结构化查询语言)用于对数据库进行操作,包括查询、插入、更新和删除数据。...

Global site tag (gtag.js) - Google Analytics