原创作品,转自请注明出处:https://www.cnblogs.com/sunshine5683/p/10328524.html

一、函数

1、函数是可以返回一个特定的数据,函数的创建中必须包含return子句。

2、函数创建:

create function sp_function2(spname varchar2) return number  is salaries  number(7,3);

begin

----执行部分

select sal*10+nvl(comm,0)*10 into salaries from emp where ename=spname;

return salares;

end;

3、在sqlplus中调用函数

var xhq_salaries number

call sp_function2('SCOTT') into :xhq_salaries;

二、包

1、包是用于逻辑上组合过程和函数的,可以使用create package命令创建一个包。

如:

create package sp_package is

procedure update_sal(name varchar2,newsal number);

function sp_function2(name varchar2) return number;

end;

2、创建包体

create or replace package body sp_package is

procedure update_sal(name varchar2,newsal number) is

begin

update emp set sal=newsal where ename=name;

end;

function sp_function2(name varchar2) return number is

salaries number;

begin

select sal into salaries from emp where ename=name;

return salaries;

end;

end;

3、调用包的函数或过程

exec sp_package.update_sal('SMITH',120);

三、plsql变量

1、标量类型(scalar)

标量包含许多类型,此处介绍常用类型就可以

如:

定义一个边长字符串: v_ename varchar2(20);

定义一个小数 ,范围-99.99~99.99:    v_sal  number(4,2);

定义一个小数并给一个初始值: v_sal2  number(6,2):=1111.11

例子:

输入员工号,输出员工工资,姓名,个人所得税(税率为0.01)

declare

c_tax_rate number(3,2):=0.01;

v_ename varchar2(10);

v_sal number(7,2);

v_tax_sal number(7,2);

begin

select ename,sal into v_ename,v_sal from emp where empno=&no;

--计算所得税

v_tax_sal:=v_sal*c_tax_rate;

dbms_output.put_line('姓名为:'||v_ename||'工资:'||v_sal || '所得税:'||v_tax_sal);

end;

上面报错原因是定义v_ename  varchar(5),但实际上返回的值大于定义的,所以报错,改成v_ename varchar(10),问题解决,正常执行。

标量使用%type类型:表面。列名%type

如上面:v_ename  emp.ename%type;这样定以后就会匹配大小,不会存在上述缓冲太小的错误,也不至于定义太大浪费空间。

2、复合类型(即plsql记录)

类似于高级语言中的结构体,使用:记录变量.记录成员.

3、复合类型之plsql表,相当于高级语言中的数组,区别是下标可以为负数,而在高级语言中是不可以为负数的。

4、参照变量:是指用于存放数值指针的变量,通过参照变量,可以使得应用程序共享相同对象,从而降低占用的空间,在编写plsql程序时,可以使用游标变量和对象变量两种参照变量,简单是用的最多的是游标变量。

使用游标变量时,不需要指定相应的select语句,但是使用又表示,需要指定select语句。

实例如下:

declare
  type sp_emp_cursor is ref cursor;
  test_cursor sp_emp_cursor;
  --定义变量
  v_ename emp.ename%type;
  v_sal emp.sal%type;
   begin
   --吧test_cursor和一个select结合
   open test_cursor for select ename,sal from emp where deptno=&no;
   --循环取出查询出的数据
   --循环取出查询出的数据
  loop
    fetch test_cursor into v_ename,v_sal;
    exit when test_cursor%notfound;
    dbms_output.put_line('姓名:'||v_ename||'工资:'||v_sal);
   end loop;
   --关闭游标
   close test_cursor;
   end;

