热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

自写的非常不错的oracle语句精选

Oracle语句精,一起探讨吧my.oschina.net58685474Oracle--在sqlplus中用systemsvse连接然后授权(grantdbatoscott)再将权限授予svse用户(grantconnect,resourcetosvse)----建立表空间svsespace并建立svse用户,建立如下表格employee--建

Oracle 语句 精,一起探讨吧 http://my.oschina.net/58685474 Oracle --在sqlplus中用system/svse连接 然后授权(grant dba to scott) 再将权限授予svse用户(grant connect,resource to svse)----建立表空间svsespace并建立svse用户,建立如下表格 employee--建

Oracle 语句 精,一起探讨吧
http://my.oschina.net/58685474
Oracle
--在sqlplus中用system/svse连接  然后授权(grant dba to scott) 再将权限授予svse用户(grant connect,resource to svse)
----建立表空间svsespace并建立svse用户,建立如下表格 employee
--建立表空间svsespace
create tablespace svsespace 
datafile 'd:\svse.dbf'
size 5m;
--建立svse用户
create user svse
identified by svse123
default tablespace svsespace;
--建立如下表格 employee
create table employee
(
   empno number(8) primary key,
   ename varchar2(20),
   job varchar2(20),
   sal number(8),
   deptno number(4) references dept(deptno)
);

--建立如下表格Dept表
create table dept
(
   deptno number(4) primary key,
   dname varchar2(20),
   location varchar2(20)
);
--为Dept表添加数据
insert into dept values(10,'ACCOUNTING','武汉');
insert into dept values(20,'NEW YORK','北京');
insert into dept values(30,'BOSTON','上海');

--为employee表添加数据
insert into employee values(10001,'史密斯','职员',1000,10);
insert into employee values(10002,'琼斯','分析员',3000,20);
insert into employee values(10003,'爱德华','经理',5000,10);
insert into employee values(10004,'福特','职员',1200,10);
insert into employee values(10005,'艾伦','销售员',10500,20);
insert into employee values(10006,'凯文','职员',1250,30);
insert into employee values(10007,'鲍勃','分析员',3200,30);
insert into employee values(10008,'贝克','经理',11500,30);
insert into employee values(10009,'斯蒂文','会计师',6000,10);
insert into employee values(10010,'苏珊','职员',600,20);

select * from employee;
select * from dept;

--为employee表的empno字段创建序列
create sequence seq_no
start with 10011
increment by 1;

----1.1	使用PLSQL实现数据的添加,要求接受输入,然后将数据加到数据库
declare
   myename employee.ename%type;
   myjob employee.job%type;
   mysal employee.sal%type;
   mydeptno employee.deptno%type;   
begin
   myename := '&请输入员工姓名';
   myjob := '&请输入员工工作';
   mysal := &请输入员工工资;
   mydeptno := &请输入部门编号;
   insert into employee values(seq_no.nextval,myename,myjob,mysal,mydeptno);
   dbms_output.put_line('添加成功');
end;
--1.2	添加数据时,要求如果工资高于10000或低于800,则抛出异常,并打印异常信息
declare
   myename employee.ename%type;
   myjob employee.job%type;
   mysal employee.sal%type;
   mydeptno employee.deptno%type;  
   errorsal exception;
begin
   myename := '&请输入员工姓名';
   myjob := '&请输入员工工作';
   mysal := &请输入员工工资;
   mydeptno := &请输入部门编号;
   --判断输入的工资是否大于10000或者小于800,如果是则抛出异常
   if mysal <800 then
      raise errorsal;
   elsif mysal > 10000 then
      raise errorsal;
   else
      insert into employee values(seq_no.nextval,myename,myjob,mysal,mydeptno);
      dbms_output.put_line('添加成功');
   end if;
exception
   when errorsal then
   dbms_output.put_line('您输入的工资范围必须在800到10000之间');
end;
--1.3	在该模式下,创建一个序列SEQ_ORDER,该序列从1开始,到9999为止,且不能循环计数
create sequence seq_order
start with 1 
increment by 1
maxvalue 9999
nocycle;
--1.4	设计一个视图,能显示所有员工编号、名称、工作、薪水、部门姓名,部门所在地。
--给svse用户创建视图的权限(在cmd中输入grant create view to svse  赋予用户svse创建视图的权限)
create or replace view myview
as
   select a.*,location from employee a,dept b where a.deptno = b.deptno;
--查看视图
select * from myview;
--2.	用存储过程接受两个数相除并且显示结果,如果第二个数为0,则显示消息“除数不能为0”。
create or replace procedure getNum(num1 number,num2 number)
as
    num number;    
