9.windows-oracle实战第九课--plsql
一、oracle的pl/sql的概念
pl/sql是oracle在标准的sql语言上的扩展,不仅允许嵌入sql,还允许定义变量和常量,允许使用条件语句和循环语句,允许使用例外处理各种错误,这样使得它的功能更强大。
1.过程、函数、触发器是pl/sql编写的
2.过程、函数、触发器是在oracle中
3.pl/sql是非常强大的数据库过程语言
4.过程、函数可以在java程序中调用
优点:增加程序的程序化编程、减少网络传输等、提高安全性、应用程序的运行性能
缺点:移植性不好
二、pl/sql的编程语言(包括函数、过程、触发器、包等)
简单例子:编写一个存储过程,该过程可以向某表中添加记录
create or replace procedure sp_prol is
begin
insert into mytest values('djw','m124');
end;
/
show error 查看错误

1) exec 过程名(参数值1,参数值2....)
2)call 过程名(参数值1,参数值2....)
1.pl/sql的编程最小的基础单位是块,用块可以编写过程、函数、触发器、包
2.编写规范:
定义变量为v_
定义常量为c_
定义游标_cursor
定义例外e_
3.块由3个部分构成:定义部分(declear),执行部分(begin)、例外部分(exception)
实例:
1.dbms_output是oracle所提供的包(类似java的开发包),该包包含一些过程,put_line就是dbms_output包的一个过程。
set serveroutput on;
begin
dbms_output.put_line('hello,word');
end;
/
2.写一个块如下,可以输入变量:
declare
v_name varchar2(5);
begin
select ename into v_name from emp where empno=&no;
dbms_output.put_line('雇员名'||v_name);
end;
/
3.写一个块如下,可以输入变量且输入例外:
declare
v_name varchar2(5);
begin
select ename into v_name from emp where empno=&no;
dbms_output.put_line('雇员名:'||v_name);
exception
when no_data_found then
dbms_output.put_line('朋友,你的编号输入有误');
end;
/
4.过程:过程用于执行特定的操作,当建立过程时,既可以指定输入参数(in),也可以指定输出参数(out).通过在过程中使用输入参数,可以将数据传递到执行部分,通过在过程中输出参数,可以将执行部分的数据传递到应用环境。
实例:
1)请写过程,输入雇员的名,新的工资,修改雇员的工资
create procedure sp_pro3(spName varchar2,newSal number) is
begin
update emp set sal=newSal where ename=spName;
end;
/
2)如何调用过程两种方法
exec \call
5.函数:函数用于返回特定的数据,当建立函数时,在函数头部必须包含return子句,而在函数体内必须return语句返回的数据,我们可以使用create function来建立函数

6.包:包用于在逻辑上组合过程和函数,由包规范和包体组成
----创建包sp_package
create package sp_package is
procedure update_sal (name varchar2,sal number);
function annual_income(name varchar2) return number;
end;
--创建具体的包体sp_package
create package body sp_package is
procedure update_sal(name varchar2,sal number)
is
begin
update emp set sal=sal where ename=name;
end;
function annual_income(name varchar2)
return number is
annual_salary number;
begin
select sal*12+nvl(comm,0) into annual_salary from emp
where ename=name;
return annual_salary;
end;
end;
/
7.定义和使用变量
标量:
1)v_name varchar2(10);
2)v_sal number(6,2);
3)v_sal2 number:=5.4---表示赋值,初始值
4)v_hiredate date
5) v_valid boolean not null default false;
存放最普通的变量:
1)declare
c_tax_rate number(3,2):=0.03;
v_ename varchar2(5);
v_sal number(7,2);
v_tax_sal number(7,2);
begin
select ename,sal into v_ename,v_sal from emp where empno=&no;
v_tax_sal:=v_sal*c_tax_rate;
dbms_output.put_line('姓名是:'||v_ename||'工资:'||v_sal||'交税'
||v_tax_sal);
end;
/
2)declare
c_tax_rate number(3,2):=0.03;
v_ename emp.ename%type;
v_sal emp.sal%type;
v_tax_sal number(7,2);
begin
select ename,sal into v_ename,v_sal from emp where empno=&no;
v_tax_sal:=v_sal*c_tax_rate;
dbms_output.put_line('姓名是:'||v_ename||'工资:'||v_sal||'交税'
||v_tax_sal);
end;
复合变量:用于存放多个值的变量
declare
type emp_record_type is record(
name emp.ename%type,
salary emp.sal%type,
title emp.job%type);
sp_record emp_record_type;
begin
select ename,sal,job into sp_record from emp where empno=7788;
dbms_output.put_line('员工名'||emp_record.name);
end;
参照变量:
参照变量是指用于存放数值指针的变量,通过使用参照变量,可以使得应用程序共享相同对象,从而降低占用的空间,在编写pl/sql程序时,可以使用游标变量和对象类型变量两种参照变量类型。
1)请使用pl/sql编写一个块,可以输入部门号,并显示该部门
set serveroutput on;
declare
--定义游标
type sp_emp_cursor is ref cursor;
--定义一个游标变量
test_cursor sp_emp_cursor;
--定义变量
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
open test_cursor for select ename,sal from emp where deptno=&no;
loop
fetch test_cursor into v_ename,v_sal;
exit when test_cursor%notfound;
dbms_output.put_line('名字'||v_ename||'工资:'||v_sal);
end loop;
end;
if语句的用法
create or replace procedure sp_pro6(spName varchar2(10)) is
v_sal emp.sal%type
begin
select sal into v_sal from emp where ename=spName;
if v_sal<2000 then
update emp set sal=sal+sal*10% where ename=spName;
end if;
end;
3种循环(for循环省略)
create or replace procedure sp_pro6(spName varchar2) is
v_num number:=1;
begin
loop
insert into users values(v_num,spName);
exit when v_num=10;
v_num:=v_num+1;
end loop;
end;
--
create or replace procedure sp_pro6(spName varchar2) is
v_num number:=1;
begin
while v_num<=20 loop
insert into users values(v_num,spName);
v_num:=v_num+1;
end loop;
end;
自定义例外:

