oracle数据库基础知识

时间:2023-01-21 16:24:57 Oracle认证 我要投稿

oracle数据库基础知识

  20世纪约70年代 一间名为Ampex的软件公司,正为中央情报局设计一套名叫Oracle的数据库,埃里森是程序员之一。下面是小编整理的关于oracle数据库基础知识,欢迎大家参考!

oracle数据库基础知识

  【1】oracle数据库基础知识

  第一篇 基本操作

  --解锁用户 alter user 用户 account unlock;

  --锁定用户 alter user 用户 account lock;

  alter user scott account unlock;

  --创建一个用户yc 密码为a create user 用户名 identified by 密码;

  create user yc identified by a;

  --登录不成功,会缺少create session 权限,赋予权限的语法 grant 权限名 to 用户;

  grant create session to yc;

  --修改密码 alter user 用户名 identified by 新密码;

  alter user yc identified by b;

  --删除用户

  drop user yc ;

  --查询表空间

  select *from dba_tablespaces;

  --查询用户信息

  select *from dba_users;

  --创建表空间

  create tablespace ycspace

  datafile 'E:\oracle\app\product\11.2.0\dbhome_1\oradata\ycspace.dbf'

  size 2m

  autoextend on next 2m maxsize 5m

  offline ;

  --创建临时表空间

  create temporary yctempspace

  tempfile 'E:\oracle\app\product\11.2.0\dbhome_1\oradata\ycspace.dbf'

  size 2m

  autoextend on next 2m maxsize 5m

  offline ;

  --查询数据文件

  select *from dba_data_files;

  --修改表空间

  --1、修改表空间的状态

  --默认情况下是online,只有在非离线情况下才可以进行修改

  alter tablespace ycspace offline ; --离线状态,不允许任何对象对该表空间的使用,使用情况:应用需要更新或维护的时候;数据库备份的时候

  alter tablespace ycspace read write;--读写状态

  alter tablespace ycspace online;

  alter tablespace ycspace read only; --只读,可以查询信息,可以删除表空间的对象,但是不能创建对象和修改对象 。使用情况:数据存档的时候

  --2、修改表空间的大小

  --增加文件的大小

  alter database datafile 'E:\oracle\app\product\11.2.0\dbhome_1\oradata\ycspace.dbf' resize 10m;

  --增加数据文件

  alter tablespace ycspace add datafile 'E:\oracle\app\product\11.2.0\dbhome_1\oradata\add.dbf' size 2m;

  --删除表空间的数据文件

  alter tablespace 表空间的名字 drop datafile 数据文件名;

  --删除表空间

  drop tablespace ycspace;

  --删除表空间且表空间中的内容和数据文件

  drop tablespace ycspace including contents and datafiles;

  --指定表空间 的 创建用户的语法

  create user yc1 identified by a default tablespace ycspace temporary tablespace temp;

  --删除用户

  drop user yc1;

  --权限

  --赋予创建会话的权限

  grant create session to yc1;

  --创建一个表

  create table studentInfo(

  sid int,

  sname varchar2(10)

  );

  --赋予yc1用户创建表的权限

  grant create table to yc1;

  --赋予yc1使用表空间的权限

  grant unlimited tablespace to yc1;

  --系统权限

  --对象权限

  --插入

  insert into studentInfo values (2,'abcd');

  --查询

  select *from studentInfo;

  --修改

  update studentInfo set sid=1;

  --删除

  delete studentInfo ;

  drop table studentInfo; --系统权限删除表

  --赋权的语法

  --系统权限

  grant 权限名(系统权限或对象权限,角色,all) to 用户(角色,public) with admin option;

  --对象权限

  grant 权限名(系统权限或对象权限,角色,all) on 用户(角色,public) with grant option;

  --收权语法

  --系统权限

  revoke 权限名(系统权限或对象权限,角色,all) from 用户(角色,public) with admin option;

  --对象权限

  revoke 权限名(系统权限或对象权限,角色,all) from 用户(角色,public) with grant option;

  --赋予创建用户的权限并且把这个权限传递下去,即yc1可以给别人赋权

  grant create user to yc1 with admin option;

  --收回权限,只能收回scottd ,不能收回由scott赋权的yc1的权限

  revoke create user from scott;

  --查看用户所具有的权限

  select *from user_sys_privs;

  --对象权限详解

  select * from emp;

  --使用yc1来查询scott里面的emp表

  select * from scott.emp;

  --赋予yc1查询emp表和插入的权限

  grant select on emp to yc1;

  grant insert on emp to yc1;

  grant update(empno,ename) on emp to yc1;

  grant delete on emp to yc1;

  --对scott的emp表添加数据

  insert into scott.emp(empno,ename) value(111,'acv');

  update scott.emp set ename='yc'where empno=111;

  --赋予查询、赋予删除、添加、修改

  grant select on 表名 to 用户

  --grant select,delete,update,insert on 表名 to 用户

  grant select,delete,update,insert on emp to yc1;

  grant all on dept to yc1; --all代表所有的对象权限

  select *from scott.emp;

  select *from scott.dept;

  insert into scott.dept values(50,'企事业文化部','bumen');

  --查看角色

  --dba:数据库管理员,系统最高权限,可以创建数据结构(表空间等)

  --resource:可以创建实体(表、视图),不可以创建数据库的结构

  --connect:连接的权限,可以登录数据库,但是不可以创建实体和不可以创建数据库结构

  select *from role_sys_privs;

  grant connect to yc1;

  --将可以连接的角色赋予给yc1,则yc1就是应该可以连接数据库的人,类似于 create session 。

  create table StuInfos(sid int);

  select *from StuInfos;

  create table stuInfo(

  sid int primary key , --主键 primary key 非空且唯一 (主键约束)

  sname varchar2(10) not null, --姓名不能为空,(非空约束)

  sex char(2) check(sex in('男','女')), --(检查约束),check,

  age number(3,1) constraint ck_stuInfo_age check(age>10 and age<100) , --也可以用varchar ;age between 10 and 100 ,在10和100之间,是一个闭区间

  tel number(15) unique not null, --唯一约束,

  address varchar2(200) default '什么鬼'

  )

  insert into stuInfo values(3,'大大','男',18,4321543,default);

  insert into stuInfo values(1,'张三','男',10);

  select *from stuInfo;

  drop table stuInfo;

  create table classInfo(

  cid int primary key, --班级id

  cname varchar2(20) not null unique --班级名

  )

  create table stuInfo(

  sid int primary key,

  sname varchar2(20),

  cid int constraint fofk_stuInfo_cid references classInfo(cid) on delete cascade

  )

  insert into classInfo values(1,'1班');

  insert into classInfo values(2,'2班');

  insert into classInfo values(3,'3班');

  insert into classInfo values(4,'4班');

  select *from classInfo;

  select *from stuInfo;

  insert into stuInfo values(1001,'张三',2);

  insert into stuInfo values(1002,'张四',4);

  update classInfo set cid=1 where cid=8;

  drop table stuInfo;--要先删除这个

  drop table classInfo; --再删除这个

  delete classInfo where cid=4 ;--同时删除这两个表中的4

  --删除用户的时候

  drop user yc1 [cascade] --删除用户的同时把它创建的对象都一起删除

  --修改表

  --1、添加表中字段

  --alter table 表名 add 字段名 类型

  alter table classInfo add status varchar2(10) default '未毕业'

  --2、修改已有字段的数据类型

  --alter table 表名 modify 字段名 类型

  alter table classInfo modify status number(1)

  --3、修改字段名

  --alter table 表名 rename column 旧字段名 to 新的字段名

  alter table classInfo rename column cname to 班级名;

  --4、删除字段

  --alter table 表名 drop column 字段名

  alter table classInfo drop column status ;

  --5、修改表名

  --rename 旧表名 to 新表名

  rename classInfo to 班级信息;

  --删除表

  --1、截断表效率高,每删除一次会产生一次日志 2、截断会释放空间,而delete不会释放空间

  --删除表结构和数据

  drop table 表名;

  --删除表中所有数据

  truncate table classInfo;

  delete classInfo;

  create table classInfo(

  cid int primary key, --班级id

  cname varchar2(20) not null unique , --班级名

  stasuts varchar2(100)

  );

  select *from classInfo;

  --数据的操作

  --增加数据语法

  --insert into 表名[(列名,....)] values (对应的数据的值);

  insert into classInfo values(1,'一班','未毕业');--需要按照表结构的顺序插入

  insert into classInfo values(4,'六班','未毕业');

  insert into classInfo(cname,cid) values('二班',2); --需要按照括号中的顺序插入,但是 not null primary key 必须插入的。

  insert into classInfo(cname,cid) values('三班',3);

  --删除的语法

  --delete 表名 [where 条件]

  delete classInfo where cid>=2;

  --修改记录的语法

  --update 表名 set [字段='值' ] [where 条件]

  update classInfo set cname='三班'; --会修改所有该字段

  update classInfo set cname='四班' where cid=1;

  update classInfo set cname='五班', stasuts ='未毕业' where cid=3;

  --alter table classInfo drop constraint SYS_C0011213;

  --添加多个时可以使用序列

  --用序列来做自动增长

  create sequence seq_classInfo_cid start with 1001 increment by 1;

  insert into classInfo values(seq_classInfo_cid.Nextval,'七班','未毕业');

  insert into classInfo values(seq_classInfo_cid.Nextval,'八班','未毕业');

  insert into classInfo values(seq_classInfo_cid.Nextval,'九班','未毕业');

  insert into classInfo values(seq_classInfo_cid.Nextval,'十班','未毕业');

  create table classInfo2(

  cid int primary key, --班级id

  cname varchar2(20) not null unique , --班级名

  stasuts varchar2(100)

  );

  select *from classInfo2;

  drop table classInfo2;

  insert into classInfo2 select *from classInfo;

  insert into classInfo(cname,cid) select cname,cid from classInfo;

  alter table classInfo2 drop constraint SYS_C0011213;

  select seq_classInfo_cid.nextval from dual;

  select seq_classInfo_cid.Currval from dual;

  --直接创建一个新表,并拿到另一个表其中的数据

  create table newTable as select cname,cid from classInfo;

  create table newTable1 as select *from classInfo;

  select *from newTable;

  select *from newTable1;

  insert into newTable1 values(1008,'dg','');

  第二篇:高级操作

  直接在使用scott登陆,进行查询操作

  ----------------------------------------------------------------------------------

  --简单查询

  select *from emp;

  select empno as id,ename as name from emp;

  select empno 编号,ename 姓名 from emp;

  --去除重复

  select job from emp;

  select distinct job from emp;

  select job,deptno from emp;

  select distinct job,deptno from emp;

  --字符串的连接

  select '员工编号是' ||empno || '姓名是' ||ename ||'工作是'||job from emp;

  --乘法

  select ename,sal *12 from emp;

  --加减乘除都类似

  ---------------------------------------------------------------------

  --限定查询

  --奖金大于1500的

  select *from emp where sal>1500;

  --有奖金的

  select *from emp where comm is not null;

  --没有奖金的

  select *from emp where comm is null;

  --有奖金且大于1500的

  select *from emp where sal>1500 and comm is not null;

  --工资大于1500或者有奖金的

  select *from emp where sal>1500 or comm is not null;

  --工资不大于1500且没奖金的

  select *from emp where sal<=1500 and comm is null;

  select *from emp where not (sal >1500 or comm is not null);

  --工资大于1500但是小于3000的

  select *from emp where sal>1500 and sal<3000;

  select *from emp where sal between 1500 and 3000; --between是闭区间,是包含1500和3000的

  --时间区间

  select *from emp where hiredate between to_date('1981-01-01','yyyy-MM-dd') and to_date('1981-12-31','yyyy-MM-dd');

  --查询雇员名字

  select *from emp where ename='SMITH';

  --查询员工编号

  select *from emp where empno=7369 or empno=7499 or empno=7521;

  select *from emp where empno in(7369,7499,7521);

  select *from emp where empno not in(7369,7499,7521); --排除这3个,其他的都可以查

  --模糊查询

  select *from emp where ename like '_M%'; --第2个字母为M的

  select *from emp where ename like '%M%';

  select *from emp where ename like '%%'; --全查询

  --不等号的用法

  select * from emp where empno !=7369;

  select *from emp where empno<> 7369;

  --对结果集排序

  --查询工资从低到高

  select *from emp order by sal asc;

  select *from emp order by sal desc,hiredate desc; --asc 当导游列相同时就按第二个来排序

  --字符函数

  select *from dual;--伪表

  select 2*3 from dual;

  select sysdate from dual;

  --变成大写

  select upper('smith') from dual;

  --变成小写

  select lower('SMITH') from dual;

  --首字母大写

  select initcap('smith') from dual;

  --连接字符串

  select concat('jr','smith') from dual; --只能在oracle中使用

  select 'jr' ||'smith' from dual; --推荐使用

  --截取字符串

  select substr('hello',1,3) from dual; --索引从1开始

  --获取字符串长度

  select length('hello') from dual;

  --字符串替换

  select replace('hello','l','x') from dual; --把l替换为x

  --------------------------------------------------------------------------------------------------

  --通用函数

  --数值函数

  --四舍五入

  select round(12.234) from dual;--取整的四舍五入 12

  select round (12.657,2) from dual; --保留2位小数

  select trunc(12.48) from dual;--取整

  select trunc(12.48675,2) from dual; --保留2位小数

  --取余

  select mod(10,3) from dual;--10/3取余 =1

  --日期函数

  --日期-数字=日期 日期+数字=日期 日期-日期=数字

  --查询员工进入公司的周数

  select ename,round((sysdate -hiredate)/7) weeks from emp;

  --查询所有员工进入公司的月数

  select ename,round(months_between(sysdate,hiredate)) months from emp;

  --求三个月后的日期

  select add_months(sysdate,6) from dual;

  select next_day(sysdate,'星期一') from dual; --下星期

  select last_day(sysdate) from dual; --本月最后一天

  select last_day(to_date('1997-1-23','yyyy-MM-dd')) from dual;

  --转换函数

  select ename ,

  to_char(hiredate,'yyyy') 年,

  to_char(hiredate,'mm')月,

  to_char(hiredate,'dd') 日

  from emp;

  select to_char(10000000,'$999,999,999') from emp;

  select to_number('20')+to_number('80') from dual; --数字相加

  --查询员工年薪

  select ename,(sal*12+nvl(comm,0)) yearsal from emp; --空和任何数计算都是空

  --Decode函数,类似if else if (常用)

  select decode(1,1,'one',2,'two','no name') from dual;

  --查询所有职位的中文名

  select ename, decode(job,

  'CLERK',

  '业务员',

  'SALESMAN',

  '销售',

  'MANAGER',

  '经理',

  'ANALYST',

  '分析员',

  'PRESIDENT',

  '总裁',

  '无业')

  from emp;

  select ename,

  case

  when job = 'CLERK' then

  '业务员'

  when job = 'SALESMAN' then

  '销售'

  when job = 'MANAGER' then

  '经理'

  when job = 'ANALYST' then

  '分析员'

  when job = 'PRESIDENT' then

  '总裁'

  else

  '无业'

  end

  from emp;

  -------------------------------------------------------------------------------------------

  --多表查询

  select *from dept;

  select *from emp,dept order by emp.deptno;

  select *from emp e,dept d where e.deptno=d.deptno;

  select e.*,d.dname,d.loc from emp e,dept d where e.deptno=d.deptno;

  --查询出雇员的编号,姓名,部门编号,和名称,地址

  select e.empno,e.ename,e.deptno,d.dname,d.loc from emp e,dept d where e.deptno=d.deptno;

  --查询出每个员工的上级领导

  select e.empno,e.ename,e1.empno,e1.ename from emp e,emp e1 where e.mgr=e1.empno;

  select e.empno,e.ename,d.dname

  from emp e,dept d ,salgrade s, emp e1

  where e.deptno=d.deptno

  and e.sal between s.losal

  and s.hisal

  and e.mgr=e1.empno;

  select e.empno,e.ename,e1.empno,e1.ename from emp e,emp e1 where e.mgr=e1.empno(+) ;

  --外连接

  select *from emp order by deptno;

  --查询出每个部门的员工

  /*

  分析:部门表是全量表,员工表示非全量表,

  在做连接条件时,全量表在非全量表的哪端,那么连接时全量表的连接条件就在等号哪断

  */

  --左连接

  select * from dept d,emp e where d.deptno=e.deptno(+) order by e.deptno;

  --右连接

  select * from emp e,dept d where e.deptno(+)=d.deptno order by e.deptno;

  -----------------------------作业

  --查询与smith相同部门的员工姓名和雇佣日期

  select *from emp t

  where t.deptno= (select e.deptno from emp e where e.ename='SMITH')

  and t.ename<> 'SMITH';

  --查询工资比公司平均工资高的员工的员工号,姓名和工资

  select t.empno,t.ename,t.sal

  from emp t

  where t.sal>(select avg(sal) from emp);

  --查询各部门中工资比本部门平均工资高的员工号,姓名和工资

  select t.empno,t.ename,t.sal

  from emp t, (select avg(e.sal) avgsal,e.deptno from emp e group by e.deptno) a

  where t.sal>a.avgsal and t.deptno=a.deptno;

  --查询姓名中包含字母u的员工在相同部门的员工的员工号和姓名

  select t.empno,t.ename from emp t

  where t.deptno in( select e.deptno from emp e where e.ename like '%U%')

  and t.empno not in ( select e.empno from emp e where e.ename like '%U%') ;

  --查询管理者是king的员工姓名和工资

  select t.ename,t.sal from emp t

  where t.mgr in

  (select e.empno from emp e where e.ename='KING');

  -------------------------------------------------------------------------------------

  ---sql1999语法

  select *from emp join dept using(deptno) where deptno=20;

  select *from emp natural join dept;

  select *from emp e join dept d on e.deptno=d.deptno;

  select *from dept;

  select *from dept d left join emp e on d.deptno=e.deptno;

  select *from dept d,emp e where d.deptno=e.deptno(+);

  ---分组

  select count(empno) from emp group by deptno;

  select deptno,job,count(*) from emp group by deptno,job order by deptno;

  select *from EMP for UPDATE;

  --group by 后面有的字段,select后才可以有,group by后面没有的字段,select后面绝对不能有

  select d.dname, d.loc, count(e.empno) from emp e, dept d where e.deptno = d.deptno group by d.dname, d.loc ;

  ----------------------------------------------------------------------------------------------------

  --子查询

  select *from emp t where t.sal>(select *from emp e where e.empno=7654);

  select rownum ,t.* from emp t where rownum <6 ;

  --pagesize 5

  select *from(select rownum rw,a.* from (select *from emp ) a where rownum <16) b where b.rw>10;

  select *from (select *from emp) where rownum>0;

  --索引

  create index person_index on person(p_name);

  --视图

  create view view2 as select *from emp t where t.deptno=20;

  select *from view2;

  --------------------------------------------------------------------------------------------------------

  --pl/sql

  --plsql是对sql语言的过程化扩展

  -----

  declare

  begin

  dbms_output.put_line('hello world');

  end;

  -------

  declare

  age number(3);

  marry boolean := true; --boolean不能直接输出

  pname varchar2(10) := 're jeknc';

  begin

  age := 20;

  dbms_output.put_line(age);

  if marry then

  dbms_output.put_line('true');

  else

  dbms_output.put_line('false');

  end if ;

  dbms_output.put_line(pname);

  end;

  --常量和变量

  --引用变量,引用表中的字段的类型

  Myname emp.ename%type; --使用into来赋值

  declare

  pname emp.ename%type;

  begin

  select t.ename into pname from emp t where t.empno=7369;

  dbms_output.put_line(pname);

  end;

  --记录型变量

  Emprec emp%rowtype; --使用into来赋值

  declare

  Emprec emp%rowtype;

  begin

  select t.* into Emprec from emp t where t.empno=7369;

  dbms_output.put_line(Emprec.empno || ' '||Emprec.ename||' '||Emprec.job);

  end;

  --if分支

  语法1:

  IF 条件 THEN 语句1;

  语句2;

  END IF;

  语法2:

  IF 条件 THEN 语句序列1;

  ELSE 语句序列 2;

  END IF;

  语法3:

  IF 条件 THEN 语句;

  ELSIF 条件 THEN 语句;

  ELSE 语句;

  END IF;

  --1

  declare

  pname number:=#

  begin

  if pname = 1 then

  dbms_output.put_line('我是1');

  else

  dbms_output.put_line('我不是1');

  end if;

  end;

  --2

  declare

  pname number := #

  begin

  if pname = 1 then

  dbms_output.put_line('我是1');

  elsif pname = 2 then

  dbms_output.put_line('我是2');

  else

  dbms_output.put_line('我不是12');

  end if;

  end;

  --loop循环语句

  语法2:

  Loop

  EXIT [when 条件];

  ……

  End loop

  --1

  declare

  pnum number(4):=0;

  begin

  while pnum < 10 loop

  dbms_output.put_line(pnum);

  pnum := pnum + 1;

  end loop;

  end;

  --2 (最常用的循环)

  declare

  pnum number(4):=0;

  begin

  loop

  exit when pnum=10;

  pnum:=pnum+1;

  dbms_output.put_line(pnum);

  end loop;

  end;

  --3

  declare

  pnum number(4);

  begin

  for pnum in 1 .. 10 loop

  dbms_output.put_line(pnum);

  end loop;

  end;

  ----------------------------------

  --游标

  语法:

  CURSOR 游标名 [ (参数名 数据类型,参数名 数据类型,...)] IS SELECT 语句;

  例如:cursor c1 is select ename from emp;

  declare

  cursor c1 is

  select * from emp;

  emprec emp%rowtype;

  begin

  open c1;

  loop

  fetch c1

  into emprec;

  exit when c1%notfound;

  dbms_output.put_line(emprec.empno || ' ' || emprec.ename);

  end loop;

  close c1; --要记得关闭游标

  end;

  --------例外

  --异常,用来增强程序的健壮性和容错性

  -- no_data_found (没有找到数据)

  --too_many_rows (select …into语句匹配多个行)

  --zero_divide ( 被零除)

  --value_error (算术或转换错误)

  --timeout_on_resource (在等待资源时发生超时)

  --写出被0除的例外程序

  declare

  pnum number(4) := 10;

  begin

  pnum := pnum / 0;

  exception

  when zero_divide then

  dbms_output.put_line('被0除了');

  when value_error then

  dbms_output.put_line('算术或转换错误');

  when others then

  dbms_output.put_line('其他异常');

  end;

  --自定义异常

  --No_data exception;

  --要抛出raise no_data;

  declare

  cursor c1 is

  select * from emp t where t.deptno = 20;

  no_data exception;

  emprec emp%rowtype;

  begin

  open c1;

  loop

  fetch c1

  into emprec;

  if c1%notfound then

  raise no_data;

  else

  dbms_output.put_line(emprec.empno || ' ' || emprec.ename);

  end if;

  end loop;

  close c1;

  exception

  when no_data then

  dbms_output.put_line('无员工');

  when others then

  dbms_output.put_line('其他异常');

  end;

  --存储过程

  语法:

  create [or replace] PROCEDURE 过程名[(参数名 in/out 数据类型)]

  AS

  begin

  PLSQL子程序体;

  End;

  或者

  create [or replace] PROCEDURE 过程名[(参数名 in/out 数据类型)]

  is

  begin

  PLSQL子程序体;

  End 过程名;

  -----创建一个存储过程helloworld

  create or replace procedure helloworld is

  begin

  dbms_output.put_line('hello world');

  end helloworld;

  ------创建一个涨工资的

  create or replace procedure addsal(eno in emp.empno%type) is

  emprec emp%rowtype;

  begin

  select * into emprec from emp t where t.empno = eno;

  update emp t set t.sal = t.sal + 100 where t.empno = eno;

  dbms_output.put_line('涨工资前是' || emprec.sal || ',涨工资后是' ||

  (emprec.sal + 100));

  end addsal;

  ----------------------------------------------

  --java代码调用存储过程和函数

  --存储过程

  --

  create or replace procedure acc_yealsal(eno in emp.empno%type,yearsal out number) is

  pcomm emp.comm%type;

  psal emp.sal%type;

  begin

  select t.sal,t.comm into psal,pcomm from emp t where t.empno=eno;

  yearsal :=psal*12 +nvl(pcomm,0);

  end;

  ----存储函数

  create or replace function 函数名(Name in type, Name in type, .. .)

  return 数据类型 is

  结果变量 数据类型;

  begin

  return(结果变量);

  end函数名;

  --存储函数计算年薪

  create or replace function accf_yearsal(eno in emp.empno%type)

  return number is

  Result number;

  psal emp.sal%type;

  pcomm emp.comm%type;

  begin

  select t.sal, t.comm into psal, pcomm from emp t where t.empno = eno;

  Result := psal * 12 + nvl(pcomm, 0);

  return(Result);

  end accf_yearsal;

  -----------------------------------

  ---触发器

  --触发语句:增删改:

  语法:

  CREATE [or REPLACE] TRIGGER 触发器名

  {BEFORE | AFTER}

  {DELETE | INSERT | UPDATE [OF 列名]}

  ON 表名

  [FOR EACH ROW [WHEN(条件) ] ]

  begin

  PLSQL 块

  End 触发器名

  ---插入一个新员工则触发

  create or replace trigger insert_person

  after insert on emp

  begin

  dbms_output.put_line('插入新员工');

  end;

  select *from emp;

  insert into emp values(1001,'李四','管理',7902,sysdate,100,100,20);

  --raise_application_error(-20001, '不能在非法时间插入员工')

  --==============================================================================

  SQL> @ E:\powerDesigner\A_脚本\user.sql --导入脚本文件

  select *from H_USER ;

  insert into h_user valuer(sequserid.nextval,'a','a',sysdate,'北京',1);

  --------------------------------------------------------------

  --数据库建模

  --一对多:多的一端是2,箭头指向的是表1,即少的一端

  --在实体类中一的一端的实体类有多的一端的实体类的集合属性

  --使用powerDesiger进行数据库建模,然后将数据导入,导入到plsql中进行使用

  --------------------连接远程数据库

  --方法1,修改localhost的地址

  ORCL =

  (DESCRIPTION =

  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

  (CONNECT_DATA =

  (SERVER = DEDICATED)

  (SERVICE_NAME = orcl.lan)

  )

  )

  --方法2

  --或者直接在登陆界面在database中输入远程数据库的ip地址和端口号进行远程登陆

【oracle数据库基础知识】相关文章:

Oracle数据库基础知识:SELECT语句06-21

Oracle数据库语句大全05-02

oracle数据库基本语句02-08

oracle数据库密码修改设置途径06-14

sqlplus如何访问远程oracle数据库06-04

2017年oracle数据库认证考试06-17

oracle数据库开发规范具体条件08-29

Oracle认证:ORACLE绑定变量BINDPEEKING08-26

Oracle认证:Oracle避免全表扫描方式08-26