iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >oracle中存储过程如何使用
  • 657
分享到

oracle中存储过程如何使用

2024-04-02 19:04:59 657人浏览 八月长安
摘要

今天就跟大家聊聊有关oracle中存储过程如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一. 使用for循环游标:遍历所有职位为经理的雇员1

今天就跟大家聊聊有关oracle中存储过程如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

一. 使用for循环游标:遍历所有职位为经理的雇员

1. 定义游标(游标就是一个小集合)

2. 定义游标变量

3. 使用for循环游标

declare
  -- 定义游标c_job
  cursor c_job is
    select empno, ename, job, sal from emp where job = 'MANAGER';
    
  -- 定义游标变量c_row
  c_row c_job%rowtype;
begin
  -- 循环游标,用游标变量c_row存循环出的值
  for c_row in c_job loop
    dbms_output.put_line(c_row.empno || '-' || c_row.ename || '-' ||
                         c_row.job || '-' || c_row.sal);
  end loop;
end;

二. fetch游标:遍历所有职位为经理的雇员

使用的时候必须明确的打开和关闭

declare
  --定义游标c_job
  cursor c_job is
    select empno, ename, job, sal from emp where job = 'MANAGER';

  --定义游标变量c_row
  c_row c_job%rowtype;
begin
  open c_job;
  loop
    --提取一行数据到c_row
    fetch c_job into c_row;
    
    --判读是否提取到值,没取到值就退出
    exit when c_job%notfound;
    dbms_output.put_line(c_row.empno || '-' || c_row.ename || '-' ||
                         c_row.job || '-' || c_row.sal);
  end loop;
  
  --关闭游标
  close c_job;
end;

三. 使用游标和while循环:遍历所有部门的地理位置

--3,使用游标和while循环来显示所有部门的的地理位置(用%found属性)
declare
  --声明游标
  cursor csr_TestWhile is select loc from dept;

  --指定行指针
  row_loc csr_TestWhile%rowtype;
begin
  open csr_TestWhile;
  --给第一行数据
  fetch csr_TestWhile into row_loc;
  
  --测试是否有数据,并执行循环
  while csr_TestWhile%found loop
    dbms_output.put_line('部门地点:' || row_loc.LOC);
    --给下一行数据
    fetch csr_TestWhile into row_loc;
  end loop;
  close csr_TestWhile;
end;

四. 带参的游标:接受用户输入的部门编号

declare
  -- 带参的游标
  cursor c_dept(p_deptNo number) is
    select * from emp where emp.deptno = p_deptNo;
    
  r_emp emp%rowtype;
begin
  for r_emp in c_dept(20) loop
    dbms_output.put_line('员工号:' || r_emp.EMPNO || '员工名:' 
                         || r_emp.ENAME || '工资:' || r_emp.SAL);
  end loop;
end;

五. 加的游标:对所有的salesman增加佣金500

declare
  --查询数据,加锁(for update of)
  cursor csr_addComm(p_job nvarchar2) is
    select * from emp where job = p_job for update of comm;
  r_addComm emp%rowtype;
  commInfo  emp.comm%type;
begin
  for r_addComm in csr_addComm('SALESMAN') loop
    commInfo := r_addComm.comm + 500;
    
    --更新数据(where current of)
    update emp set comm = commInfo where current of csr_addComm;
  end loop;
end;

六. 使用计数器:找出两个工作时间最长的员工

declare
  cursor crs_testComput is
    select * from emp order by hiredate asc;
    
  --计数器
  top_two      number := 2;
  r_testComput crs_testComput%rowtype;
begin
  open crs_testComput;
  fetch crs_testComput into r_testComput;
  while top_two > 0 loop
    dbms_output.put_line('员工姓名:' || r_testComput.ename ||
                         ' 工作时间:' || r_testComput.hiredate);
    --计速器减1
    top_two := top_two - 1;
    fetch crs_testComput into r_testComput;
  end loop;
  close crs_testComput;
end;

