如何编写 PL/SQL 程序
本文的操作选用的数据库是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 程序的更多相关文章
- Oracle数据库之PL/SQL程序设计基础
PL/SQL程序设计基础 一.PL/SQL块结构 前边我们已经介绍了PL/SQL块的结构,再来回顾一下: DECLARE /* * 声明部分——定义常量.变量.复杂数据类型.游标.用户自定义异常 */ ...
- 【未完成】[Spark SQL_2] 在 IDEA 中编写 Spark SQL 程序
0. 说明 在 IDEA 中编写 Spark SQL 程序,分别编写 Java 程序 & Scala 程序 1. 编写 Java 程序 待补充 2. 编写 Scala 程序 待补充
- oracle pl/sql程序
简单的pl/sql程序 declare begin dbms_output.put_line('hello world'); end; 什么是PL/SQL? pl/sql(Procedure lang ...
- Oracle数据库之PL/SQL程序基础设计
一.PL/SQL块结构 前边我们已经介绍了PL/SQL块的结构,再来回顾一下: DECLARE /* * 声明部分——定义常量.变量.复杂数据类型.游标.用户自定义异常 */ BEGIN /* * 执 ...
- 七、dbms_rowid(用于在PL/SQL程序和SQL语句中取得行标识符)
1.概述 作用:用于在PL/SQL程序和SQL语句中取得行标识符(rowid)的信息并建立ROWID,通过该包可以取得行所在的文件号,行所在文件的数据块号,行所在数据块的行号,以及数据库对象号等消息. ...
- PL/SQL程序控制结构及在PL/SQL中更改数据和管理事务
1.条件控制 A. IF条件分支语法: if (条件1) then 语句; elsif (条件2) then 语句; elsif (条件3) then 语句; else 语句; end if; B . ...
- ebs如何将客户化的PL/SQL程序发布到webservice
as:cux_gl_hec_iface_soa_pkg. 1.将package声明部分的内容拷贝出来另存为cux_gl_hec_iface_soa_pkg.pls的文件: 2.将该文件上传到服务器上拥 ...
- PL/SQL程序中调用Java代码(转)
主要是学习PL/SQL调用JAVA的方法. 平台:WINDOWS 1.首先使用IDE写好需要调用的java代码,再添加"create or replace and compile java ...
- 编写pl/sql时,报错
/* 写一个简单的PL/SQL */ declare a ; b ; c number; begin c:=(a+b)/(a-b); dbms_output.put_line(c); exceptio ...
随机推荐
- 用API给用户添加职责
DECLARE lc_user_name VARCHAR2(100) := 'PRAJ_TEST'; lc_resp_appl_short_name VARCHAR2(100) := 'FND' ...
- Android 之Toast讲解-android学习之旅(一)
Toast比较常用,用于显示简短的提醒,比如网络连接断开等. Toast的简单编码实例 findViewById(R.id.button1).setOnClickListener(new OnClic ...
- Android开发学习之路--Notification之初体验
一般当我们收到短信啊,微信啊,或者有些app的提醒,我们都会在通知栏收到一天简单的消息,然后点击消息进入到app里面,其实android中有专门的Notification的类可以完成这个工作,这里就实 ...
- C语言--测试电脑存储模式(大端存储OR小端存储)
相信大家都知道大端存储和小端存储的概念,这在平时,我们一般不用考虑,但是,在某些场合,这些概念就显得很重要,比如,在 Socket 通信时,我们的电脑是小端存储模式,可是传送数据或者消息给对方电脑时, ...
- 精通CSS+DIV网页样式与布局--初探CSS
CSS英文名Cascading Style Sheet,中文名字叫层叠样式表,是用于控制页面样式并允许将样式信息与网页内容分离的一种标记性语言,DIV+CSS是WEB设计标准,它是一种网页的布局方法. ...
- OC语言编写:为视图添加丝滑的水波纹
先看一下最终效果图: 首先我们可以把如此丝滑的水波纹拆分一下下: 一条规律的曲线. 曲线匀速向右移动. 曲线下方的位置用颜色填充. 于是先来一条曲线吧. 对于需要产生波动如此规律的曲线,我们首先想到的 ...
- mysql进阶(二十四)防御SQL注入的方法总结
防御SQL注入的方法总结 这篇文章主要讲解了防御SQL注入的方法,介绍了什么是注入,注入的原因是什么,以及如何防御,需要的朋友可以参考下. SQL注入是一类危害极大的攻击形式.虽然危害很大,但是防御却 ...
- React Native移植原生Android
(一)前言 之前已经写过了有关React Native移植原生Android项目的文章,不过因为RN版本更新的原因吧,跟着以前的文章可能会出现一些问题,对于初学者来讲还是会有很多疑难的困惑的,而且官方 ...
- 1017. Queueing at Bank (25) - priority_queuet
题目如下: Suppose a bank has K windows open for service. There is a yellow line in front of the windows ...
- 03_Weblogic之配置简单域:启动和配置域,使用模板创建域,使用控制台
1 域:概览 是Oracle Weblogic Server的基本管理单元 始终包含一个配置为管理服务器的Oracle WebLogic Server实例 域中可以包括一些称为受管服务器的Ora ...