视图:视图是一个虚拟表,其内容由查询定义,同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。(视图是随表的变化而变化)
1)视图不占磁盘空间
2)视图有利于提高安全性,不同用户看到的视图不同
3)视图不能增加索引
4)视图可以简化复杂查询
5)视图和视图也可以进行关联查询
创建视图:
create view 视图名 as select xxx with read only
9.windows-oracle实战第九课--plsql的更多相关文章
- Tensorf实战第九课(自编码AutoEncoder)
本节我们将了解神经网络进行非监督形式的学习,即autoencoder自编码 假设图片经过神经网络后再输出的过程,我们看作是图片先被压缩然后解压的过程.那么在压缩的时候,原有的图片质量被缩减,解压时用信 ...
- 【C语言探索之旅】 第二部分第九课: 实战"悬挂小人"游戏 答案
内容简介 1.课程大纲 2.第二部分第九课: 实战"悬挂小人"游戏 答案 3.第二部分第十课预告: 安全的文本输入 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题, ...
- 解决Windows x64bit环境下无法使用PLSQL Developer连接到Oracle DB中的问题
本文是原创文章,转载请注明出处: http://blog.csdn.net/msdnchina/article/details/46416455 解决Windows x64bit环境下无法使用PLSQ ...
- 【C语言探索之旅】 第一部分第九课:函数
内容简介 1.课程大纲 2.第一部分第九课:函数 3.第一部分第十课预告: 练习题+习作 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. ...
- Windows10 下安装 oracle 客户端,安装 plsql 破解并实现汉化
一,软件准备 1,win10 操作系统 2,oracle_11g_r2 client 这里是 64 位的软件 3, plsql 11.0.6 这里我们下载 64 的,32 位操作系统现在已经很少了, ...
- NeHe OpenGL教程 第九课:移动图像
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- oracle在SQLPLUS 和PLSQL建 job 的区别
oracle在SQLPLUS 和PLSQL建 job 的区别 //建立job variable test_job_really number; begin dbms_job.submit(:test_ ...
- 有奖试读—Windows PowerShell实战指南(第2版)
为什么要学PowerShell? Windows用户都已习惯于使用图形化界面去完成工作,因为GUI总能轻易地实现很多功能,并且不需要记住很多命令.使得短时间学会一种工具成为可能. 但是不幸的是,GUI ...
- Python第九课学习
Python第九课学习 数据结构: 深浅拷贝 集合set 函数: 概念 创建 参数 return 定义域 www.cnblogs.com/yuanchenqi/articles/5782764.htm ...
随机推荐
- UVA - 10886 Standard Deviation (标准差)(数论)
题意:下面是一个随机数发生器.输入seed的初始值,你的任务是求出它得到的前n个随机数标准差,保留小数点后5位(1<=n<=10000000,0<=seed<264). 分析: ...
- java集合对象实现原理
1.集合包 集合包是java中最常用的包,它主要包括Collection和Map两类接口的实现. 对于Collection的实现类需要重点掌握以下几点: 1)Collection用什么数据结构实现? ...
- CSU2004:Finding words(含指定不相交前后缀的模式串计数)
题:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=2004 题意:给定n个模式串,m个询问,每个询问是“前缀+‘*’+后缀 ”的组合的串S,输出 ...
- Java基础之反射、注解、代理
反射 笔者对反射的理解就是解剖class文件,来进行一系列操作. Class类 获取Class类实例的三种方式: 类名.class 对象.getClass() static Class forName ...
- Mybatis实现增删改查(二)
1. 准备 请先完成Mybatis基本配置(一)的基本内容 2. 查询多条商品信息 1)在com.mybatis.dao.PartDao中增加接口函数 public List<PartInfo& ...
- SQLite数据库以及增删改查的案例
Android使用开源的与操作系统无关的SQL数据库——SQLite 一:在命令行下创建数据库: 1.启动模拟器后,打开命令行,执行adb shell 2.进入所在工程目录 3.执行sqlite3 m ...
- vue/cli创建项目过程
①vue create demo vue版本:3.9.3,node版本:12.8.0 ②Manually select features ③Bab ...
- mint linux的几个问题
刚开机登录时, 键盘不停的输入同一个字符 发现在虚拟机里安装的系统没有问题, 因此怀疑配置有冲突, 新建一个用户果然能解决问题 解决方法: 把 主目录下, 隐藏的配置目录删除, 重新登录后再配置. 4 ...
- 在excel中评估模型性能
一直在用的结果, 从代码中整理出来. 评分卡模型的结果一般在excel中即可计算完成. 下面是在number中计算评分卡模型的性能(KS/AUC), 表格中百分数省略%
- potplayer记住播放进度
(右键——选项)F5——播放——记忆视频播放位置