pl sql项目演练--B2C商城项目

  项目学习视频下载地址:点击下载
 
  1.注册会员及找回密码模块
}该模块主要功能有注册会员和找回密码
}注册会员:所需信息主要有:登录号、密码、真实姓名、性别、密码问题、密码答案、Email、地址、电话、身份证
}找回密码:主要根据登录号、密码问题及密码答案,重置密码
此系统为在线点卡销售系统,用户信息还应该包括:用户角色,用户余额,用户状态
 
 1 SQL> create table UserInfo
 2   2  (UserId varchar2(50) not null primary key,  --用户ID
 3   3  UserName varchar2(50) not null, --真实姓名
 4   4  PassWord varchar2(50) not null, --密码
 5   5  UserRole number(2), --角色
 6   6  Gender number(1) not null check(Gender in(0,1)),  --性别
 7   7  PassQuestion varchar2(50) not null,  --密码提示问题
 8   8  PassAnswer  varchar2(50) not null ,  --密码提示答案
 9   9  Email   varchar2(50) not null,  --电子邮箱
10  10  TelNO   number(11) not null,    --电话号码
11  11  Address varchar2(50),          --联系地址
12  12  IdCardNO  number(18),          --身份证号
13  13  Money   number,                --用户余额
14  14  UserState number               --用户状态
15  15  );
View Code

 创建用户注册存储过程完成用户注册

 1 CREATE OR REPLACE PROCEDURE INSERTINFO_PROC 
 2 (
 3   UserId VARCHAR2 ,
 4   Username varchar2,
 5   password varchar2,
 6   Gender number,
 7   PassQuestion varchar2,
 8   PassAnswer varchar2,
 9   Email varchar2,
10   TelNo varchar2,
11   Address varchar2 :=null,
12   IdCardNo varchar2,
13   UserRole number:=5,
14   Money number :=0,
15   UserState number:=1
16 ) AS 
17 BEGIN
18   Insert into userinfo values(UserId,UserName,PassWord,UserRole,Gender,PassQuestion,PassAnswer,Email,TelNO,
19   Address,IdCardNO, Money, UserState);
20   commit;
21   if  sql%NOtFound then
22     dbms_output.put_line('注册失败');
23   end if;
24 END INSERTINFO_PROC;
View Code

 

  2.管理员个人管理模块
}该模块主要包括:修改个人资料和审核操作。
} 修改个人资料与会员注册所需资料完全一致,主要有:登录号、密码、真实姓名、性别、密码问题、密码答案、Email、地址、电话、身份证。
} 审核操作:主要是对新注册的会员和会员的汇款信息进行审核,可以把新会员设置成为正式会员,根据会员汇款的数额,对会员的个人帐户充值。
把新会员设置成为正式会员:
1 create or replace PROCEDURE USERINFO_PROC
2 (P_UserId varchar2)
3 AS 
4 BEGIN
5   update userinfo set uerrole=3 where userid=p_userid;
6   commit;
7 END USERINFO_PROC;
View Code

 查看会员信息:

 1 create or replace PACKAGE PKG_USERINFO AS 
 2 
 3   /* TODO enter package declarations (types, exceptions, methods etc) here */ 
 4   type userinfos is ref cursor;
 5   procedure select_userinfo(p_userid varchar2,p_userinfo out userinfos);
 6 END PKG_USERINFO;
 7 
 8 
 9 create or replace PACKAGE BODY PKG_USERINFO AS
10 
11   procedure select_userinfo(p_userid varchar2,p_userinfo out userinfos) AS
12   sqlstr varchar2(500);
13   BEGIN
14     -- TODO: procedure PKG_USERINFO.select_userinfo所需的实施
15     sqlstr:='select UserID,UserName,PassWord,Gender,PassQuesstion,PassAnswer,Email,TelNo,Address,
16 IDCardNo,Money from UserInfo  where UserID=:v_userid';
17    open p_userinfo for sqlstr using p_userid;
18   END select_userinfo;
19 
20 END PKG_USERINFO;
View Code

对角色信息扩展,增加角色表:

 1 truncate table userinfo;
 2 alter table userinfo add constraint fk_roleinfo foreign key (uerrole) references roleinfo (roleid);
 3 
 4 
 5 create table RoleInfo
 6   2  (RoleId number(2) primary key,     --角色ID
 7   3   RoleName varchar2(50),            --角色名称
 8   4   RoleDesc varchar2(50),            --角色描述
 9   5   DisCount number(2)                --会员折扣
10   6  );
View Code

 同时对多个用户操作首先获取多个用户的userid

 1 create global temporary table temptable (col varchar2(30)) on commit delete rows;
 2 
 3 CREATE OR REPLACE PROCEDURE GETUSERID_PROC (p_str varchar2)AS
 4 result_str varchar2(30);
 5 i number :=1;
 6 s number:=1;
 7 j number:=0;
 8 BEGIN
 9   while i!=0 loop
