本文的操作选用的数据库是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. 02_c3p0之c3p0-config.xml配置案例,操作c3p0的jdbcUtil工具类的编写

     c3p0也是一个开源jdbc连接池,我们熟悉的Hibernate和Spring框架使用的都是该数据源. 这里获得数据源使用的方法是:ComboPooledDataSource 它提供的构造方法有 ...

  2. 编译GDAL支持ArcObjects

    编译GDAL支持ArcObjects. 首先修改nmake.opt文件中对应的ArcObjects,修改后的如下所示: #uncomment to use ArcObjects ARCOBJECTS_ ...

  3. Redefine:Change in the Changing World

    EMC World 2014的主题就是REDEFINE.的确,现在科技的发展在重新定义了技术,影响了生活,改变了你我. 对于一个有数万员工,甚至数十万员工的企业来说,Redefine无疑更加具有挑战, ...

  4. Dynamics CRM CRM Explorer missing from Visual Studio 2012

    CRMSDK中提供的develop toolkit工具比较适合初级开发者或者是多人团队的开发,在代码版本控制及部署上均有明显的优势. 但今天在装完这个工具后,打开vs2012可以新建一个package ...

  5. 尚学堂马士兵struts2 课堂笔记(四)

    27 结果类型 主要就四种种 dispatch和rediret chain和drdirectaction <package name="resultTypes" namesp ...

  6. Java多种方式读文件,追加文件内容,等对文件的各种操作

    一.多种方式读文件内容. 1.按字节读取文件内容 2.按字符读取文件内容 3.按行读取文件内容 4.随机读取文件内容 import java.io.BufferedReader; import jav ...

  7. Python 编程常见问题

    Python 编程常见问题 经常使用Python编程,把经常遇到问题在这里记录一下,省得到网上查找,因此这篇文章会持续更新,需要的可以Mark一下.进入正题: 1.Python常用的文件头声明 #!/ ...

  8. 菜鸟玩云计算之十二:KVM虚拟机更改大小

    菜鸟玩云计算之十二:KVM虚拟机更改大小 参考: http://www.missionfamilybank.org/expanding-resizing-your-qcow2-virtual-mach ...

  9. 跨平台移动APP开发进阶(四)AngularJS简介

    AngularJS 是一个为动态WEB应用设计的结构框架.它能让你使用HTML作为模板语言,通过扩展HTML的语法,让你能更清楚.简洁地构建你的应用组件. 它的创新点在于,利用 数据绑定 和 依赖注入 ...

  10. Java 与 C++ 不一样的地方(持续更新中...)

    本文仅以记录 Java 与 C++ 不同之处,以备随时查询. Java 程序运行机制 Java 是一门编译解释型的语言,即它在运行的过程中既需要编译也需要解释.如下图表示的是 Java 程序运行机制: ...