七. if/else判断:对所有员工按基本薪水的20%加薪,如果增加的薪水大于300就取消加薪

declare
  cursor crs_upadateSal is
    select * from emp for update of sal;
  r_updateSal crs_upadateSal%rowtype;
  salAdd      emp.sal%type;
  salInfo     emp.sal%type;
begin
  for r_updateSal in crs_upadateSal loop
    salAdd := r_updateSal.sal * 0.2;
    if salAdd > 300 then
      salInfo := r_updateSal.sal;
      dbms_output.put_line(r_updateSal.ename || ':  加薪失败。' ||
                           '薪水维持在:' || r_updateSal.sal);
    else
      salInfo := r_updateSal.sal + salAdd;
      dbms_output.put_line(r_updateSal.ENAME || ':  加薪成功.' ||
                           '薪水变为:' || salInfo);
    end if;
    update emp set sal = salInfo where current of crs_upadateSal;
  end loop;
end;

八. 使用case
when:按部门进行加薪

declare
  cursor crs_caseTest is
    select * from emp for update of sal;

  r_caseTest crs_caseTest%rowtype;
  salInfo    emp.sal%type;
begin
  for r_caseTest in crs_caseTest loop
    case
      when r_caseTest.deptno = 10 THEN
        salInfo := r_caseTest.sal * 1.05;
      when r_caseTest.deptno = 20 THEN
        salInfo := r_caseTest.sal * 1.1;
      when r_caseTest.deptno = 30 THEN
        salInfo := r_caseTest.sal * 1.15;
      when r_caseTest.deptno = 40 THEN
        salInfo := r_caseTest.sal * 1.2;
    end case;
    update emp set sal = salInfo where current of crs_caseTest;
  end loop;
end;

九. 异常处理:数据回滚

set serveroutput on;
declare
  d_name varchar2(20);
begin
  d_name := 'developer';
  
  savepoint A;
  insert into DEPT values (50, d_name, 'beijing');
  savepoint B;
  insert into DEPT values (40, d_name, 'shanghai');
  savepoint C;
  
  exception when others then
    dbms_output.put_line('error happens'); 
	  rollback to A;
  commit;
end;
/

十. 基本指令:

set serveroutput on size 1000000 fORMat wrapped; --使DBMS_OUTPUT有效,并设置成最大buffer,防止"吃掉"最前面的空格
set linesize 256; --设置一行可以容纳的字符数
set pagesize 50; --设置一页有多少行数
set arraysize 5000; --设置来回数据显示量,这个值会影响autotrace时一致性读等数据
set newpage none; --页和页之间不设任何间隔
set long 5000; --LONG或CLOB显示的长度
set trimspool on; --将SPOOL输出中每行后面多余的空格去掉
set timing on; --设置查询耗时
col plan_plus_exp format a120; --autotrace后explain plan output的格式
set termout off; --在屏幕上暂不显示输出的内容,为下面的设置sql做准备
alter session set nls_date_format='yyyy-mm-dd hh34:mi:ss'; --设置时间格式

小知识:

下面的语句一定要在Command Window里面才能打印出内容

oracle中存储过程如何使用

set serveroutput on;
begin 
dbms_output.put_line('hello!');
end;
/

看完上述内容,你们对oracle中存储过程如何使用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网数据库频道,感谢大家的支持。

您可能感兴趣的文档:

--结束END--

本文标题: oracle中存储过程如何使用

