您的位置:首页 > 数据库 > Oracle

oracle 基础学习 02---- %type | %rowtype | record | merge into | insert all | insert first

2013-07-23 11:29 501 查看
本人是新手,内容属抄袭,请各位大神见谅!!!
9. %type 和%rowtype
  在使用pl/sql时,许多的变量是用来存储数据库中表的数据,而数据库中表的属性的数据
类型是不一样的,使用的时候变量应该拥有与表列具有一样的数据类型,oracle中使用
%type来定义与数据库之中属性的类型相同的数据类型。如
        Declare
Testname student.username%type;  ----testname是具有与表student中username具
具有相同的数据类型.
%rowtype 是与pl/sql中的结构体类型(记录类型)相关的,使用%rowtype可以接受表之中一行的数据的类型结构是一样的。
      Declare
      Testname student%rowtype;   ----与表student具有一样的元组数据类型
10.record类型
   Record主要用来接收select语句或者游标中返回的数据,能够接收表中一行数据,相当于接收一个元组(表中的每一行是一个元组又叫记录,每一列是一个属性)。
   类型的定义可以如下:
   Type strutname is record
(
 Name varchar(2),
 Id    varchar(2)
)  -------这样一个record就定义完成了
 
11.oracle之中的NULL的使用:
  NULL的含义是未知,既不是0也不是空格,在给数据赋值时,主键和规定了为not null的属性值不能赋值为NULL,否则会报错。NULL等价于没有任何的值,是个未知数,NULL与0,空字符串,空格都不同。对NULL进行加减乘除操作时,运算结果均为空。NULL的处理使用的是NVL函数,比较空值时使用 is (not) null。注意空值是不能被索引的,所以在查询时有些符合条件的数据可能查不出来。如在count(*)中,用NVL(列名,0)处理之后再查。NULL在排序的时候比其他的数据都大,索引的默认排序是降序排列,所以NULL值的总是排在最后。
12.Oracle中可以通过all 和first来向多表插入数据,ALL表示的是非短路的运算,即使满足了第一个条件也得向下执行查看是否满足其他条件,而first是在短路运算找到合适条件之后就不向下进行了。(在oracle之中使用merge into语句是从一个或者多个数据源中完成对表的更新和插入数据)
insertall
when (/*条件*/)then
intotable(,,,)value(,,,)
select ,,,fromtable
13.merge into:使用一个语句从一个或者多个数据源中完成对表的更新和插入数据。
          语法如下:
----merge into 操作使用
/*
   该命令是使用一条语句从一个或者多个数据源之中完成对表的更新和操作,在使用的过程之中
   可能oracle版本不同,语法稍有不同
*/
 
createtable products ----创建产品表
(
   pro_id  integer,
   pro_name varchar2(50),
   pro_cate varchar2(50)  
);
 
select *from products;
deletefrom productswhere1=1;
 
insertinto productsvalues(1,'a','aa');
insertinto productsvalues(2,'b','bb');
insertinto productsvalues(3,'c','cc');
commit;
 
createtable newproducts   ----创建新的产品表
(
   pro_id  integer,
   pro_name varchar2(50),
   pro_cate varchar2(50)
);
 
insertinto newproductsvalues(4,'d','dd');
insertinto newproductsvalues(5,'e','ee');
insertinto newproductsvalues(6,'f','ff');
insertinto newproductsvalues(7,'g','gg');
commit;
 
 
mergeinto products
usingnewproducts
on(products.pro_id =newproducts.pro_id)
whennotmatchedthen
insert
values(newproducts.pro_id,newproducts.pro_name,newproducts.pro_cate);
 
----insert后面还可以加入delete或者where,当然也可以像case一样使用when来区分matched和not
matched
----在使用的过程之中,应该注意的是对数据的insert,update,delete的时候记得应该对数据进行commit操作,
----实现数据的提交操作,否则可能出现不同的session情况下  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: