本文的操作选用的数据库是oracle 数据库,登陆的用户是自带的scott用户,默认密码:tiger,有不懂得可以相互讨论一下,谢谢.

首先需要了解PL/SQL块的结构,PL/SQL块由定义部门、执行部门、例外处理部分三个部分组成:

declare
 /**
  *定义部分---定义常量、变量、复杂数据类型、游标、例解
  *
  */
begin
 /**
  * 执行部分--- PL/SQL语句和SQL语句
  *
  */
exception
  /**
   *例外处理部分---处理运行错误
   *
   */
end;  /*结束快标记*/  

其中定义部分以declare(大小写都可以)开始,该部分是可选的;执行部分以begin开始,该部分是必须的;例外处理部分以exception开始,该部分也是可选的;而end则是PL/SQL块的结束标记。

下面是一个简单的例子,演示一下:

declare
v_ename varchar(20);
begin
select ename into v_ename
from emp
where empno=&no;
dbms_output.put_line('雇员名:'||v_ename); exception
when no_data_found then
dbms_output.put_line('请输入正确的雇员号!');
end;

接下来我们来看看PL/SQL块的分类:

1.匿名块 :也就是没有名称的PL/SQL块,匿名块可以内嵌到应用程序(Pro*C++)中,也可以在交互环境(例如 SQL*Plus)中直接使用。 上面的例子就是所谓的匿名块.

2.命名块:具有特定名称标识的PL/SQL块,在PL/SQL块begin使用<<>>加以标记。当使用嵌套块时,为了区分多级嵌套层次关系,,可以使用命名块加以区分。示例如下:

declare
v_deptno number(2);
v_dname varchar2(10);
begin
<<outer>>
begin
<<inner>>
select deptno into v_deptno
from emp
where lower(ename) =lower('&name');
end; --<<inner>>
select dname into v_dname
from dept
where deptno=v_deptno;
dbms_output.put_line('部门名:'||v_dname);
end; --<<outer>>

关于命名块,本人还有很多疑问,因为有的书上不是这样写的,运行会出错。个人理解而已,呵呵。。

3.子程序 :包括过程、函数和包.

3.1 过程

过程用于执行特定操作。当建立过程时,既可以指定输入参数(IN)、也可以指定输出参数(OUT)。通过在过程中使用输入参数,可以将应用环境的数据传递到执行部分;通过使用输出参数,可以将执行部分的数据传递到应用环境。

在SQL*Plus中可以使用create procedure 命令建立过程,在开发过程中,建议使用create or replace procedure 。示例如下:

 create or replace procedure update_sal(name varchar2,newsal number)
is
begin
update emp set sal=newsal
where lower(ename)=lower(name);
end;

在SQL*Plus中调用时,可以使用exec、call命令 ,不过在PL/SQL工具的SQL窗口中时,只能使用call  .

SQL> exec update_sal('scott',1000);

PL/SQL procedure successfully completed

SQL> 

3.2 函数

函数用于返回特定的数据。当建立函数时,在函数头部必须包含return 字句,而在函数体内必须包含return 语句返回数据。在SQL*Plus中,可以使用create function 命令建立函数,示例如下:

create function annual_income(name varchar2)
return number is
annual_salary number(7,2);
begin
select sal*12+nvl(comm,0) into annual_salary
from emp
where lower(ename)=lower(name);
return annual_salary;
end;

如上例所示,函数annual_income用于返回雇员的全年收入(包括工资和奖金)。下面使用SQL*Plus绑定变量存放输出结果,示例如下:

SQL> call annual_income('scott') into :income;

Method called
income
---------
24000 SQL> print income
income
---------
24000 SQL>

关于包、触发器等等以后再补充。。

以上存储过程和函数只是简单的介绍,要深入的了解,请参考其它的博文.

