您的位置:首页 > 数据库

PL/SQL块基本概念及示例

2017-08-24 15:03 411 查看
PL/SQL块:procedural language sql带有过程的sql语言。

sql 非过程化的 研究做什么 只要告诉数据库 增删改查就可以了 

过程语言(带有分支或循环的语言)

一、模板示例

DECLARE[ 可选:不是必须写的 ]

  声明部分,声明常量和变量

BEGIN

  开始部分,编写程序

EXCEPTION[ 可选:不是必须写的 ]

  异常部分,捕获异常

END;

/    [ /表示编译、执行,必须顶格 ]

二、具体实例

需求1:hello world!

在控制台 

--打开输出流

set serverout on;

begin

    dbms_output.put_line('hello,pl/sql!');

end;

/

需求2:打印一个数字

DECLARE

--声明一个类型为number的变量i

i number;

BEGIN

--给i赋值,赋值使用 := 

i := 30;

--打印i的值

dbms_output.put_line('i的内容是'||i);

END;

/

需求3:捕获 不能被0除 异常

DECLARE

  i NUMBER ;

BEGIN
i:= 1/0;

EXCEPTION
when ZERO_DIVIDE then
dbms_output.put_line('error');

END ;

/

需求4:要求用户输入一个雇员编号,之后根

据输入的内容进行查询,查询雇员的姓名。
• 用户的输入信息使用“&”完成。
DECLARE

eno NUMBER ;

en VARCHAR2(30) ;

BEGIN

-- 输入的信息保存在 eno

eno := &no ;

-- 之后根据 eno
的值,对数据库进行查询操作
SELECT ename INTO en FROM emp WHERE empno=eno ;

DBMS_OUTPUT.put_line('编号为: '||eno||'雇员的姓名为:
'||en) ;

EXCEPTION

WHEN no_data_found THEN

DBMS_OUTPUT.put_line('没有此雇员') ;

END ;

/

在以上的查询中再进一步:可以根据雇员的编号查出姓名及其领导的姓名和所在的部门,

进行显示。
DECLARE

eno emp.empno%TYPE ;

en emp.ename%TYPE ;

mn emp.ename%TYPE ;

dn dept.dname%TYPE ;

dept dept %rowtype ;

BEGIN

-- 输入的信息保存在 eno

eno := &no ;

-- 之后根据 eno
的值,对数据库进行查询操作
SELECT e.ename,m.ename,d.dname INTO en,mn,dn FROM emp e,dept d,emp m WHERE

e.empno=7369 AND e.mgr=m.empno AND e.deptno=d.deptno ;

DBMS_OUTPUT.put_line('编号为: '||eno||'雇员的姓名为:
'||en) ;

DBMS_OUTPUT.put_line('编号为: '||eno||'雇员的上级姓名为:
'||mn) ;

DBMS_OUTPUT.put_line('编号为: '||eno||'雇员所在的部门:
'||dn) ;

DBMS_OUTPUT.put_line(dept.deptno) ;

EXCEPTION

WHEN no_data_found THEN

DBMS_OUTPUT.put_line('没有此雇员') ;

END ;

/
说明:
• emp.empno%TYPE ;:表示以
emp 表中的 empno
字段的类型定义变量
• e.ename,m.ename,d.dname INTO en,mn,dn:一次可以同时放进去多个值
dept dept %rowtype ; 表示
dept 是一行数据,类似于
Hibernate 的 PO

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: