Oracle常用语句语法汇总

时间:2023-02-18 18:04:38

第一篇  基本操作

--解锁用户   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:=&num;

    begin

            if pname = 1  then

              dbms_output.put_line('我是1');

            else

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

             end if;

    end;

    

     --2

    declare

      pname number := &num;

    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常用语句语法汇总的更多相关文章

  1. Oracle常用基础语法(未完待补和操作)

    这篇博客主要是Oracle常用基础语法, 另外,存储过程和存储函数很重要,这个后期看视频学习,还有DB优化,另外,还有plsql develop和navicat的使用,重点是数据的导入导出: ---- ...

  2. Oracle Update 语句语法与性能分析 - 多表关联

    Oracle Update 语句语法与性能分析 - 多表关联   为了方便起见,建立了以下简单模型,和构造了部分测试数据: 在某个业务受理子系统BSS中, SQL 代码 --客户资料表 create ...

  3. layui js 常用语句语法

    烂笔头: layui组件使用 注意layui的版本. 在head里需要引入css/js文件. 出现 form.verify,form.val is not a function的错误信息时,注意版本, ...

  4. ORACLE常用语句:

    ORACLE常用语句: 1.首先,创建(新)用户: create user username identified by password; username:新用户名的用户名 password: 新 ...

  5. oracle 和 mysql 常用语句对比汇总

    文章目录 一.数据库管理 1.1 用户管理 1.1.1 mysql用户.权限管理 1.1.2 oracle 用户.角色.权限管理 二.DQL 语句 2.1 基础查询 1.常量查询的区别: 2.字符串拼 ...

  6. Oracle常用语句集合

    oracle常用经典SQL查询 常用SQL查询: .查看表空间的名称及大小 )),) ts_size from dba_tablespaces t, dba_data_files d where t. ...

  7. Oracle常用语句

    Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, ...

  8. Oracle 常用语句汇总

    1.查询当前用户的建表SQL: SELECT DBMS_METADATA.GET_DDL('TABLE','COL_MERCH_INFO') FROM DUAL; 2.查询当前用户的所有表: SELE ...

  9. oracle 常用SQL语法手册

    Select 用途: 从指定表中取出指定的列的数据 语法: SELECT column_name(s) FROM table_name 解释: 从数据库中选取资料列,并允许从一或多个资料表中,选取一或 ...

随机推荐

  1. C:Wordpress自定义文章类型(图视频)

    自定义文章类型,包括: 1:单独的"文章内容模板" 2:单独的"文章列表模板" 3:单独的"控制后台"(文章分类.添加文章) 创建自定义文章 ...

  2. Android驱动开发前的准备(二)

    搭建android开发环境 2.1 Android底层开发需要哪些工具 2.2 安装 JDK 2.3 搭建Android 应用程序开发环境 2.4安装Android NDK开发环境 2.5安装交叉编译 ...

  3. oc 单例

    单例模式: //static id _instace; // //+ (id)allocWithZone:(struct _NSZone *)zone //{ // static dispatch_o ...

  4. pg强制删库

    在某些时候,由于有别的连接,无法删除数据库,这时候用这个 SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity ...

  5. SLAM reference

    Technical website: OpenSlam: http://openslam.org/ MRPT: http://www.mrpt.org/ Monocular SLAM: https:/ ...

  6. python字符串替换的2种有效方法

    python 字符串替换可以用2种方法实现:1是用字符串本身的方法.2用正则来替换字符串 下面用个例子来实验下:a = 'hello word'我把a字符串里的word替换为python1用字符串本身 ...

  7. hdoj 2816 I Love You Too

    I Love You Too Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  8. matlab图形矢量化解决方案

    大致思路:matlab中生成矢量格式文件-导入Visio中-编辑-导出合适格式-在其他软件中使用 准备工具 Matlab 2014b或更高版本 Visio 2007或更高版本 我查看过,Matlab能 ...

  9. Ubuntu14&period;04浏览器Firefox安装flash播放插件

    sudo apt-get update sudo apt-get install flashplugin-nonfree ================= 类飞秋软件 sudo apt-get in ...

  10. Go语言学习笔记(七)杀手锏 Goroutine &plus; Channel

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 Goroutine Go语言的主要的功能在于令人简易使用的并行设计,这个方法叫做Goroutine,通过Gorou ...