plsql入门
来源:互联网 发布:java分布式开发框架 编辑:程序博客网 时间:2024/06/03 21:24
PLSQL
什么是PL/SQL?
PL/SQL(Procedure Language/SQL)
PLSQL是Oracle对sql语言的过程化扩展
指在SQL命令语言中增加了过程处理语句(如分支、循环等),使SQL语言具有过程处理能力。(具有编程的能力)
**为什么要学习plsql?
1.将sql逻辑写在db层,效率更高—-数据库处理数据更专业,还不需要网络数据交换。
2.为存储过程、函数等打下基础,前提是学会plsql**
--面向过程的语言--declare --声明部分:没有变量,则declare可以省略 --你不需要变量声明,则不需要写任何东西BEGIN--程序体的开始:编写语句逻辑 --在控制台输出一句话:dbms_output相当于system.out类,内置程序包,put_line:相当于println()方法 dbms_output.put_line('Hello World'); --dbms_output.put('Hello World');end;--程序体的结束概念:程序包:dbms_output相当于java中的类(system.out),它是oracle自带的,内置.调用程序包:dbms_output.put_line(‘Hello World!’)相当于java的方法
plsql 程序结构
PL/SQL可以分为三个部分:声明部分、可执行部分、异常处理部分。[delare] 声明部分(变量、游标、例外)begin 逻辑执行部分(DML语句、赋值、循环、条件等)[exception] 异常处理部分(when 预定义异常错误 then)end;/最简单的PL/SQL:Begin Null;End;/注意:在SQLPLUS中,PLSQL执行时,要在最后加上一个 “/”
plsql 变量
声明部分可以定义变量,定义变量的语法:变量名 [CONSTANT] 数据类型;普通数据类型(char, varchar2, date, number, boolean, long):varl char(15);merried boolean := true;psal number (7,2)特殊变量类型(引用型变量、记录型变量):my_name emp.ename%type my_name 与emp的ename的类型一样。emp_rec emp%rowtype
**在ORACLE中有两种赋值方式:
1,直接赋值语句 :=
2, 使用select …into … 赋值:(语法;select 值 into 变量)**
打印几个变量的值,几个变量的值分别采用两种不同的赋值方法:--打印两个变量的值,两个变量的值分别采用两种不同的赋值方法:DECLARE--声明变量 --姓名 v_name VARCHAR(20) :='Bo';--声明的时候直接赋值 --薪资 v_sal NUMBER; --工作地点 v_local VARCHAR(200);BEGIN --开始程序逻辑 --程序运行时赋值 --方法一:--直接赋值 v_sal :=9999; --方法二:语句赋值 SELECT '上海' INTO v_local FROM dual; --输出打印 dbms_output.put_line('姓名:'||v_name||',薪资:'||v_sal||',工作地点:'||v_local); END;--程序结束plsql中有两种不同的赋值方法:一种是: 直接用:=来赋值另一种:select 值 into 变量 from 表名。
**引用类型的好处:
1,使用普通变量定义方式,需要知道表中列类型,而使用引用类型,不需要考虑列的类型
普通变量值过小报错:**
2,使用引用类型,当列中的数据类型发生改变,不需要修改变量的类型。而使用普通方式,当列的类型改变时,需要修改变量的类型
使用%TYPE是非常好的编程风格,因为它使得PL/SQL更加灵活,更加适应于对数据库定义的更新**。
记录型变量记录型变量,代表一行,可以理解为数组,里面元素是每一字段值。%rowtype 引用一条(行)记录的类型 例:v_emp emp%rowtype;含义:v_emp 变量代表emp表中的一行数据的类型,它可以存储emp表中的任意一行数据。记录型变量分量的引用方式:v_emp.ename :="admin"查询并打印7839号(老大)员工的姓名和薪水--查询并打印7839号(老大)员工的姓名和薪水DECLARE --记录型变量 v_emp emp%ROWTYPE;--该变量可以存储emp表中的一行记录BEGIN --赋值 --默认情况下,必须是全字段赋值 SELECT * INTO v_emp FROM emp WHERE empno=7839; --打印 dbms_output.put_line('7839号员工的姓名是:'||v_emp.ename||',薪资'||v_emp.sal);END;如果有一个表,有100个字段,那么你程序如果要使用这100字段话,如果你使用引用型变量一个个声明,会特别麻烦,那么你可以考虑记录型变量
if语句
判断emp表中记录是否超过20条,,10-20之间,10以下打印一句--判断emp表中记录是否超过20条,,10-20之间,10以下打印一句DECLARE --用来存储数量 v_count NUMBER;BEGIN --查询数量赋值 SELECT COUNT(1) INTO v_count FROM emp ; --判断 IF v_count>20 THEN dbms_output.put_line('记录数超过20条:'||v_count); ELSIF v_count BETWEEN 10 AND 20 THEN dbms_output.put_line('记录数在10到20条之间:'||v_count); ELSE dbms_output.put_line('记录数不足10条:'||v_count); END IF; END;
循环
在ORACLE中有三种循环:Loop 循环 EXIT WHEN...条件 end loop;While()…loop 条件判断循环For 变量 in 起始..终止 Loop 这里我建议只记忆一种写法:记住loop的写法【示例】打印数字1-10--打印数字1-10DECLARE --声明一个变量 v_num NUMBER :=1;BEGIN --循环并打印 LOOP EXIT WHEN v_num>10; --退出循环条件 dbms_output.put_line(v_num); --递增 --v_num++;--不支持 v_num :=v_num+1; END LOOP;END;
游标
什么是游标
**游标(Cursor),也称之为光标,从字面意思理解就是游动的光标。
游标是映射在结果集中一行数据上的位置实体。
游标是从表中检索出结果集,并从中每次指向一条记录进行交互的机制。**
游标的主要作用:用于临时存储一个查询返回的多行数据(结果集),通过遍历游标,可以逐行访问处理该结果集的数据。
(显示)游标的使用方式:声明—>打开—>读取—>关闭
语法游标声明:CURSOR 游标名 [ (参数名 数据类型[,参数名 数据类型]...)] IS SELECT 语句;【示例】无参游标:cursor c_emp is select ename from emp;有参游标:cursor c_emp(v_deptno emp.deptno%TYPE) is select ename from emp where deptno=v_deptno;游标的打开:Open 游标名(参数列表)【示例】open c_emp;-- 打开游标执行查询游标的取值:fetch 游标名 into 变量列表|记录型变量【示例】fetch c_emp into v_ename;--取一行游标的值到变量中,注意:v_ename必须与emp表中的ename列类型一致。(v_ename emp.ename%type;)游标的关闭:close 游标名【示例】close c_emp;--关闭游标释放资源解释游标获取数据的基本原理:游标刚open的时候,指针结果集的第一条记录之前。游标与结果集的区别是什么?游标是有位置的。fetch会向前游动,并获取游标的位置的内容。游标的属性游标的属性 返回值类型 说明%ROWCOUNT 整型 获得FETCH语句返回的数据行数%FOUND 布尔型 最近的FETCH语句返回一行数据则为真,否则为假%NOTFOUND 布尔型 与%FOUND属性返回值相反,代表游标结束%ISOPEN 布尔型 游标已经打开时值为真,否则为假创建和使用【示例】使用游标查询emp表中所有员工的姓名和工资,并将其依次打印出来。【引用型变量获取游标的值】:--使用游标查询emp表中所有员工的姓名和工资,并将其依次打印出来。DECLARE --声明一个游标 CURSOR C_EMP IS SELECT ENAME, SAL FROM EMP; --引用型变量 V_ENAME EMP.ENAME%TYPE; --姓名 V_SAL EMP.SAL%TYPE; --工资BEGIN --打开游标,执行查询 OPEN C_EMP; --使用游标,循环取值 LOOP --获取游标的值放入变量的时候,必须要into前后要对应(数量和类型) FETCH C_EMP INTO V_ENAME, V_SAL; EXIT WHEN C_EMP%NOTFOUND; --输出打印 DBMS_OUTPUT.PUT_LINE('员工的姓名:' || V_ENAME || ',员工的工资' || V_SAL); END LOOP;CLOSE c_emp ;--关闭游标,释放资源 END;【使用记录型变量存值】:--使用游标查询emp表中所有员工的姓名和工资,并将其依次打印出来。DECLARE --声明一个游标 CURSOR C_EMP IS SELECT * FROM EMP; --记录型变量 v_emp emp%ROWTYPE;BEGIN --打开游标,执行查询 OPEN C_EMP; --使用游标,循环取值 LOOP --获取游标的值放入变量的时候,必须要into前后要对应(数量和类型) FETCH C_EMP INTO v_emp; EXIT WHEN C_EMP%NOTFOUND; --输出打印 DBMS_OUTPUT.PUT_LINE('员工的姓名:' || v_emp.ename || ',员工的工资' || v_emp.sal); END LOOP;CLOSE c_emp ;--关闭游标,释放资源 END;带参数的游标【示例】使用游标查询并打印某部门的员工的姓名和薪资,部门编号为运行时手动输入。-- Created on 2015/5/5 by BOBO ---查询10号部门的员工的姓名和薪资declare --定义游标--带参数的游标:需要定一个形式参数 CURSOR c_emp(v_deptno emp.deptno%TYPE) IS SELECT ename,sal FROM emp WHERE deptno=v_deptno ; --声明变量 v_ename emp.ename%TYPE; v_sal emp.sal%TYPE;BEGIN --用 --打开游标 OPEN c_emp(10); --循环fetch LOOP --取出数据 FETCH c_emp INTO v_ename,v_sal;--退出条件 EXIT WHEN c_emp%NOTFOUND; --打印--写任何的逻辑 dbms_output.put_line('姓名:'||v_ename||',薪资:'||v_sal); END LOOP; --关闭 CLOSE c_emp;end;--使用游标查询并打印某部门的员工的姓名和薪资,部门编号为运行时手动输入。DECLARE --声明一个带参数的游标 CURSOR C_EMP(v_deptno emp.deptno%TYPE) IS SELECT * FROM EMP WHERE deptno=v_deptno; --记录型变量 v_emp emp%ROWTYPE;BEGIN --打开游标,执行查询 --打开游标的时候需要传入参数 OPEN C_EMP(20); --使用游标,循环取值 LOOP --获取游标的值放入变量的时候,必须要into前后要对应(数量和类型) FETCH C_EMP INTO v_emp; EXIT WHEN C_EMP%NOTFOUND; --输出打印 DBMS_OUTPUT.PUT_LINE('员工的姓名:' || v_emp.ename || ',员工的工资' || v_emp.sal); END LOOP; CLOSE c_emp ;--关闭游标,释放资源 END;
1 1
- PLSQL入门
- plsql入门
- PLSQL入门第一章
- oracle之PLSQL入门
- plsql快速入门
- plsql 编程入门基础
- PLSQL编程入门
- plsql从入门到精通
- Java 调用Oracle的PLSQL入门
- PLSQL
- PLSQL
- PLSQL
- plsql
- plsql
- plsql
- plsql
- plsql
- PLSQL
- 1050. 螺旋矩阵(25)
- Oracle scott账户被锁定,scott默认密码,sys,system默认密码
- 数据结构 中缀转后缀 后缀转二叉树并打印 后缀计算值
- fopen/open,fread/read,fwrite/write的区别
- CJOJ 1995 中国剩余定理(HDU1788)
- plsql入门
- 含有数值字符串的转换
- 解决在window的命令行中无法打开mysql
- RxAudio一款基于Rxjava实现的android音频设备通信库
- [Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型
- js改变文本字体大小及颜色,先放大后缩小,10次循环
- 集中式vs分布式
- 1059. C语言竞赛(20) python篇
- (ssl1624)小萨的烦恼