begin
    num := num1 / num2;        
end;
--测试
declare
       num1 number;
       num2 number;
       num number := num1 / num2;      
begin
      num1 := &请输入第一个数;
      num2 := &请输入第二个数;
     if num2 = 0 then         
        dbms_output.put_line('除数不能为0');
     else 
        getNum(num1,num2); 
        dbms_output.put_line('所得值为;' || num1/num2);
     end if;        
end;
--3.	编写一个存储过程,接受一个员工名,从emp表中显示该雇员的工作岗位与薪水,若输入的雇员名不存在,显示“该雇员不存在”信息。
create or replace procedure getInfo(myno emp.empno%type,myjob out emp.job%type,mysal out emp.sal%type)
as 
begin
   select job,sal into myjob,mysal from emp where empno = myno;
   dbms_output.put_line('获得成功!');  
end;
--测试
declare
   mysal emp.sal%type;
   myjob emp.job%type;
   inputempno emp.empno%type;
begin
   inputempno  := &请输入员工编号;   
   getInfo(inputempno,myjob,mysal);
   dbms_output.put_line('员工工作:'||myjob ||'  员工工资:'||mysal);
exception
   when no_data_found then 
       dbms_output.put_line('您输入的员工编号有误,请核对后重新输入...');        
end;
--4.	使用游标,接受一个部门号,从emp表中显示该部门的所有雇员的姓名,工作和薪水(带参数的游标)
declare
      type mycurtype is record(myename emp.ename%type,myjob emp.job%type,mysal emp.sal%type);
      cursor mycur(mydeptno emp.deptno%type) is 
             select ename,job,sal from emp where deptno = mydeptno;
      emprow mycurtype;
      theno emp.deptno%type;
begin
      theno := &请输入部门编号;
      dbms_output.put_line('输出部门员工信息如下...');
      open mycur(theno);
      loop
           fetch mycur into emprow;
           exit when mycur%notfound;
           dbms_output.put_line('姓名:'||emprow.myename||'  工作:'||emprow.myjob||'  薪水'||emprow.mysal);
      end loop;
      close mycur;
end;
--5.	编写一个程序块,从emp表中对名字以”A”或”S”开头的所有雇员按他们基本薪水的10%给他们补贴,
      --如果该雇员的总工资(工资+补贴)超过1500元,按总工资的5%扣除个人所得税,并输出员工的应得工资。
declare
      cursor mycur is select * from emp for update; 
      mysal emp.sal%type;
begin
      update emp set sal = sal * 1.1 where ename in( 
             select ename from emp where ename like 'A%' or ename like 'S%');
      for emprow in mycur 
      loop
          if emprow.sal + emprow.comm > 1500 then
             mysal := (emprow.sal + emprow.comm) * 0.95;
             dbms_output.put_line('该员工的姓名为:'||emprow.ename||'  该员工的实际工资为:'||emprow.sal||'  该员工应得工资为:'||mysal);
           end if;
      end loop;
end;
----查询emp表中ename以A或者S开头的名字
select ename,sal from emp where ename like 'A%' or ename like 'S%';


/*****************************************************************/
--6.	当更新emp表中的comm字段的值为空时,自动修改comm字段的值为’0’。
create or replace trigger tri_update
after update on emp
for each row
begin
end;
select comm,ename,sal from emp;
/*****************************************************************/
--7.	创建触发器,实现当某个部门被删除时,就把相应员工部门的名改为NULL。     
create or replace trigger tri_delete
after delete on dept
for each row
declare
    cursor mycur is select * from emp where deptno = :old.deptno for update;    
begin
    for emprow in mycur
    loop
        update emp set deptno = null where deptno = emprow.deptno;
        dbms_output.put_line('修改成功!');
    end loop;
end;
--测试      
delete from dept where deptno = 10
select * from dept;  
select * from emp;

转载注明出处
http://my.oschina.net/58685474
                 
      
      
      

推荐阅读
  • 推荐一个ASP的内容管理框架(ASP Nuke)的优势和适用场景
    本文推荐了一个ASP的内容管理框架ASP Nuke,并介绍了其主要功能和特点。ASP Nuke支持文章新闻管理、投票、论坛等主要内容,并可以自定义模块。最新版本为0.8,虽然目前仍处于Alpha状态,但作者表示会继续更新完善。文章还分析了使用ASP的原因,包括ASP相对较小、易于部署和较简单等优势,适用于建立门户、网站的组织和小公司等场景。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
author-avatar
俺是个大老粗
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有