PL/SQL块基本概念及示例

来源:互联网 发布:linux挂载文件夹到mnt 编辑:程序博客网 时间:2024/05/16 12:25

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

原创粉丝点击