本文链接: https://www.lsjlt.com/news/58019.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle中如何使用存储过程
    这期内容当中小编将会给大家带来有关oracle中如何使用存储过程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 1.基本结构 CREATE OR REPLAC&...
    99+
    2024-04-02
  • oracle中存储过程如何使用
    今天就跟大家聊聊有关oracle中存储过程如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一. 使用for循环游标:遍历所有职位为经理的雇员1...
    99+
    2024-04-02
  • java中如何调用ORACLE存储过程
    小编给大家分享一下java中如何调用ORACLE存储过程,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一:无返回值的存储过程存储过程为:CREATE OR REP...
    99+
    2023-06-03
  • plsql中如何调用oracle存储过程
    在PL/SQL中调用Oracle存储过程可以通过以下步骤实现: 使用EXECUTE或CALL语句来调用存储过程。 通过DBMS_O...
    99+
    2024-04-09
    plsql oracle
  • oracle如何调用存储过程
    要调用Oracle存储过程,可以按照以下步骤进行操作:1. 使用Oracle SQL Developer或其他数据库客户端连接到Or...
    99+
    2023-08-22
    oracle
  • MySQL中如何使用存储过程
    这篇文章将为大家详细讲解有关MySQL中如何使用存储过程,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 使用CallableStatemen...
    99+
    2024-04-02
  • Oracle中如何调试存储过程
    要调试Oracle中的存储过程,可以使用以下方法:1. 使用DBMS_OUTPUT包:通过在存储过程中使用DBMS_OUTPUT包中...
    99+
    2023-08-25
    oracle
  • Oracle中如何编写存储过程
    在Oracle中编写存储过程可以使用PL/SQL语言。以下是一个在Oracle中编写存储过程的示例:```sqlCREATE OR ...
    99+
    2023-08-22
    oracle
  • Oracle在PL/SQL中使用存储过程
    目录一、概述二、存储过程详解1、创建过程语法:2、创建存储过程3、调用存储过程4、C# 调用:三、存储过程返回记录集SYS_REFCURSOR1、返回单行语法2、返回多行语法四、维护...
    99+
    2024-04-02
  • 如何在mysql中使用存储过程
    如何在mysql中使用存储过程?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中...
    99+
    2024-04-02
  • 如何使用hive存储过程
    这篇文章给大家分享的是有关如何使用hive存储过程的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。hive存储过程简介1.x版本的hive中没有提供类似存储过程的功能,使用Hive做数据开发时候,一般是将一段一段的...
    99+
    2023-06-02
  • oracle如何导入存储过程
    要导入存储过程到Oracle数据库中,可以使用以下方法:1. 使用SQL Developer工具导入存储过程:- 打开SQL Dev...
    99+
    2023-08-23
    oracle
  • 如何查看oracle存储过程
    在 oracle 中,可以通过以下方法查看存储过程:数据字典视图:使用 user_procedures 等视图查询存储过程信息。pl/sql developer:在“存储过程”文件夹中展...
    99+
    2024-04-19
    oracle
  • oracle如何查询存储过程
    有三种方法可以查询 oracle 存储过程:(1) 使用 select 查询 all_procedures 表;(2) 使用 dbms_metadata 包的 get_proc...
    99+
    2024-04-19
    oracle
  • Oracle如何调试存储过程
    这篇文章主要介绍Oracle如何调试存储过程,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一 调试关键步骤1、在要调试的存储过程右键,选择编辑以进行调试,截图如下: 2、点...
    99+
    2024-04-02
  • oracle存储过程中游标怎么使用
    在Oracle存储过程中,可以使用游标来处理查询结果集。游标允许逐行处理查询结果,类似于使用指针遍历数据。以下是在Oracle存储过...
    99+
    2023-09-09
    oracle
  • SQLServer存储过程中事务如何使用
    SQLServer存储过程中事务如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体代码如下create pr...
    99+
    2024-04-02
  • 如何使用mysql存储过程中的if
    这篇文章主要介绍了如何使用mysql存储过程中的if,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 在mysql...
    99+
    2024-04-02
  • 如何在 PHP 中使用 MySQL 存储过程?
    要在 php 中使用 mysql 存储过程:使用 pdo 或 mysqli 扩展连接到 mysql 数据库。准备调用存储过程的语句。执行存储过程。处理结果集(如果存储过程返回结果)。关闭...
    99+
    2024-05-11
    mysql php
  • MySql中如何使用存储过程参数
    MySql中如何使用存储过程参数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。存储过程 in参数 的使用IN参数只用来向过程传...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作