10   i:=instr(p_str,',',1,s);
11   if(i=0) then
12   result_str:=substr(p_str,j+1,length(p_str)-j);
13   else
14   --xiaomi,maf,an
15   --         j      i
16   --         7     11
17   result_str:=substr(p_str,j+1,i-j-1);
18   end if;
19   j:=i;
20   s:=s+1;
21   dbms_output.put_line(result_str);
22  insert into temptable values(result_str);
23   end loop;
24 END GETUSERID_PROC;
View Code

同时对多个用户删除,修改角色

 1  create or replace procedure updaterole_proc  --修改角色
 2   2  (UserID_String  varchar2,
 3   3   parm_UserRole varchar2)
 4   4  as
 5   5   begin
 6   6       getuserid_proc(UserID_String);    --多个用户ID之间用逗号隔开
 7   7     update UserInfo
 8   8     set UserRole=parm_UserRole
 9   9     where Userid in(select col from temptable);
10  10     commit;
11  11    end;
12  12  /
13 
14 过程已创建。
15 
16 SQL> create or replace procedure DeleteUser_proc   --删除用户
17   2  (UserID_String varchar2)
18   3  as
19   4   begin
20   5    getuserid_proc(UserID_String);
21   6    delete userinfo
22   7    where userid in(select col from temptable);
23   8    commit;
24   9   end;
25  10  /
View Code

   3.

} 角色管理:主要包括添加角色、修改角色、删除角色、分配角色功能、浏览所有角色功能、设置会员优惠价。
} 添加角色:包括角色名称、角色描述。
} 分配角色功能:列出所有功能菜单,菜单分为两级,只列出子菜单,把选中的菜单id及菜单的父菜单id添加到指定的角色下,可以随时修改角色对应的功能菜单。
} 浏览所有角色功能:按角色分别列出这些角色对应的权限菜单。
} 设置会员优惠价:设置不同角色的优惠比例。
 创建所有菜单功能表:
1 create table sysfun   --存放菜单功能基本信息
2     (nodeid number(2) not null,     --菜单编号
3       displayname varchar2(50) not null, --菜单名称
4    nodeurl varchar2(50) not null,  --菜单连接地址
5      displayorder number(2) not null,  --菜单显示顺序
6   parentnodeid  number(2)not null  --父节点
7      );
View Code

将各个功能与相应角色对应

1  create table roleright
2   (rolerightid number(2) not null,
3   roleid number(2),
4    nodeid number(2) );
View Code
1    alter table sysfun add constraint pk_sysfun primary key (nodeid);
2    alter table roleright
3   add constraint fk_roleid foreign key(roleid) references roleinfo(roleid);
4   alter table roleright 
5   add constraint fk_nodeid foreign key(nodeid) references sysfun(nodeid);
View Code

 

 添加角色:
 1 create sequence seq_id
 2 increment by 1
 3 start with 1;
 4 
 5 CREATE OR REPLACE TRIGGER TRI_ROLEID 
 6 BEFORE INSERT ON ROLEINFO 
 7 for each row
 8 declare new_key number(2);
 9 BEGIN
10   new_key:=seq_id.nextval;
11   :new.roleid:=new_key;
12 END;
13 
14 create or replace PROCEDURE INSERTROLE 
15 (
16   P_ROLENAME IN VARCHAR2 ,
17   p_roledesc in varchar2
18 ) AS 
19 BEGIN
20   insert into roleinfo(rolename,roledesc) values(
21   p_rolename,p_roledesc
22   );
23   commit;
24 END INSERTROLE;
View Code

设置优惠:

 1 create or replace procedure U_discount   --设定优惠价比
 2   2  (parm_rolename varchar2,
 3   3   parm_discount number)
 4   4  as
 5   5   begin
 6   6     update roleinfo
 7   7     set discount=parm_discount
 8   8     where rolename=parm_rolename;
 9   9   end;