Oracle总结之plsql编程(基础八)的更多相关文章

  1. Oracle总结之plsql编程(基础七)

    紧接基础六,对oracle角色和权限的管理之后,在接下来的几次总结中来就最近工作中用过的plsql编程方面的知识进行总结,和大家分享! 原创作品,转自请注明出处:https://www.cnblogs ...

  2. Oracle基础 PL-SQL编程基础(4) 异常处理

    异常处理: 即使良好的PL-SQL程序也会遇到错误或者未预料的事件,一个优秀的程序都应该能够处理各种出错情况,尽可能的从错误中恢复.程序在运行时出现的错误成为异常.发生异常后,语句讲终止执行,PLSQ ...

  3. Oracle基础 PL-SQL编程基础(1) 变量和常量

    一.什么是PL-SQL PL-SQL是结合了Oracle过程语言和结构化查询语言(SQL)的一种扩展语言.具体来说,PL-SQL就是在普通的SQL语句的基础上增加了编程语言的特点,将数据操作和查询语句 ...

  4. Oracle总结之plsql编程(基础九)

    原创作品,转自请注明出处:https://www.cnblogs.com/sunshine5683/p/10344302.html 接着上次总结,继续今天的总结,今天主要总结plsql中控制语句,如条 ...

  5. Oracle基础 PL-SQL编程基础(2) 分支结构

    一.分支结构 1.if语句 语法: IF <布尔表达式> THEN PL/SQL和SQL语句 END IF; 示例: DECLARE v_count NUMBER := &n; B ...

  6. Oracle基础 PL-SQL编程基础(3) 循环结构

    循环结构: 1. LOOP循环结构 语法: LOOP 要执行的语句; EXIT WHEN <条件>   --条件满足则退出循环 END LOOP; 示例:循环输出1-10的整数 DECLA ...

  7. PLSQL编程基础

    一 PL/SQL简介 1 SQL:结构化的查询语句 2 PL/SQL优点与特性: 提高运行效率==>>提高运行效率的其他方式(存储过程,分页,缓存,索引) 模块化设计 允许定义标识符(变量 ...

  8. oracle学习1 基于oracle数据库的PLSQL编程以及存储过程的创建和使用视频

    https://www.bilibili.com/video/av46777605 plsql中选择testWindow中可以进行测试 1.编写函数在plsql的testwindow中 begin d ...

  9. plsql 编程基础

    分支 declare --声明变量 a ); b ); c ); begin --开始 a := '小明'; dbms_output.put_line(a); b :; c :; if b > ...

随机推荐

  1. JS中图片飞飞效果

    当鼠标在界面上移动的时候,后面有一连串的图片跟随者一起飘动,效果如下: 实现的基本思想:准备五个img标签,为了方便控制都放在一个div里面,设置div的定位方式为 fixed,设置成这中定位方式主要 ...

  2. Spring IOC 容器源码分析 - 创建单例 bean 的过程

    1. 简介 在上一篇文章中,我比较详细的分析了获取 bean 的方法,也就是getBean(String)的实现逻辑.对于已实例化好的单例 bean,getBean(String) 方法并不会再一次去 ...

  3. Python3.5 学习二十

    学会用三种方法检索数据 1.对象方式 2.字典方式 3.元组方式 models后面,如果是.values() 则为字典方式 如果是value_list() 则为元组方式 跨表操作时,如果是对象,可以用 ...

  4. 简单题(K-D Tree)

    简单题不简单-- 我们把单点加操作改成插入一个权值为增加量的点,将问题转化成询问一个矩阵中所有点的和,用 \(K-D\ Tree\) 维护,时间复杂度 \(O(n\sqrt{n})\) \(Code\ ...

  5. atomic write pipe

    阅读 skynet 代码 socket_server 部分,发现对 socket 的写操作流程是这样的: 1. 各个服务(各线程)将数据写到 sendctrl_fd,这是一个 pipe 的 写端 2. ...

  6. 【Anaconda】:科学计算的Python发行版

    [背景] Python易用,但包管理和Python不同版本的问题比较头疼,特别是当你使用Windows的时候.为了解决这些问题,有不少发行版的Python,比如WinPython.Anaconda等, ...

  7. c++11中关于std::thread的join的思考

    c++中关于std::thread的join的思考 std::thread是c++11新引入的线程标准库,通过其可以方便的编写与平台无关的多线程程序,虽然对比针对平台来定制化多线程库会使性能达到最大, ...

  8. windows 系统安装git的方法

    windows 系统安装git的方法 msysgit是Windows版的Git,从https://git-for-windows.github.io下载 安装默认步骤,一步步安装即可 安装完成后,在开 ...

  9. 前端基础——html

    前端基础——html 在用CSS布局页面的时候,我们会将HTML标签分成两种,块级元素和内联元素(我们平常用到的div和p就是块级元素,链接标签a就是内联元素) 块级(行级)标签 和 内联标签 块级元 ...

  10. Deep Learning (中文版&英文版)

    Bengio Yoshua,Ian J. Goodfellow 和 Aaron Courville共同撰写的<深度学习>(Deep Learning)是一本为了帮助学生及从业者入门机器学习 ...