发布网友 发布时间:2022-04-21 00:39
共7个回答
懂视网 时间:2022-04-08 15:04
视图
什么是视图
视图(VIEW)也被称作虚表,也就是虚拟的表,是一组数据的逻辑表示.
视图对应一个select语句,结果集被赋予一个名字,就是视图的名字
视图本身不包含任何数据,它只是包含映射到基表的一个查询语句,当基表数据发生变化,视图数据也随之变化
视图创建后可以像操作表一样操作视图,主要是查询.
根据视图所对应的子查询种类可以分为几种类型
select语句是基于单表建立,并且不包含任何函数运算,表达式或者分组函数,叫做简单视图,此时视图是基表的子集.
select语句是基于单表建立,但是包含了单行函数,表达式,分组函数或者group by子句,叫做复杂视图
select语句是基于多个表的,叫做连接视图
视图的作用
如果需要经常执行某种复杂查询,可以基于这个复杂查询建立视图,以后查询此视图即可,可以简化复杂查询
视图本质上就是一条select语句,所以当访问视图时,只能访问到对应的select语句中涉及到的列,对基表中的其他列起到安全和保密的作用,限制数据的访问
创建视图的用户必须要获得创建视图的权限
在sysdba角色下为指定用户授权
conn sys/root as sysdba;
show user;
grant create view to scott;
conn scott/a;
show user;
创建视图
create or replace view v_emp
as
select col1,col2 from emp;
grant create view to scott;
desc v_emp;
删除视图
drop view v_emp;
create or replace view v_emp_2
as
select empno no,ename name,job job,sal sal from emp;
---------------------------------------------------------------------------------------------
序列(sequence)
用在哪里
在mysql数据库中可以设置某个id字段以自动增长的方式,实现数据的插入
create table mysql_tbl(
id int primary key auto_increment,
name varchar(100)
)
在oracle中如何实现mysql表中的id字段自动增长
使用序列 序列是oracle中的一种对象
create sequence seq_user --创建序列的关键字和序列名称
increment by 1 --自动增加的步长 默认 1
start with 1 --开始的大小值 默认 1
maxvalue | minvalue num --最大值和最小值 默认nomaxvalue 默认最大值10的26次方
nomaxvalue//默认情况下就是他 --默认的 不限制
cycle | nocycle//轮回,不轮回,默认不轮回 默认nocycle
cache num | nocache --缓存区大小 默认20
创建序列
create sequence seq_user;
使用序列
查看下一个value
select seq_user.nextval from dual;
查看当前value
select seq_user.currval from dual;
建表
create table t_user(id number,username varchar2(100),password varchar2(48),regtime date,constraint pk_user primary key(id));
insert into t_user values(seq_user.nextval,‘jack‘,‘123123‘,sysdate);
删除序列
drop sequence seq_user;
需要一张表t_product
编号 主键 自动增长
产品名称 非空
产品销量 非空 默认0
产品库存 非空 默认0
产品初始化销量
创建表
插入5条数据
建立视图(视图中不显示 产品初始化销量)
查询视图
从视图插入一条数据
create table t_product(
id number,
p_name varchar2(100) not null,
p_salenum number default 0,
p_stock number default 0,
p_init_salenum number,
constraint pk_product primary key(id)
);
create sequence seq_product; --创建序列的关键字和序列名称
插入5条数据
insert into t_product values(seq_product.nextval,‘zy‘,100,200,50);
insert into t_product values(seq_product.nextval,‘zhangsan‘,300,600,100);
insert into t_product values(seq_product.nextval,‘lisi‘,500,1000,300);
insert into t_product values(seq_product.nextval,‘wangwu‘,1000,2000,500);
insert into t_product values(seq_product.nextval,‘mm‘,200,400,30);
建立视图
create or replace view v_product
as
select id no,p_name name,p_salenum salenum,p_stock stock from t_product;
查询视图
select * from v_product;
从视图插入一条数据
insert into v_product values(seq_product.nextval,‘xiaoliu‘,100,200);
-------------------------------------------------------------------------------
存储过程
存储过程适合做更新操作,特别是大数据量的更新
创建存储过程
create or replace procedure proc1
as | is --相当于declare 声明的意思
abc varchar2(100); --定义该存储过程的变量 作用域就是本存储过程中
begin
update t_user set username = ‘lucy‘ where id=3;
end;
例如
create or replace procedure proc1
as
begin
update t_user set username = ‘lucy‘ where id=3;
commit;
end;
/
create or replace procedure proc
as
begin
insert into t_user values(seq_user.nextval,‘zy‘,324234,sysdate);
commit;
end;
调用存储过程
exec proc1;
exec proc;
-------------------------------
带输入参数的存储过程
创建存储过程
create or replace procedure proc2(
param1 varchar2,param2 varchar2 default ‘888888‘ --存储过程的参数 类型不需要指定宽度(范围)
)
as
begin
insert into t_user values (seq_user.nextval,param1,param2,sysdate);
commit;
end;
执行
exec proc2(‘tom‘,‘121212‘);
call proc2(‘mary‘);
-------------------------------
带输出参数的存储过程
create or replace procedure proc3(
param1 in varchar2,param2 out varchar2 --in代表输入参数 out 代表输出参数 param0 in out number输入输出参数
)
as
begin
select password into param2 from t_user where username =param1;
dbms_output.put_line(param2);
end;
set serverout on;
var pp varchar2(100);
exec proc3(‘tom‘,:pp);
-------------------------------
带输出多个参数的存储过程
create or replace procedure proc3(
param1 in varchar2,param2 out varchar2,param3 out varchar2 --in代表输入参数 out 代表输出参数 param0 in out number
)
as
begin --注意:这里只能处理返回的是一条记录的结果集,如果结果集含有多条记录,
--oracle没有提供直接处理的方式,必须间接的借助游标,游标效率很差,实际开发中基本不使用
select id,password into param2,param3 from t_user where username =param1;
dbms_output.put_line(‘查询的结果数据是:id=‘ || param2 || ‘,password=‘ || param3);
end;
set serverout on;
var pp1 varchar2(100);
var pp2 varchar2(100);
exec proc4(‘tom‘,:pp1,:pp2);
--------------------------------
定义变量
param1 varchar2(100); --变量的类型,可以是oracle系统所有合法的数据类型
param2 number;
给变量赋值
param1 :=‘who am i!‘;
param2 :=‘123‘;
判断
if t_value = 1 then
begin
do...
end;
end if;
-----------
create or replace procedure proc_if(pp in number)
as
total number;
begin
total :=pp;
if total<4 then
begin
insert into t_user values (seq_user.nextval,‘suqier‘,‘666666‘,sysdate);
commit;
end;
end if;
end;
call proc_if(3);
---------------------------------------
while循环
while t_value = 1 loop
begin
do...
end;
end loop;
create or replace procedure proc_while
as
i number;
begin
i:=1;
while i<100 loop
dbms_output.put_line(i);
i:=i+1;
end loop;
end;
exec proc_while;
---------------------------------------
for y in 1..100 loop
i:=x*y;
exit when i=300;
end loop;
create or replace procedure proc_for
as
begin
for i in 1..100 loop
dbms_output.put_line(i);
end loop;
end;
exec proc_for;
---------------------------------------
create or replace procedure proc3(
param1 in varchar2,param2 out varchar2,param3 out varchar2 --in代表输入参数 out 代表输出参数 param0 in out number
)
as
param varchar2(100);
begin
select id,password into param2,param3 from t_user where username = param1;
param :=‘who am i?‘;
dbms_output.put_line(‘查询的结果数据是:id=‘ || param2 || ‘,password=‘ || param3);
dbms_output.put_line(param);
end;
set serverout on;
var pp1 varchar2(100);
var pp2 varchar2(100);
exec proc4(‘tom‘,:pp1,:pp2);
oracle学习第五天
标签:
热心网友 时间:2022-04-08 12:12
看你基础怎么样?如果是零基础想入门就学oracle wdp parnter——CUUG的oracle云计算DBA课程,时间是4个月,包括最基础的系统课程,中级的ocp课程,高级的ocm课程,项目实战和最后的就业课程。如果已经是在这个行业了或者之前学过oracle,那么建议你去考ocp证书,选择学ocp一定要选择oracle wdp parnter学习。ocp证书在cuug是15天。热心网友 时间:2022-04-08 13:30
现在市面上脱产培训的一般是2-4个月,具体的话看师资和课程安排包括教学方式,也不能单独的以时间来论定好坏,关键还是得依据就业指标,因为这才是大家培训的目的嘛,在这方面可以参考一下道森Oracle培训,师资在过来来说算是顶配了,就业也一直排在行业前茅,虽然现在规模不大,但是谁知道它几年之后能成长成为什么样子呢热心网友 时间:2022-04-08 15:05
学习ORACLE最好是有linux基础,如果没有话就要再培训下linux,培训这东西,肯定是时间长点才学得到东西。那些考证课程的,一般10天左右,是学不懂东西的,ORACLE 这东西,不是必要的话,可以先不用考证的,毕竟不便宜啊热心网友 时间:2022-04-08 16:56
入门1个月就行了,去cuug可以学到oracle专业培训热心网友 时间:2022-04-08 19:04
我知道的OCP培训是12次课,每次6个小时。热心网友 时间:2022-04-08 21:29
ocp也就是oracle的中级课程在万和学的话大概一个多月吧。具体还要看你利用什么时间学习。