-解锁用户,需要使用dba权限
conn sys/1234 as dba;

alert user scott account unlock;
/

--initcap方法,实现字符串首字符大写,其余字符小写,受空格,逗号等非字母符号限制 
select initcap('hello word,da jia hao!') Hello from dual;

--平均工资大于2000的分组
select avg_sal,deptno from 
(select avg(sal) avg_sal,deptno from emp group by deptno) 
where avg_sal >2000;

having语句用法:
select avg(sal),deptno from emp group by deptno having avg(sal) > 2000;
/

--求部门中哪些人的薪水最高
select ename,sal from emp e join (select max(sal) max_sal,deptno from emp group by deptno) t on (e.deptno = t.deptno and e.sal = t.max_sal)
/
--求部门平均薪水的等级
select deptno,avg_sal,grade from salgrade s join (select avg(sal) avg_sal,deptno from emp group by deptno) t on (t.avg_sal between s.losal and hisal)
/
--求部门平均的薪水等级
select avg(t.grade) avg_grade,t.deptno from (select ename,deptno,grade from emp e join salgrade s on (e.sal between s.losal and s.hisal)) t group by t.deptno
/
--雇员中哪些人是经理人
select ename from emp where empno in (select distinct mgr from emp)
/
--不用函数求薪水的最高值
select distinct ename,sal from emp where sal not in (select distinct e1.sal from emp e1 join emp e2 on (e1.sal <e2.sal))
/
select t.ename,t.sal from (select ename,sal from emp order by sal desc) t where rownum<2(当最大薪水有多值时不对)
/
--求平均薪水最高的部门的部门编号
select deptno,avg_sal from 
(select avg(sal) avg_sal,deptno from emp group by deptno) 
where avg_sal = 
(select max(avg_sal) from (select avg(sal) avg_sal,deptno from emp group by deptno)
)