10  10  /
View Code

   4.sql优化

  1 1.表名顺序
  2 
  3 table  A    1000条
  4 table  B    1
  5 
  6 select count(*)
  7 from A, B    (最佳方法)
  8 
  9 
 10 select count(*)
 11 from B,A  (不好方法)
 12 
 13 
 14 2.where 子句条件采用自下而上顺序解析
 15  (低效方法)
 16    select ...
 17    from emp E
 18    where sal>2000
 19    and   job='MANAGER'
 20    and 25<(select count(*) from where mgr=E.EMPNO)
 21 
 22   (高效方法)
 23   select ...
 24    from emp E
 25    where 25<(select count(*) from where mgr=E.EMPNO)
 26    and   job='MANAGER'
 27    and  sal>2000
 28 
 29 
 30 3.减少访问数据库的次数
 31 (低效方法)
 32  select ename,sal,job from emp
 33  where empno=7369;
 34  select ename,sal,job from emp
 35  where empno=7499;
 36 
 37  (高效方法)
 38  select A.ename, A.sal, A.job,B.ename,B.sal, B.job
 39  from emp A, emp B
 40  where empno=7369 and empno=7499;
 41 
 42 
 43 
 44 4. decode减少处理时间
 45   select count(*),sum(sal)from emp
 46   where deptno=20 and ename like 'SMITH%';
 47    select count(*),sum(sal)from  emp
 48   where deptno=30 and ename like 'SMITH%';
 49 
 50  高效方法
 51   select count(decode(deptno,20,'*',0)) as count20,
 52    count(decode(deptno,30,'*',0)) as count30,
 53    sum(decode(deptno,20,sal,0)) as sumsal20,
 54    sum(decode(deptno,30,sal,0)) as sumsal20,
 55    from emp
 56    where ename like 'SMITH%';
 57 
 58 5.删除重复记录
 59  (高效方法)
 60   delete from emp E
 61   where E.rowid>(select min(X.ROWID) from emp X where X.empno=E.empno);
 62 
 63 6.where替换having 
 64  先后顺序
 65  on
 66  where 
 67 having
 68 
 69   
 70 7.使用表的别名 
 71    select A.COL1,A.col2,B.COL1
 72    from test1  A, test2 B
 73 
 74 8.exists   distinct
 75 (低效)
 76   select distinct deptno,deptname from dept D, emp E
 77   where D.deptno=E.deptno;
 78  
 79 (高效)
 80  select distinct deptno,deptname from dept D
 81   where EXISTS(select * from emp where E.deptno=D.deptno);
 82  
 83 
 84 9.索引不要使用在计算字段上
 85   select ... from emp where sal*12>20000  (低效)
 86   select ... from emp where sal>20000/12 (高效)
 87 
 88 10.
 89   select * from student where cno='1' or cno='2'
 90   
 91   select * from student where cno='1'
 92   union 
 93   select * from student where cno='1'
 94 
 95 11.
 96  select ename,sal from emp
 97  where sal+2000>5000;(停用索引)
 98 
 99  select ename,sal from emp
100  where sal>3000;(启用索引)
101 
102 12.耗费资源的操作
103   distinct,union,intersect, order by
104 
105 13.优化group by
106 (低效)
107   select job,avg(sal)
108   from emp
109   group by job
110   having job='MANAGER' or job='CLERK';
111 
112 
113 
114 
115 (高效)
116   select job,avg(sal)
117   from emp
118    where job='MANAGER' or job='CLERK'
119   group by job;
120 
121 
122 
123 
124 
125 
126 
127 
128 
129 
130 
131 
132 
133  
134 
135 
136 
137   
138  
View Code

 

转载于:https://www.cnblogs.com/charlie-badegg/p/3309121.html

课程简介:Oracle 11G 完整的课程体系,从安装到入门到项目实战开发,整个学习过程,都以实践操作为主,大量的案例,实例,作业,来保证学习,练习,直到具备数据分析师,掌握SQL部分,能达到数据库开发工程师的能力要求与水平,SQL查询,数据库对象,索引,视图,分区表,优化等等实现从事数据分析师所具备的的数据处理能力,结合存储过程开发与使用,能更好的结合业务需求来完成对指标的统计与分析。 课程收益你将获得:    数据分析师SQL实战    掌握Oracle数据库全部技能    数据分析师入门操作    数据库开发工程师    独立开发数据库需求    SQL纯实战应用    具备数据处理,数据存储技能    具备数据仓库架构师思维与应用 1、建议每天保证2个小时学习时间,加以练习实操2、每节课后的练习案例动手实践,方能记忆深刻3、学完知识点后举一反三,应用到实际工作中 课程亮点:Oracle全集包含服务器搭建,客户端使用,入门步骤,SQL各查询实现,条件查询,分组,聚合函数,正则表达式,高级函数,连接查询,多表查询,子查询,数据插入,更新,删除,数据库对象,如表,视图,索引,同义词,分区表,存储过程,存储过程大量案例,项目开发等等内容丰富,各知识点都配置相应的作业及解答过程,真正实例与案例操作,学会Oracle各种操作,满足实际业务工作需要,真正做到事半功倍,以实践工作出发完成各知识点的学习与应用,掌握数据库相关的技能 适合人群: 数据分析师,数据库开发人员,技能提升,数据库应用,在校学生,零基础入门,项目开发,初,中,高级数据库开发工 程师,ETL开发,数据仓库架构,数据运维,企业开发,数据管理,数据质量等。 老师介绍:SUN老师高级数据分析专家,有着丰富的BI项目开发工作经验,具备数仓各方面的数据治理,指标开发,业务梳理,口径开发,曾相继在中国移动,亚信,文思任职高级项目开发,专业领域BI,数据分析,维度与指标展示,数仓流程开发,可视化等相关技术 ,有完备的数据分析理论知识与应用,在数据分析,数据处理,数据可视化数据建模等应用,指标统计,维度分析,多维分析等有深入研究,具备更严谨的实践技能操作。 课程大纲:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值