oracle PL、SQL(概念)
一.PL/SQL简介。
Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控制为一体的强大语言,PL/SQL不但支持更多的数据类型,拥有自身的变量申明,赋值语句,而且还有条件,循环等流程控制语句。过程控制结构与SQL数据处理能力无缝的结合形成了强大的编程语言,可以创建过程和函数以及程序包。
二.优点:
1,支持SQL
SQL是访问数据库的标准语言,通过SQL命令,用户可以操纵数据库的数据。
PL/SQL支持所有的SQL数据操纵命令、游标控制命令、事务控制命令、SQL函数、运算符和伪列。
2,支持面向对象编程
PL/SQL支持面向对象的编程,在PL/SQL中可以创建类型,可以对类型进行继承,可以在子程序中重载方法等。
3,更好的性能
SQL是非过程语言,只能一条一条的执行,而PL/SQL把一个PL/SQL统一进行编译后执行,同时还可以把编译好的PL/SQL块存储起来,以备重用,减少了应用程序和服务器之间的通信时间,所以PL/SQL是高效而快速的。
4,可移植性
使用PL/SQL编写的应用程序语言,可以移植到任何操作平台的ORACLE服务器,同时还可以编写可移植程序库,在不同环境中使用。
5,安全性
可以通过存储过程对客户机和服务器之间的应用程序逻辑进行分割,这样可以限制对ORACLE数据库的访问,数据库还可以授权和撤销其他用户的访问权利。
--1,PL/SQL--包含 过程、函数、触发器、...
PL--> procedural language 过程语言 --查看错误信息能够更详细的指出错所在
show error ----1.1、第一个存储过程,简单定义(相当于一个静态方法)
--(1)创建一个存储过程
create procedure proc_holleword
is
begin
dbms_output.put_line('Hello everyone !');
end;
--(2)显示输出内容
set serveroutput on;
--(3)执行存储过程(二选一)
execute procedurename;
exec procedurename; ---JAVA程序调用存储过程需要用call ----1.2、第二个存储过程(简单案例)
create or replace procedure proc_insertEmp
is
begin
insert into emp values( 9901,'WANGQIANG' ,'CLERK');
insert into emp values( 9902,'JIALIUL' ,'CLERK');
insert into emp values( 9903,'ZHAOQI' ,'CLERK');
end; --2,编写规范
编写规范n
2.1、注释;
单行注释 --Sql 代码
多行注释 /*...* /来划分 2.2、标志符号的命名规范
1).当定义变量时,建议用v_作为前缀v_sal
2).当定义常量时,建议用c_作为前缀c_rate
3).当定义游标时,建议用_cursor 作为后缀emp_cursor
4).当定义例外时,建议用e_作为前缀e_error --3,代码块
declare --定义声明
begin --程序开始
exception --异常
end; ---程序结束 ---- 案例 ---从对话框中输入一个员工编号,然后打印出该员工的姓名和工资
declare
v_ename varchar2(30);
v_sal number(8,2);
begin
-- '&'开头的变量 是指从对话框输入值---
select ename,sal into v_ename,v_sal from emp where empno=&eno;
dbms_output.put_line('员工姓名:'||v_ename||' 工资:'||v_sal);
end;
/ --4,exception 的使用案例,
declare
v_ename varchar2(30);
v_sal number(8,2);
begin
select ename,sal into v_ename,v_sal from emp where empno=&eno;
dbms_output.put_line('员工姓名:'||v_ename||' 工资:'||v_sal);
exception
when no_data_found then
dbms_output.put_line('该员工号不存在,请重新输入员工号');
end;
/ --5,存储过程----带参数--- ----根据输入的员工编号,新的姓名,新的工资,去修改姓名和工资--------
create procedure proc_updateEmp(v_empno number,v_ename varchar2 ,v_sal number)
is
begin
update emp set ename=v_ename ,sal=v_sal where empno=v_empno;
end;
/
----执行--(传入参数)------------------
exec proc_updateEmp(9900,'LAOWANG',10000); --6,JAVA程序调用 存储过程 -------------------------------
/*
建立一个Java程序
加入oracle的驱动包ojdbc6.jar【app-administrator-product-11.2.0-dbhome_1-jdbc-lib-ojdbc6.jar】 try {
Class.forName("oracle.jdbc.OracleDriver");
String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
Connection conn=DriverManager.getConnection(url, "scott", "tiger");
//调用格式
CallableStatement cs=conn.prepareCall("{call proc_updateEmp(?,?,?)}");
cs.setInt(1, 9903);
cs.setString(2, "阿甘");
cs.setDouble(3, 9988.50);
cs.execute();
cs.close();
conn.close();
} catch (Exception e) {
}
*/ --7,条件分支语句-------------------------------------
if .. then .. end if;
if .. then .. else .. end if;
if .. then .. elsif .. then .. else .. end if ; ----案例问题1:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该员工工资增加10%。
create or replace procedure proc_updateSalByEname(v_ename varchar2)
is
v_sal emp.sal%type;---取得emp表中的sal栏目的数据类型
begin
select sal into v_sal from emp where ename=v_ename;--根据名字查询
if v_sal<2000 then
update emp set sal=sal*1.1 where ename=v_ename;
end if;
end;
/
----根据传入参数(名字)执行
exec proc_updateSalByEname('SMITH'); ----案例问题2:编写一个过程,可以输入一个雇员名,如果该雇员的补助不是0 就在原来的基础上增加100;如果补助为0 就把补助设为200;
create or replace procedure proc_updateCommByEname(v_ename varchar2)
is
v_comm emp.comm%type; --声明一个变量,并设置类型为emp中comm的类型
begin
--查询出comm后赋值给一个临时变量
select comm into v_comm from emp where ename=v_ename;
if nvl(v_comm,0) >0 then
update emp set comm=comm+100 where ename =v_ename;
else
update emp set comm=200 where ename=v_ename;
end if;
end;
/ ----案例问题3:编写一个过程,可以输入一个雇员编号,如果该雇员的职位是PRESIDENT就给他的工资增加1000,如果该雇员的职位是MANAGER 就给他的工资增加500,其它职位的雇员工资增加200
create or replace procedure proc_updateSalByJob(v_ename varchar2)
is
v_job emp.job%type;
begin
select job into v_job from emp where ename=v_ename;
if v_job='PRESIDENT' then
update emp set sal=sal+1000 where ename=v_ename;
elsif v_job='MANAGER' then
update emp set sal=sal+500 where ename=v_ename;
else
update emp set sal=sal+200 where ename=v_ename;
end if;
end;
/ --8,loop循环---------------------------------------
loop .. exit when .. num+ end loop; ----案例:建立一张stemp表 id sname ,请插入100条数据
create table stemp(id number(8),sname varchar2(20)); declare
v_num number(8):=1; --声明变量并赋值【 := 赋值符号】
begin
loop
insert into stemp values(v_num, 'sname'||v_num );
exit when v_num=100; --条件
v_num:=v_num+1;
end loop;--结束循环
end;
/ --8.2、while循环--------------------------------
while .. loop .......... num+ end loop; ----案例
declare
v_num number(8):=1;
begin
while v_num<=100 loop
insert into stemp values(v_num, 'sname'||v_num );
v_num:=v_num+1;
end loop;
end;
/ --8.3、for 循环--- reverse:反序-----------------
for v in 区间 loop ... end loop;
for v in reverse 区间 loop ... end loop; ----案例
begin
for v_num in 1..1000 loop
insert into stemp values(v_num, 'sname'||v_num );
end loop;
end;
/ ----案例
begin
for v_num in reverse 1..1000 loop
insert into stemp values(v_num, 'sname'||v_num );
end loop;
end;
/
oracle PL、SQL(概念)的更多相关文章
- ORACLE PL/SQL编程详解
ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...
- [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)
原文:[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不殆) [推荐]ORACLE PL/SQL编程之五: 异常错误处理(知已知彼.百战不殆) 继上三篇:ORACLE PL/S ...
- ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)
原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!) 继上篇:ORACLE P ...
- [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)
原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL ...
- 【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航
原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人 ...
- [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)
原文:[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) [推荐]ORACLE PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下 ...
- ORACLE PL/SQL编程详解(转)
原帖地址:http://blog.csdn.net/chenjinping123/article/details/8737604 ORACLE PL/SQL编程详解 SQL语言只是访问.操作数据库的语 ...
- Oracle PL/SQL入门之慨述
Oracle PL/SQL入门之慨述 一.PL/SQL出现的目的 结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语言,它属于第四代语言( ...
- oracle pl/sql 程序设计 历史笔记整理
20131016 周三 oracle pl/sql 程序设计 第2章 创建并运行pl/sql代码 sqlplus yjkhecc/yjkhecc@10.85.23.92:1521/orcl 在java ...
- [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)
原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...
随机推荐
- 初探linux子系统集之led子系统(三)【转】
本文转载自:http://blog.csdn.net/eastmoon502136/article/details/37822837 世界杯结束了,德国战车夺得了大力神杯,阿根廷最终还是失败了.也许3 ...
- 使用pyinstaller----python转exe
自己写了一个定时清理日志的脚步,因为服务器是Windows,不想部署Python环境,就考虑到转成exe文件即可. 从网上了解到python转exe方法比较多,我选用了pyinstaller,过程比较 ...
- 【HNOI 2002】 营业额统计
[题目链接] 点击打开链接 [算法] 观察式子 : 最小波动值 = min{|该天营业额 - 之前某天的营业额|} = min{该天营业额 - 该天营业额的前驱,该天营业额的后继 - 该天营业额} 用 ...
- jsp实现文件上传(二)用cos组件实现文件上传
jsp表单 <%@ page language="java" pageEncoding="utf-8"%> <html> <hea ...
- thinkpad开机引导方式变成PCI LAN选项解决
问题:开机的引导方式变成[PCI LAN],并且前面有一个小箭头,无法正常启动加载.在BIOS中重置调整启动顺序也无法解决.无法进入U盘启动盘 1.首先开机按F12进入BIOS,选择 APP Menu ...
- git提交历史不显示自己账户的问题
其实这个问题本身也不大好描述.还是上图好了 问题就如同途中倒数第二次提交.明明就是我提交的,却不显示我的账号.个人页面也不反映这次提交. 后来发现问题所在,要想正确显示,必须要把对这个项目的邮箱设 ...
- SCUT - 290 - PARCO的因数游戏 - 博弈论
https://scut.online/p/290 一个 N 个数的取数游戏,Kaildls 和 Parco 轮流操作,每次操作从 N 个数中取一个数 y 并把他变成 y-x(满足 x | y 且x ...
- hdu2767(图的强连通)
//题意:问需要添加几条边使得这张图成为每个点都等价(强连通图) 我们先把图中的强连通分量缩点 可能他本身就是满足条件,那么直接输出0 经过缩点后,就可以把强连通分量看成一个个独立的点,在这张图上搞一 ...
- bzoj 1823: [JSOI2010]满汉全席【2-SAT+tarjan】
因为每种食材只有一份,所以两个评委的如果有要求同一种食材的两种做法就是不可行,用这个来建立2-SAT模型 然后跑tarjan判可行性即可 #include<iostream> #inclu ...
- bzoj 4197: [Noi2015]寿司晚宴【状压dp】
一个数内可能多个的质因数只有小于根号n的,500内这样的数只有8个,所以考虑状压 把2~n的数处理出小于根号500的质因数集压成s,以及大质数p(没有就是1),然后按p排序 根据题目要求,拥有一个质因 ...