等同于:
select deptno,avg_sal from
(select avg(sal) avg_sal,deptno from emp group by deptno)
where avg_sal = 
(select max(avg(sal)) from emp group by deptno)
/
--求平均薪水最高的部门名称
select dname from dept where deptno = 
(
select deptno from 
( select deptno,avg(sal) avg_sal from emp group by deptno ) 
where avg_sal =
( select max(avg_sal) from 
(select avg(sal) avg_sal,deptno from emp group by deptno) 
)
)
/
--求平均薪水的等级最低的部门的部门名称
select t.deptno,t.dname from dept t where t.deptno = 
(
select deptno from 
(
select deptno,grade,avg_sal from 
(select avg(sal) avg_sal,deptno from emp group by deptno) 
join salgrade s on (avg_sal between s.losal and s.hisal)
where grade = 
(
select min(grade) from 
(
select deptno,grade,avg_sal from 
(select avg(sal) avg_sal,deptno from emp group by deptno) 
join salgrade s on (avg_sal between s.losal and s.hisal)
)
)

)
等同于:
select t.deptno,dname,avg_sal,grade from
(
select deptno,avg_sal,grade from
(select avg(sal) avg_sal,deptno from emp group by deptno) t1
join salgrade s on (t1.avg_sal between s.losal and s.hisal)
) t
join dept d on (t.deptno = d.deptno)
where t.grade = 
(
select min(grade) from 
(
select deptno,avg_sal,grade from
(select avg(sal) avg_sal,deptno from emp group by deptno) t1
join salgrade s on (t1.avg_sal between s.losal and s.hisal)

)

/
--求平均等级最低的部门名称
select t.dname from dept t where t.deptno = 

select deptno from 
( select deptno,avg(grade) avg_grade from
( select e.deptno,s.grade from emp e join salgrade s on (e.sal between s.losal and s.hisal)

group by deptno

where avg_grade = 
( select min(avg_grade) from 
(select deptno,avg(grade) avg_grade from 
(select e.deptno,s.grade from emp e join salgrade s on (e.sal between s.losal and s.hisal) 

group by deptno 


)
/
--创建视图,首先赋予权限
conn sys/1234 as sysdba; sys不校验密码,任意密码即可。
grant create table,create view to scott;

create view v_dept_avg_sal_info as
select deptno,grade,avg_sal from
(select deptno,avg(sal) avg_sal from emp group by deptno) t
join salgrade s on (t.avg_sal between s.losal and s.hisal);

因此,求平均等级最低的部门名称可以用一下语句替换:
select t.deptno,d.dname,avg_sal,grade from
v_dept_avg_sal_info t 
join dept d on (t.deptno = d.deptno)
where t.grade = (select min(grade) from v_dept_avg_sal_info);

/

--求部门经理人中平均薪水最低的部门名称(经理人指empno存在于mgr中的员工)

select dname, t.deptno, avg_sal
from (select deptno, avg(sal) avg_sal
from emp
where empno in (select distinct mgr from emp where mgr is not null)
group by deptno) t
join dept d
on (d.deptno = t.deptno)
where t.avg_sal =
(select min(avg_sal)
from (select deptno, avg(sal) avg_sal
from emp
where empno in
(select distinct mgr from emp where mgr is not null)
group by deptno))

创建视图v_mgr_sal_info,如下: 
create view v_mgr_sal_info as
select deptno, avg(sal) avg_sal
from emp
where empno in (select distinct mgr from emp where mgr is not null)
group by deptno;

select dname, t.deptno, avg_sal
from v_mgr_sal_info t
join dept d
on (d.deptno = t.deptno)
where t.avg_sal = (select min(avg_sal) from v_mgr_sal_info);

/

--求比普通员工的最高薪水还高的经理人名称:

select ename
from emp
where empno in (select distinct mgr from emp where mgr is not null)
and sal >
(select max(sal)
from emp
where empno not in
(select distinct mgr from emp where mgr is not null))
/

--删除用户
drop user mc cascade;
--备份用户 
backup scott
exp
--创建用户
create user mc identified by 1234 default tablespace quota 10M on users;
--赋予权限
grant create session,create table,create view to mc;
--导入数据
imp

--快速备份表,即创建一个一样的表
create table dept1 as select * from dept;

--求薪水值最高的前五名雇员;
select ename,sal from 
(select ename,sal from emp order by sal desc ) 
where rownum<6;

/
--求薪水值第六名到第十名的雇员;
select ename,sal from
(select ename,sal,rownum r from
(select ename ,sal from emp order by sal desc)
)
where r>5 and r <11;

/

/*
*
* 有3个表S,C,SC
* S(SNO,SNAME)代表(学号,姓名);
* C(CNO,CNAME,CTEACHER)代表(课号,课名,教师)
* SC(SNO,CNO,SCGRADE)代表(学号,课号,成绩)
* 问题:1,找出没选过“黎明”老师的所有学生姓名。
* 2,列出2门以上(含2门)不及格学生姓名及平均成绩。
* 3,既学过1号课程又学过2号课程所有学生的姓名。
* 请用标准SQL语言写出答案。
*/
答案:
1,
select sname from s join sc on (s.sno = sc.sno) join c on (c.cno = sc.cno) where c.cteacher <> '黎明';

2,
--学生姓名
select sname from s where s.sno in ( select sno from sc where sc.scgrade < 60 group by sco having count(*) >=2 );
--平均成绩
select avg(scgrade) from sc where sc.sno in ( select sno from sc where sc.scgrade < 60 group by sco having count(*) >=2 ) group by sc.sno;

3,
select sname from s where s.sno in (select sno from sc where sc.cno =1 and sno in ( selcet distinct sno from sc where cno = 2 ) );

--
一个事务(transaction)起始于一条dml语句(insert,update,delete),终止于①commit语句;②ddl语句(create,drop)和dcl语句(grant,remove);
正常断开连接时,transaction自动提交,非正常断开连接,transaction自动回滚。

--创建一张学生表 --约束类型:不为空约束,主键约束,外键约束,唯一性约束,check约束
create table stu1 --字段级约束条件
(
id number(6),
name varchar2(20) constraint stu_name_nn not null,--不为空约束
sex number(1),
age number(3),
sdate date,
grade number(2) default 1,
class number(4) references class(id),--外键约束,外键约束被参考条件必须是主键
email varchar2(50) unique --唯一约束条件
);

create table stu 
(
id number(6) primary key,--主键约束
name varchar2(20) constraint stu_name_nn not null,--不为空约束
sex number(1),
age number(3),
sdate date,
grade number(2) default 1,
class number(4),
email varchar2(50),
constraint stu_name_email_uni unique(name,email), --表级约束
constraint stu_class_fk_foregin key (class) references class(id)
);

create table class
(
id number(4) primary key,
name varchar2(20) not null
);

alert table stu add(addr varchar2(100));

alert table stu drop (addr);

alert table stu modify (addr varchar2(120));

alert table stu add constraint stu_class_fk foreign key (class) references class(id);

--创建与删除索引
create index idx_stu_email on stu (email);

drop index idx_stu_email;
/

三范式:
①要有主键,列不可分;
②不能存在部分依赖;(联合主键情况下,非主键列不能部分依赖于主键)即每张表只描述一件事
③确保每列都和主键列直接相关,而不是间接相关。

--pl/sql结构化语言

--变量声明的规则:
1,变量名不能使用保留字,如from、select等;
2,第一个字符必须是字母;
3,变量名最多包含30个字符;
4,不要与数据库的表或者列同名;
5,每一行只能声明一个变量。

--常用变量类型:
1,binary_integer,整数,主要用来计数而不是用来表示字段类型;
2,number,数字类型;
3,char,定长字符串;
4,varchar2,变长字符串;
5,date,日期;
6,long,长字符串,最长2GB;
7,boolean,布尔类型,可以取值为true、false和null值。

--最简单的语句块
begin
dbms_output.put_line('HelloWorld');
end;
/

在dos命令窗口输出命令:
set serveroutput on;

--简单的PL/SQL语句块
declare
v_name varchar2(20);
begin
v_name := 'myname';
dbms_output.put_line(v_name);
end;
/

--异常处理
declare
v_num number := 0;
begin
v_num := 2/v_num;
dbms_output.put_line(v_num);
exception
when others then
dbms_output.put_line('error');
end;
/

--变量声明
declare
v_temp number(1);
v_count binary_integer := 0;
v_sal number(7,2) := 4000.00;
v_date date := sysdate;
v_pi constant number(3,2) := 3.14;

v_valid boolean := false;
v_name varchar2(20) not null := 'MyName';
begin
dbms_output.put_line('v_temp value:' || v_sal);
end;
/
注意:dbms_output.put_line命令不能打印布尔类型。

--变量声明,使用%type属性
declare
v_empno number(4);
v_empno2 emp.empno%type;
v_empno3 v_empno2%type;
begin
dbms_output.put_line('Test');
end;
/

--Table变量类型,相当于java中的数组。
declare
type type_table_emp_empno is table of emp.empno%type index by binary_integer;
v_empnos type_table_emp_empno;

begin
v_empnos(0) := 7369;
v_empnos(2) := 7839;
v_empnos(-1) := 9999;
dbms_output.put_line(v_empnos(-1));
end;
/

--Table类型实例讲解

使用记录类型变量只能保存一行数据,这限制了SELECT语句的返回行数,如果SELECT语句返回多行就会错。Oracle提供了另外一种自定义类型,也就是表类型,它是对记录类型的扩展,允许处理多行数据,类似于表。
创建表类型的语法如下:
TYPE table_name IS TABLE OF data_type [ NOT NULL ]
INDEX BY BINARY_INTEGER ;
语法说明如下:
--table_name 创建的表类型名称。
--IS TABLE 表示创建的是表类型。
--data_type 可以是任何合法的PL/SQL数据类型,例如varchar2。
--INDEX BY BINARY_INTEGER 指定系统创建一个主键索引,用于引用表类型变量中的特定行。

使用表类型的例子:

例一:直接对表类型变量赋值

declare
type my_emp is table of scott.emp%rowtype
index by binary_integer;
new_emp my_emp;
begin
new_emp(1).empno:=6800;
new_emp(1).ename:='tracy';
new_emp(1).job:='clerk';
new_emp(1).sal:=2500;
new_emp(2).empno:=6900;
new_emp(2).ename:='luck';
new_emp(2).job:='manager';
new_emp(2).sal:=4000;
dbms_output.put_line(new_emp(1).empno ||','||new_emp(1).ename||','||new_emp(1).job||
','||new_emp(1).sal);
dbms_output.put_line(new_emp(2).empno ||','||new_emp(2).ename||','||new_emp(2).job||
','||new_emp(2).sal);
end;
/

例二:使用表类型变量的方法:变量名.方法名[索引号]

declare
type my_emp is table of scott.emp%rowtype
index by binary_integer;
new_emp my_emp;
begin
new_emp(1).empno:=6800;
new_emp(1).ename:='tracy';
new_emp(1).job:='clerk';
new_emp(1).sal:=2500;
new_emp(2).empno:=6900;
new_emp(2).ename:='luck';
new_emp(2).job:='manager';
new_emp(2).sal:=4000;
dbms_output.put_line(new_emp.first||','||new_emp.count||','||new_emp.last);
dbms_output.put_line(new_emp(1).empno ||','||new_emp(1).ename||','||new_emp(1).job||
','||new_emp(1).sal);
dbms_output.put_line(new_emp(2).empno ||','||new_emp(2).ename||','||new_emp(2).job||
','||new_emp(2).sal);
--new_emp.delete(1);
dbms_output.put_line(new_emp.next(1));
end;
//

例三:与游标结合使用
declare
type my_emp is table of scott.emp%rowtype
index by binary_integer;
new_emp my_emp;
v_num number:=0;
cursor cur_emp is select empno,ename,job,sal from scott.emp;

begin
for v_emp in cur_emp loop
v_num:=v_num+1;
select * into new_emp(v_num) from scott.emp
where ename=v_emp.ename;
end loop;

for i in 1..new_emp.count loop
dbms_output.put_line(new_emp(i).empno ||','||new_emp(i).ename||','||new_emp(i).job||
','||new_emp(i).sal);
end loop;
end;
/
注意:不能直接对表变量赋值:select * into new_emp from scott.emp where deptno=30; 这种赋值方法是错的,赋值需要使用下标,如上面的的例子。

--Record变量类型
declare
type type_record_dept is record
(
deptno dept.deptno%type,
dname dept.dname%type,
loc dept.loc%type
);
v_temp type_record_dept;
begin
v_temp.deptno := 50;
v_temp.dname := 'aaaa';
v_temp.loc := 'bj';
dbms_output.put_line(v_temp.deptno || ' ' || v_temp.dname);
end;
/

--使用%rowtype声明record变量
declare
v_temp dept%rowtype;
begin
v_temp.deptno := '50';
v_temp.dname := 'aaaa';
v_temp.loc := 'bj';
dbms_output.put_line(v_temp.deptno || ' ' || v_temp.dname);
end;
/

--sql语句的运用
--select语句
declare
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
select ename,sal into v_ename,v_sal from emp where empno = 7369;
dbms_output.put_line(v_ename || ' ' || v_sal);
end;
/
--select语句
declare
v_emp emp%rowtype;
begin
select * into v_emp from emp where empno = 7369;
dbms_output.put_line(v_emp.ename);
end;
/

--insert语句
declare
v_deptno dept.deptno%type := 50;
v_dname dept.dname%type := 'aaaa';
v_loc dept.loc%type := 'bj';
begin
insert into dept values(v_deptno,v_dname,v_loc);
commit;
end;
/

--update语句
declare
v_deptno emp.deptno%type := 50;
v_count number;
begin
update emp set sal = sal/2 where deptno = v_deptno;
--select deptno into v_deptno from emp where empno = 7369;
--select count(*) into v_count from emp;
dbms_output.put_line(sql%rowcount || '条记录被影响');
commit;
end;
/
注意:sql代表刚刚执行过的语句,rowcount代表刚执行过的语句影响的记录。

--PL/SQL中执行DDL语句
begin
execute immediate 'create table T (nnn varchar2(20) default ''aaa'' )';
end;
/

--if语句
--取出7369的薪水,如果<1200,则输出'low',如果<2000,则输出'middle',否则'high';
declare
v_sal emp.sal%type;
begin
select sal into v_sal from emp where empno = 7369;
if(v_sal<1200) then
dbms_output.put_line('low');
elsif(v_sal<2000) then
dbms_output.put_line('middle');
else
dbms_output.put_line('high');
end if;
end;
/

--循环
--loop when循环,相当于java中的do..while循环
declare
i binary_integer := 1;
begin
loop
dbms_output.put_line(i);
i := i+1;
exit when (i >= 11);
end loop;
end;
/
--while循环
declare
j binary_integer := 1;
begin
while j < 11 loop
dbms_output.put_line(j);
j := j+1;
end loop;
end;
/
--for循环
declare
k binary_integer := 1;
begin
for k in 1..10 loop
dbms_output.put_line(k);
end loop;
end;
/
declare
k binary_integer := 1;
begin
for k in reverse 1..10 loop --逆序
dbms_output.put_line(k);
end loop;
end;
/

--错误处理
declare
v_temp number(4);
begin
select empno into v_temp from emp where deptno = 10;
exception
when too_many_rows then
dbms_output.put_line('太多记录了');
when others then
dbms_output.put_line('没数据');
end;
/

declare
v_temp number(4);
begin
select empno into v_temp from emp where empno = 2222;
exception
when no_data_found then
dbms_output.put_line('没数据');
end;
/
--创建错误日志
create table errorlog
(
id number primary key,
errcode number,
errmsg varchar2(1024),
errdate date
);
/
create sequence seq_errorlog_id start with 1 increment by 1;
/
declare
v_deptno dept.deptno%type := 10;
v_errcode number;
v_errmsg varchar2(1024);
begin
delete from dept where deptno = v_deptno;
commit;
exception
when others then
rollback;
v_errcode := SQLCODE;
v_errmsg := SQLERRM;
insert into errorlog values (seq_errorlog_id.nextval,v_errcode,v_errmsg,sysdate);
commit;
end;
/

--游标
declare
cursor c is --声明游标
select * from emp;
v_emp c%rowtype;
begin
open c; --打开游标
fetch c into v_emp;
dbms_output.put_line(v_emp.ename);
close c; --关闭游标
end;
/
--游标,循环
declare
cursor c is
select * from emp;
v_emp c%rowtype;
begin
open c;
loop
fetch c into v_emp;
exit when (c%notfound);
dbms_output.put_line(v_emp.ename);
end loop;
close c;
end;
/
--while循环
declare
cursor c is
select * from emp;
v_emp emp%rowtype;
begin
open c;
fetch c into v_emp;
while (c%found) loop
dbms_output.put_line(v_emp.ename);
fetch c into v_emp;
end loop;
close c;
end;
/
--for循环
declare
cursor c is
select * from emp;
begin
for v_emp in c loop
dbms_output.put_line(v_emp.ename);
end loop;
end;
/
--带参数的游标
declare
cursor c(v_deptno emp.deptno%type, v_job emp.job%type)
is
select ename,sal from emp where deptno = v_deptno and job = v_job;
begin
for v_temp in c(30,'CLERK') loop
dbms_output.put_line(v_temp.ename);
end loop;
end;
/
--可更新的游标
declare
cursor c
is
select * from emp2 for update;
begin
for v_temp in c loop
if (v_temp.sal < 2000) then
update emp2 set sal = sal * 2 where current of c;
elsif (v_temp.sal = 5000) then
delete from emp2 where current of c;
end if;
end loop;
commit;
end;
/

--oracle集合类型的first、next、prior、 last方法

创建一个存储过程,用于产生oracle三种集合类型的数据

create or replace procedure plch_main
is
TYPE NESTED_T IS TABLE OF NUMBER;--嵌套表类型
TYPE ASSOCIATIVE_T IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; --索引表类型
TYPE VARRAYS_T IS VARRAY(10) OF NUMBER; --变长数组类型

lst_nested nested_t:=nested_t(-2000,null,3500);
lst_associative associative_t;--索引表类型的集合不能直接赋值 可以从其特性来理解(可以是稀疏排列的)
lst_varrays varrays_t:=varrays_t(-2000,null,3500);
begin

lst_associative(1):=-2000;
lst_associative(3):=null;--注意,这里没有lst_associative数组第二个元素
lst_associative(4):=3500;

dbms_output.put_line('以下为嵌套表的输出内容:');
dbms_output.put_line('lst_nested(1) :'||lst_nested(1));
dbms_output.put_line('lst_nested(2) :'||lst_nested(2));
dbms_output.put_line('lst_nested(3) :'||lst_nested(3));
dbms_output.put('lst_nested.first-1:'); 
dbms_output.put_line(lst_nested.first-1);
dbms_output.put_line('lst_nested.first :'||lst_nested.first);
dbms_output.put_line('lst_nested.prior(1):'||lst_nested.prior(1));
dbms_output.put_line('lst_nested.next(1):'||lst_nested.next(1));
dbms_output.put_line('lst_nested.next(2):'||lst_nested.next(2));
dbms_output.put_line('lst_nested.next(3):'||lst_nested.next(3));
dbms_output.put_line('lst_nested.last :'||lst_nested.last);

dbms_output.put_line('以下为索引表的输出内容:'); 
dbms_output.put_line('lst_associative(1) :'||lst_associative(1));
dbms_output.put_line('lst_associative(3) :'||lst_associative(3));
dbms_output.put_line('lst_associative(4) :'||lst_associative(4));
dbms_output.put('lst_associative.first-1:');
dbms_output.put_line(lst_associative.first-1);
dbms_output.put_line('lst_associative.first :'||lst_associative.first);
dbms_output.put_line('lst_associative.prior(1):'||lst_associative.prior(1));
dbms_output.put_line('lst_associative.next(1):'||lst_associative.next(1));
dbms_output.put_line('lst_associative.next(2):'||lst_associative.next(2));
dbms_output.put_line('lst_associative.next(4):'||lst_associative.next(4));
dbms_output.put_line('lst_associative.last :'||lst_associative.last);

dbms_output.put_line('以下为变长数组的输出内容:');
dbms_output.put_line('lst_varrays(1) :'||lst_varrays(1));
dbms_output.put_line('lst_varrays(2) :'||lst_varrays(2));
dbms_output.put_line('lst_varrays(3) :'||lst_varrays(3));
dbms_output.put('lst_varrays.first-1:');
dbms_output.put_line(lst_varrays.first-1);
dbms_output.put_line('lst_varrays.first :'||lst_varrays.first);
dbms_output.put_line('lst_varrays.prior(1):'||lst_varrays.prior(1));
dbms_output.put_line('lst_varrays.next(1):'||lst_varrays.next(1));
dbms_output.put_line('lst_varrays.next(2):'||lst_varrays.next(2));
dbms_output.put_line('lst_varrays.next(3):'||lst_varrays.next(3));
dbms_output.put_line('lst_varrays.last :'||lst_varrays.last);
end;
/

存储过程编译成功,以下调用并查看结果。
特别注意三种数组中第一个元素的prior方法、最后一个元素的next方法都是可以执行出来的;
并且索引表类型中未定义的元素序列也有prior、next方法。

SQL> exec plch_main;

以下为嵌套表的输出内容:
lst_nested(1) :-2000
lst_nested(2) :
lst_nested(3) :3500
lst_nested.first-1:0
lst_nested.first :1
lst_nested.prior(1):
lst_nested.next(1):2
lst_nested.next(2):3
lst_nested.next(3):
lst_nested.last :3
以下为索引表的输出内容:
lst_associative(1) :-2000
lst_associative(3) :
lst_associative(4) :3500
lst_associative.first-1:0
lst_associative.first :1
lst_associative.prior(1):
lst_associative.next(1):3
lst_associative.next(2):3
lst_associative.next(4):
lst_associative.last :4
以下为变长数组的输出内容:
lst_varrays(1) :-2000
lst_varrays(2) :
lst_varrays(3) :3500
lst_varrays.first-1:0
lst_varrays.first :1
lst_varrays.prior(1):
lst_varrays.next(1):2
lst_varrays.next(2):3
lst_varrays.next(3):
lst_varrays.last :3

PL/SQL procedure successfully completed

.first方法是数组中第一个元素的下标值(序列值)
.prior(n)方法是数组中第n个元素的前一个元素的下标值(序列值)

oracle基础学习(1)的更多相关文章

  1. Oracle基础学习笔记

    Oracle基础学习笔记 最近找到一份实习工作,有点头疼的是,有阶段性考核,这...,实际想想看,大学期间只学过数据库原理,并没有针对某一数据库管理系统而系统的学习,这正好是一个机会,于是乎用了三天时 ...

  2. Oracle基础学习1--Oracle安装

    安装过程较简单.按着步骤走就可以.这里须要提醒假设要使用PL/SQL来操作Oracle.那么最好安装32位Oracle程序.原因是网上说PL/SQL仅仅对32位Oracle进行支持,假设用64为Ora ...

  3. Oracle基础学习5-- Oracle权限之”角色”

    不论什么与权限相关的东西都少不了"角色"的概念,Java如此,.Net如此,Oracle当然也不例外. 角色事实上就是权限的集合,将多个权限打包到一个角色中,这样每一个角色有特定的 ...

  4. Oracle 基础学习笔记

    知识点 一.登陆数据库: 登陆数据库: sqlplus system/oracle123456 二.新建用户.授权(连接数据库.创建表.表空间.查询某用户下的表) 语法: create user [用 ...

  5. Oracle基础学习2--Oracle登录与三种验证机制

    首先,Oracle安装完毕有三个默认用户 Ø  Sys:数据库对象的拥有者.权限最高.password在安装的时候(口令管理)能够改变 Ø  System:数据库管理员,password为manage ...

  6. Oracle基础学习登陆SQLPLUS(一)

    SQLPLUS是ORACLE公司开发的非常简洁的管理工具,SQLPLUS是最好的,最核心的ORACLE管理工具.SQLPLUS简洁而高效,舍弃浮华,反璞归真.使用sqlplus,进入sqlplus并进 ...

  7. Oracle基础学习4--Oracle权限传递

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/wang379275614/article/details/32215325 以下将用一个实例来解说: ...

  8. Oracle基础——学习笔记

    一[用户]sys\system\sysman\scott 1.查看数据库所有用户(dba_users数据字典): select username from dba_users; 2.查看当前用户: s ...

  9. oracle基础学习

    一.创建数据库用户 create user myaccount identified by mypassword;(my+account表示 账号,my+password表示 密码) 二.授予用户权限 ...

随机推荐

  1. Java之RabbitMQ(二)多mq配置

    场景: springboot单项目,自身使用mq中间件处理一些业务需求,某些业务上又需要消费第三方mq消息,这时候需要我们单项目中配置多套mq,这时候,需要我们自定义多套mq相关连接工厂.模板.监听工 ...

  2. 4_6.springboot2.xWeb开发之错误处理机制

    1.SpringBoot默认的错误处理机制 默认效果:1).浏览器,返回一个默认的错误页面 浏览器发送请求的请求头: ​ 2).如果是其他客户端,默认响应一个json数据 原理: ​ 默认情况下,Sp ...

  3. 第二周课堂笔记1th

    1.    三元运算 + 2.      for循环 for为有限循环,while为无限循环 可迭代对象:是字符串,数字不可以 数字不可以迭代但是可以用range函数 for i in range(1 ...

  4. selenium基础(下拉菜单操作)

    selenium基础(下拉菜单操作) 非select/option元素: 1.触发下拉列表出现 2.等待下拉列表中的元素出现,然后进行选择元素即可. select/option元素: 下拉框操作-Se ...

  5. 【JZOJ3236】矮人排队

    description 在七山七海之外的一个小村庄,白雪公主与N个矮人住在一起,所有时间都花在吃和玩League of Legend游戏.白雪公主决心终结这样的生活,所以为他们举办了体育课. 在每节课 ...

  6. 【JZOJ2679】跨时代

    description 钟逆时针而绕,恶物狰狞的倾巢,我谦卑安静地于城堡下的晚祷,压抑远古流窜的蛮荒暗号,而管风琴键高傲的说,那只是在徒劳.我的乐器在环绕,时代无法淘汰我霸气的皇朝. 你无法预言,因为 ...

  7. 思维构造,建图——cf1159E

    很好的题 /* nexti:pi右边第一个比pi大的数的下标 把每个[i,a[i]]都看成一段区间,区间只能在端点处交叉,以此来判断是否有解 特别的,如果a[i]=-1,那么把a[i]=i+1,不对其 ...

  8. 基于MFC的实时可视化项目中视图刷新消息的严谨使用

    在实时可视项目中,视图的实时刷新显示对软件的体验感来说非常重要,当算法的效率达到实时,比如一秒40帧,如果实时显示帧率更不上,则体验感将大大折扣,让用户感觉你的算法并没有40帧,当然最关键的是解决显示 ...

  9. privoxy 安装

    https://www.privoxy.org/sf-download-mirror/Sources/ 1.挑选源码版本,下载,解压 2.增加用户 useradd privoxy 3.make &am ...

  10. C# 把十六进制表示的ASCII码转换为对应的字符组成的字符串

    0x30表示字符‘0’的ASCII码.