zoukankan      html  css  js  c++  java
  • 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:oracleappproduct11.2.0dbhome_1oradataycspace.dbf'
    size 2m
    autoextend on next 2m maxsize 5m
    offline ;


    --创建临时表空间
    create temporary yctempspace
    tempfile 'E:oracleappproduct11.2.0dbhome_1oradataycspace.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:oracleappproduct11.2.0dbhome_1oradataycspace.dbf'  resize 10m;
                 --增加数据文件
                 alter tablespace ycspace add datafile 'E:oracleappproduct11.2.0dbhome_1oradataadd.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:powerDesignerA_脚本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地址和端口号进行远程登陆 
        




  • 相关阅读:
    [C/C++ IDE] CLion 配置使用教程
    PyCharm安装使用教程
    SMALI语法大全
    SMALI语法入门教程
    Samba + DLAN 实现电视机播放电脑文件
    深入浅出讲解低功耗蓝牙(BLE)协议栈
    吐血推荐珍藏的Visual Studio Code插件
    为什么我推荐你用 Ubuntu 开发?
    WebBrowser响应页面中的blank开新窗口及window.close关闭本窗体
    C# Task的简单使用
  • 原文地址:https://www.cnblogs.com/sdksdk0/p/5585062.html
Copyright © 2011-2022 走看看