ITPub博客

首页 > 数据库 > Oracle > PL/SQL使用匿名块处理数据

PL/SQL使用匿名块处理数据

原创 Oracle 作者:ocpDBAboy 时间:2016-04-25 01:23:56 0 删除 编辑
假如现在要做一个线上订购系统,这个系统首先有一个用户模块,所以我们要设计这个模块,首先要设计一张用户表存放
用户信息要求记录用户的用户名,密码,证件号,真实姓名,性别,生日,手机号,地址,email地址,积分,激活状态等,
其它信息可各自补充
1. 请大家设计这个用户表
--【1】
--创建表user_info
create table user_info(
ID int,
Username varchar2(10),
Pwd varchar2(100),
Idcard varchar2(100),
Real_name varchar2(100),
Sex char(2),
Birth date,
Phone_num number,
Address varchar2(100),
Email varchar2(100),
Integral number,
Active_state char(4) default 'on',
Reg_time date default sysdate,
Other_note varchar2(100)
);
--插入数据
insert into user_info
values
  (1,
   'dbtiger',
   '123',
   '42108...',
   'TOM',
   '男',
   SYSDATE-5,
   1307979887889,
   '北京市海淀区...',
   '824661247@qq.com',
   100,
   'on',
   sysdate,
   'VIP');
select t.*,rowid from user_info t;




2.假如现在系统已经完成,网站要做一个贴心活动,对于注册且激活了且生日即将到达的用户(生日前五天),
我们根据其注册时间的长短,送积分,积分数=注册时间月数*100,请大家用PLSQL实现这个功能
--【2】
select to_date(sysdate-5,'yyyy-mm-dd') from dual;
select to_char(sysdate-5,'yyyy-mm-dd') from dual;
select round((sysdate-t.reg_time)/30) from user_info t;
select sysdate-(sysdate-2) from dual;
select t.*,rowid from user_info t;
user_info.integral%type
declare
  --定义注册时间月数
  v_month number := 0;
  --定义积分的变量v_integral
  v_integral number := 0;
begin
  select round((sysdate - t.reg_time) / 30)
    into v_month
    from user_info t
   where to_char(t.birth, 'yyyy-mm-dd') =
         to_char(sysdate - 5, 'yyyy-mm-dd');
  --积分数=注册时间月数*100
  v_integral := v_month * 100;
  update user_info t
     set t.integral = v_integral + integral
   where to_char(t.birth,'yyyy-mm-dd') = to_char(sysdate - 5,'yyyy-mm-dd');
end;




来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29267792/viewspace-2087583/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: dba的发展方向
请登录后发表评论 登录
全部评论
积极,热爱生活!

注册时间:2014-01-15

  • 博文量
    32
  • 访问量
    112279