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
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
相关文章推荐
- 在PL/SQL 学习当中 触发器的概念以及示例
- PL/SQL编程基本概念
- 源码-PL/SQL从入门到精通-第二章-PL/SQL基本概念-Part 1
- oracle(02): PL/SQL基本概念,关系运算符,顺序结构,分支结构,循环结构
- SQL关于联合的基本概念和示例
- 源码-PL/SQL从入门到精通-第二章-PL/SQL基本概念-Part 3(完)
- 源码-PL/SQL从入门到精通-第二章-PL/SQL基本概念-Part 2
- oracleday15(授予对象权限级联回收 角色 pl/sql基本概念)
- PL/SQL几个基本概念
- Oracle学习:PL_SQL——基本概念
- PL/SQL的基本概念
- PL/SQL 学习笔记--PLSQL基本概念
- PL-SQL基本概念
- Oracle PL/SQL开发入门(第二弹:PL/SQL基本概念)
- Oracle数据库的基本概念及PL/SQL(DDL)
- pl/sql之基本概念和块的结构
- 存储过程与PL/SQL基本用法
- (翻译)《Expert .NET 2.0 IL Assembler》 第一章 简单示例 1.1 CLR的基本概念
- Oracle PL/SQL开发利器-Toad应用总结(一)-PL/SQL Program基本编写、调试
- SQLite(1)--SQL基本概念