如何编写 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 ...
随机推荐
- 18 UI美化transition 图片过渡
让两张图片在一定时间过渡 在工程文件res/drawable/transition文件 <?xml version="1.0" encoding="utf-8&qu ...
- ubunut系统清理系统根目录下缓存文件夹.cache超大导致磁盘不足
在使用中突然发现系统超慢,没有做什么特别的操作. 只好重启下电脑,重启后提示系统空间不足1G.挨个查看文件夹大小,没有发现问题,然后就用Ctrl + H显示隐藏文件夹后再继续逐个查看大小,发现.cac ...
- 安卓java.lang.IllegalStateException: The specified child already has a parent.解决方案
在使用ViewPager的时候遇到一个错误java.lang.IllegalStateException: The specified child already has a parent. You ...
- 【一天一道LeetCode】#345. Reverse Vowels of a String
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Write a ...
- A*寻路算法入门(三)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- UNIX环境高级编程——进程间通讯方法整理
一.无名管道pipe #include <unistd.h> int pipe(int fd [2]) 二.fifo #include <sys/stat.h> int mkf ...
- DB 查询分析器 6.04 在 Windows 10 上的安装与运行展示
DB查询分析器 6.04 在 Windows 10 上的安装与运行展示 中国本土程序员马根峰(CSDN专访马根峰:海量数据处理与分析大师的中国本土程序员 http://www.csdn.net/art ...
- java设计模式---调停者模式
中介者模式(Mediator):用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 通用类图: 举例:在一个公司里面 ...
- Cocos2D:塔防游戏制作之旅(五)
打开HelloWorldLayer.h文件,添加以下实例变量(在@interface行的花括号之后): NSMutableArray *towerBases; 将HelloWorldLayer.m文件 ...
- git常用技巧
一般的过程: ①如果还没有库先用 git clone 克隆一个库. ②使用 git checkout master切换到master分支. ③使用 git pull 同步远程master分支(即git ...