`
davice_li
  • 浏览: 93798 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle PL/SQL练习使用

阅读更多

declare
  v_num number := &input;
  v_last_num number := 0;
  v_result varchar(2000) := '';
begin
  loop
    v_last_num := mod(v_num,10);
    v_result := v_result || to_char(v_last_num);
    v_num := v_num - v_last_num;
    exit when v_num=0;
    v_num := v_num / 10;
  end loop;
  dbms_output.put_line(v_result);
end;

第六章  游标(cursor)管理
create SYNONYM emp for scott.emp;
--作用:
declare
  v_ename emp.ename%type;
begin
  select ename into v_ename
  from emp;
 
  dbms_output.put_line(v_ename);
end;

--显式游标的定义和遍历
--通过无条件的循环来遍历游标
declare
  --1.定义游标
  cursor c_emp_cursor
  is select ename from emp;
 
  v_ename emp.ename%type;
begin
    --2.打开游标
    open c_emp_cursor;
   
    --3.遍历游标
    loop
      fetch c_emp_cursor into v_ename; --rs.next();
     
      exit when c_emp_cursor%NOTFOUND;
     
      dbms_output.put_line(v_ename);
    end loop;
   
    --4.关闭游标
    close c_emp_cursor;
end;

--用WHILE循环来遍历游标
declare
  cursor c_emp_cursor
  is select * from emp;
 
  v_row emp%rowtype;
begin
  open c_emp_cursor;
 
  fetch c_emp_cursor into v_row;
 
  while c_emp_cursor%FOUND loop
    dbms_output.put_line(v_row.ename || ' ' || v_row.empno);
    fetch c_emp_cursor into v_row;
  end loop;
 
  close c_emp_cursor;
end; 

--FOR循环遍历游标的方式
declare
  cursor c_emp_cursor
  is select * from emp;
begin
  for v_row IN c_emp_cursor loop
    dbms_output.put_line(v_row.empno || ' ' || v_row.ename);
  end loop;
end;

--定义参数类型的游标
declare
  cursor c_emp_cursor(p_deptno emp.deptno%type)
  is select ename from emp where deptno=p_deptno;
 
  v_ename emp.ename%type;
begin
open c_emp_cursor(&input);

loop
   fetch c_emp_cursor into v_ename;
   exit when c_emp_cursor%NOTFOUND;
   dbms_output.put_line(v_ename);
end loop;

close c_emp_cursor;
end;

--为游标指定返回类型1-rowtype
declare
  cursor c_emp_cursor
  return emp%rowtype  --强制类型
  is select * from emp;
begin
  for v_row IN c_emp_cursor loop
    dbms_output.put_line(v_row.empno);
  end loop;
end;

--为游标指定返回类型2-记录(Record)类型
declare
  --定义一个记录类型
  type t_emp_record is record
  (
    empno emp.empno%type,
    ename emp.ename%type
  );

  v_emp_record t_emp_record;

  cursor c_emp_cursor
  return  v_emp_record   --强制类型
  is select empno,ename from emp;
begin
  open c_emp_cursor;
  loop
    fetch c_emp_cursor into v_emp_record;
    exit when c_emp_cursor%NOTFOUND;
    dbms_output.put_line(v_emp_record.empno);
    dbms_output.put_line(v_emp_record.ename);
  end loop;
  close c_emp_cursor;
end;

--如何通过游标来修改数据
declare
  --通过游标修改数据要上行级锁
  cursor c_emp_cursor
  is select * from emp where deptno=20 for update;
begin
  for v_row In c_emp_cursor loop
    delete from emp
    where current of c_emp_cursor;
  end loop;
  commit;
end;
select * from emp;

--REF引用类型的游标描述
declare
  type t_ref_cursor is ref cursor;
 
  v_ref_cursor t_ref_cursor;
begin
  open v_ref_cursor
  for select * from emp;
 
  close v_ref_cursor;
 
  open v_ref_cursor
  for select * from dept;
 
  close v_ref_cursor;
end;

--1.隐式游标(SQL)的使用
--用途:因为数据库系统在做insert,delete,update,select这些操作的时候
--都是通过游标去完成的,所以,在做操作之前我们的数据库系统都会隐式
--的打开一个游标,在执行操作完毕之后隐式的关闭游标,那么每次的操作的结果
--都会保存在一个叫做SQL的隐式游标中,我们可以通过操作这个隐式游标来获取
--数据库操作的信息

begin
  delete from emp where deptno=10;
 
  dbms_output.put_line(SQL%ROWCOUNT);
end;





第七章 存储过程(Procedure)和包(Package)

SQLServer - 存储过程 (output参数  return)
Oracle -存储过程(out参数) 函数(return)

--1.存储过程
create or replace procedure print(msg varchar2)
is
begin
  dbms_output.put_line(msg);
end;

--1.1 调用存储过程
execute print('helloworld');

--1.2
create or replace procedure findEmp(p_empno emp.empno%type)
is
  v_ename emp.ename%type;
begin
  select ename into v_ename
  from emp where empno=p_empno;
 
  print(v_ename);
exception
  when no_data_found then
    print('未发现指定员工.');
end;

--1.3 传递参数
create or replace procedure myabs(p_num1 IN number,p_num2 OUT number)
is
begin
  if p_num1 >0 then
    p_num2 := p_num1;
  else
    p_num2 := (0 - p_num1);
  end if;
end;

--调用
declare
  v_result number;
begin
  myabs(-987,v_result);
  print(v_result);
end;

create or replace procedure change_num(p_num1 IN OUT number,p_num2 IN OUT number)
is
  v_temp number;
begin
  v_temp := p_num1;
  p_num1 := p_num2;
  p_num2 := v_temp;
end;

--调用
declare
  v_num1 number :=111;
  v_num2 number :=222;
begin
  change_num(v_num1,v_num2);
 
  print(v_num1);
  print(v_num2);
end;

--2.函数(FUNCTION)
create or replace function myabs1(p_num1 number)
return number
is
begin
  if p_num1 >= 0 then
    return p_num1;
  else
    return (0 - p_num1);
  end if;
end;

begin
  print(myabs1(-999));
end;

create or replace function findEmp1(p_empno emp.empno%type)
return emp.ename%type
is
  v_ename emp.ename%type;
begin
  select ename into v_ename
  from emp
  where empno=p_empno;
 
  return v_ename;
exception
  when no_data_found then
    print('未发现员工');
end;

begin
  print(findEmp1(7499));
end;

--3.包(Package)-包(package-定义)和包体(package body-实现)
create or replace package mypkg
is
  procedure print(msg varchar2);
 
  function findEmp(p_empno number)
  return emp.ename%type;
end;

create or replace package body mypkg
is
  procedure print(msg varchar2)
  is
  begin
    dbms_output.put_line(msg);
  end;
 
  function findEmp(p_empno number)
  return emp.ename%type
  is
    v_ename emp.ename%type;
  begin
    select ename into v_ename
    from emp
    where empno=p_empno;
   
    return v_ename;
  exception
    when no_data_found then
      print('未发现员工');
  end;
end;

--4.通过函数返回结果集
create or replace function findAllEmps
return SYS_REFCURSOR
is
  v_ref_cursor SYS_REFCURSOR;
begin
  open v_ref_cursor
  for 'select * from emp';
 
  return v_ref_cursor;
end;
我上学时候练习用的

分享到:
评论

相关推荐

    oracle pl/sql实例精讲student数据库模式数据和表脚本

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据库操作能力和Procedural Language的编程结构,用于在Oracle数据库环境中创建复杂的应用...通过不断练习和深入理解,你将成为一名精通Oracle PL/SQL的专业开发者。

    oracle pl/sql 实例精解(中文原书第4版)

    本书是一本逐步分解的,详尽的pl/sql编程教程,使用真实场景的试验、范例和练习来介绍读者所需的pl/sql编程技能,涵盖oracle 11g的最新特性。作者的写作手法源自于在哥伦比亚大学教授pl/sql编程技术的经验,深度...

    Oracle PL/SQL by Example(4th Edition)

    《Oracle PL/SQL by Example(4th Edition)》是一本专为Oracle数据库用户设计的PL/SQL编程指南,尤其适合那些希望通过实践学习这一强大的过程式语言的开发者。本书的第四版详细介绍了Oracle PL/SQL的各种核心概念和...

    oracle_oracle_oraclepl/sql_

    通过阅读《Oracle PL/SQL》这本书,法语读者可以系统地学习到上述内容,并通过实例和练习提升自己的编程技能。这本书将帮助读者深入理解Oracle数据库的编程精髓,提升数据库管理与应用开发的能力。

    PL/SQL 练习

    从给定的文件信息中,我们可以提炼出一系列与Oracle PL/SQL相关的知识点,涉及变量声明、数据查询、条件语句、异常处理以及数据库更新等核心概念。以下是对这些知识点的详细解析: ### 1. 变量声明与赋值 在PL/SQL...

    oracle pl sql 实例精解 源代码

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与Procedural Language的控制结构,被广泛用于Oracle数据库的开发和管理。本资料集是"Oracle PL/SQL实例精解",提供了丰富的源代码示例,帮助读者深入...

    PL/SQL入门到精通书的源代码

    PL/SQL是Oracle数据库系统中的过程式语言,它结合了SQL的数据操作能力与结构化编程语句,使得开发者能够创建复杂的数据处理逻辑和业务规则。本资料“PL/SQL入门到精通书的源代码”是一份针对初学者到高级用户的实践...

    oracle PL/SQL测试题目和详细答案

    ### Oracle PL/SQL测试题目与知识点解析 #### 一、选择题知识点解析 **1. Oracle数据库中为新创建的表分配的初始空间通常为多大?** - **知识点解析:** Oracle数据库为新创建的表分配的空间单位是“区”(Extent...

    Oracle PL/SQL的练习题

    这篇博客“Oracle PL/SQL的练习题”可能包含一系列针对初学者和进阶者的编程挑战,旨在提升对PL/SQL语言的理解和应用能力。虽然没有具体的描述,但我们可以推测这些练习可能涵盖以下几个方面: 1. **变量声明与赋值...

    Oracle PL/SQL程序设计(第5版)源代码

    Oracle PL/SQL程序设计是数据库开发领域中一本权威的指南,尤其对于使用Oracle数据库进行存储过程、函数和其他数据库编程的开发者来说,具有极高的参考价值。第5版的书籍不仅涵盖了PL/SQL的基础知识,还深入探讨了...

    Oracle PL/SQL实例精讲--使用表,课后答案

    在"Oracle PL/SQL实例精讲--使用表,课后答案"中,读者可以深入理解如何有效地使用PL/SQL与Oracle数据库中的表格进行交互。这份资源包含第五版的课程内容,提供了实际操作的例子和课后练习的答案,对于学习者来说是...

    oracle pl/sql入门教程

    Oracle PL/SQL是一种强大的...通过深入学习以上这些知识点,并结合实际的编程练习,你将能够更好地理解和运用Oracle PL/SQL。本入门教程中的范例将帮助你将理论知识转化为实践技能,快速上手Oracle数据库的开发工作。

    Oracle PL/SQL编程

    Oracle PL/SQL编程是Oracle数据库管理系统中的核心编程语言,它结合了SQL的查询能力与过程式编程语言的特点,使得开发者可以编写复杂的业务逻辑和数据库操作。在这个领域,掌握PL/SQL的基本语法和实例应用至关重要。...

    Oracle SQL PL/SQL 练习资料

    Oracle SQL和PL/SQL是...通过这些练习,你可以逐步掌握Oracle SQL和PL/SQL的精髓,为实际的数据库开发工作打下坚实的基础。无论你是初学者还是有一定经验的开发者,这份资料都能帮助你巩固技能,提升解决问题的能力。

    oracle PL/SQL英文课件

    课件可能包含详细的讲解、示例代码、练习题和解答,旨在提供一个全面的学习环境,帮助学员熟练掌握Oracle PL/SQL编程。无论你是数据库管理员、开发人员还是系统分析师,这个课件都将为你的职业生涯添加重要的技能。

    精通pl/sql

    《精通PL/SQL》这本书是针对Oracle数据库系统中PL/SQL编程语言的深度解析与实践指南,主要面向希望提升在Oracle环境下使用PL/SQL技能的专业人士。PL/SQL,全称为Procedural Language/Structured Query Language,是...

    oracle pl/sql by example

    《Oracle PL/SQL by Example》是一本专注于Oracle数据库系统中PL/SQL编程语言的经典教程。PL/SQL,全称为Procedural Language/SQL,是Oracle数据库内置的一种过程化编程语言,它结合了SQL的查询能力与面向过程的编程...

    Oracle数据库SQL和PL/SQL实例教程

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,SQL(结构化查询语言)是与所有关系数据库进行交互的标准语言,而PL/SQL是Oracle数据库特有的编程语言,它扩展了SQL的功能,使得数据库管理、开发和维护...

Global site tag (gtag.js) - Google Analytics