如何编写 PL/SQL 程序的更多相关文章

  1. Oracle数据库之PL/SQL程序设计基础

    PL/SQL程序设计基础 一.PL/SQL块结构 前边我们已经介绍了PL/SQL块的结构,再来回顾一下: DECLARE /* * 声明部分——定义常量.变量.复杂数据类型.游标.用户自定义异常 */ ...

  2. 【未完成】[Spark SQL_2] 在 IDEA 中编写 Spark SQL 程序

    0. 说明 在 IDEA 中编写 Spark SQL 程序,分别编写 Java 程序 & Scala 程序 1. 编写 Java 程序 待补充 2. 编写 Scala 程序 待补充

  3. oracle pl/sql程序

    简单的pl/sql程序 declare begin dbms_output.put_line('hello world'); end; 什么是PL/SQL? pl/sql(Procedure lang ...

  4. Oracle数据库之PL/SQL程序基础设计

    一.PL/SQL块结构 前边我们已经介绍了PL/SQL块的结构,再来回顾一下: DECLARE /* * 声明部分——定义常量.变量.复杂数据类型.游标.用户自定义异常 */ BEGIN /* * 执 ...

  5. 七、dbms_rowid(用于在PL/SQL程序和SQL语句中取得行标识符)

    1.概述 作用:用于在PL/SQL程序和SQL语句中取得行标识符(rowid)的信息并建立ROWID,通过该包可以取得行所在的文件号,行所在文件的数据块号,行所在数据块的行号,以及数据库对象号等消息. ...

  6. PL/SQL程序控制结构及在PL/SQL中更改数据和管理事务

    1.条件控制 A. IF条件分支语法: if (条件1) then 语句; elsif (条件2) then 语句; elsif (条件3) then 语句; else 语句; end if; B . ...

  7. ebs如何将客户化的PL/SQL程序发布到webservice

    as:cux_gl_hec_iface_soa_pkg. 1.将package声明部分的内容拷贝出来另存为cux_gl_hec_iface_soa_pkg.pls的文件: 2.将该文件上传到服务器上拥 ...

  8. PL/SQL程序中调用Java代码(转)

    主要是学习PL/SQL调用JAVA的方法. 平台:WINDOWS 1.首先使用IDE写好需要调用的java代码,再添加"create or replace and compile java ...

  9. 编写pl/sql时,报错

    /* 写一个简单的PL/SQL */ declare a ; b ; c number; begin c:=(a+b)/(a-b); dbms_output.put_line(c); exceptio ...

随机推荐

  1. Spark技术内幕:Executor分配详解

    当用户应用new SparkContext后,集群就会为在Worker上分配executor,那么这个过程是什么呢?本文以Standalone的Cluster为例,详细的阐述这个过程.序列图如下: 1 ...

  2. Android View框架总结(一)

    View和Activity的区别 View有哪些? ViewGroup是什么? 为什么Google产生ViewGroup? View的层级结构是什么? View的onMeasure()/onLayou ...

  3. android RecycleView Adapter简单封装

    早些时候我们使用系统提供个的BaseAdapter的时候为了满足大家的需要,我们总会对BaseAdapter做一层上层的封装,然后对于实际业务我们只需要关心getView里面的View即可,是代码可读 ...

  4. ROS_Kinetic_23 ROS流行版本和相关书籍汇总

    目前,ROS使用的主流版本主要是下面四种:Hydro,Indigo,Jade,Kinetic. Distro Release date Poster Tuturtle, turtle in tutor ...

  5. RPCZ中的智能指针单例

    RPCZ中的智能指针单例 (金庆的专栏) 智能指针单例应用于 RPCZ 库以实现库的自动初始化与自动清理. RPCZ: RPC implementation for Protocol Buffers ...

  6. 07 ProgressDialog

    <span style="font-size:18px;">package com.fmy.example1; import android.app.Activity; ...

  7. INV 调试: 如何获取库存物料事务处理调试信息

     1. 按如下方式设置系统配置文件值: 系统配置文件值 地点/用户/应用/职责层配置文件值 --汇总 FND: 启用调试日志   是 FND:调试日志层级   陈述 INV: 调试跟踪: 是 IN ...

  8. PLSQL解析XML文件

     参考网上资料学习汇总 在PL/SQL中利用XML ,Oracle提供了几个组件,让开发人员能轻松地利用XML技术.这些组件包括: 1.  XML 分析程序.即用来分析.构造和验证XML文档.. ...

  9. 百度的android面试总结分析

    今天就是今天上午10点,我接到了百度的电话面试,当然提前和我说了,我的拖延症是有多强烈,以至于我没怎么准备,当然我也想着看看自己的真实水平,在此检讨一下!!!!!!!!!!!!!!!!!!!!!!!! ...

  10. 数据库再设计(Database Redesign)

    数据库设计有三个来源:(1)可以从现有数据开始设计数据库,例如从excel表格等,这种模式下需要考虑的问题是数据的normalization,最终通常将数据转化为BCNF范式:(2)设计新的数据库,这 ...