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

本人是新手,内容属抄袭,请各位大神见谅!!!

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来区分matchednot matched

----在使用的过程之中,应该注意的是对数据的insertupdatedelete的时候记得应该对数据进行commit操作,

----实现数据的提交操作,否则可能出现不同的session情况下  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值