PLSQL(1)
PLSQLl编程
plsql是Oracle在标准的sql语言上的扩展
特点:可以在数据库中定义变量,常量,还可以使用条件语句和判断语句以及异常等
PLSQL程序组成部分
PLSQL由 声明部分、执行部分、异常处理部分组成
DECLARE -- 声明部分
-- 在此声明pl/sql用到的变量
BEGIN -- 执行
-- 在此写执行语句
EXCEPTION
-- 执行异常
END;
简单的PLSQL块
DECLARE -- 声明并赋值 变量名 类型 := 值; := 表示赋值 = 表示条件判断
V_NUM NUMBER := 10; -- PLSQL在声明变量时在前面加v_ 代表变量
BEGIN
V_NUM := V_NUM + 1; -- 对V_NUM加1
DBMS_OUTPUT.put_line('NUM' || V_NUM); -- 对结果进行输出
END;
SELECT...INTO、%TYPE、 %ROWTYPE、常量
SELECT...INTO...
[1] 声明变量赋值为员工表中Smith的员工编号 SELECT ...INTO
SELECT...INTO可以将表中查询到的数据赋值给变量V_NUM
DECLARE
V_NUM NUMBER; -- 声明
BEGIN
SELECT EMPNO INTO V_NUM FROM EMP WHERE ENAME = 'SMITH';
DBMS_OUTPUT.put_line('NUM' || V_NUM);
END;
%TYPE
[2] 声明变量,变量的类型是scott用户下emp表empno字段的字段类型 %TYPE
DECLARE
V_NUM SCOTT.EMP.EMPNO%TYPE; -- 声明类型是SCOTT用户下的EMP表的EMPNO列对应的类型
BEGIN
SELECT EMPNO INTO V_NUM FROM EMP WHERE ENAME = 'SMITH';
DBMS_OUTPUT.put_line('NUM' || V_NUM);
END;
%ROWTYPE
[3] 取一行数据 %rowtype
DECLARE
V_EMPROW SCOTT.EMP%ROWTYPE; -- 拿到SCOTT用户下的EMP表的所有列数据的类型
BEGIN
SELECT * INTO V_EMPROW FROM EMP WHERE ENAME = 'SMITH';
DBMS_OUTPUT.put_line(V_EMPROW.ENAME || V_EMPROW.EMPNO);
END;
常量
DECLARE
-- 声明
C_PI CONSTANT NUMBER := 3.1415; -- CONSTANT: 常量,一旦设定,不能改变 命名规范:常量前面加C
V_R NUMBER := 20;
V_AREA NUMBER;
BEGIN
V_AREA := C_PI*V_R*V_R;
DBMS_OUTPUT.put_line('圆的面积:' || V_AREA);
END;
判断语句
IF判断
DECLARE
V_SCORE NUMBER;
BEGIN
V_SCORE := '&请输入成绩'; -- &表示输入
IF(V_SCORE >= 90) THEN
DBMS_OUTPUT.PUT_LINE('去玩游戏');
ELSIF (V_SCOE >= 80) THEN
DBMS_OUTPUT.PUT_LINE('去报补习班');
ELSIF (V_SCORE >= 70) THEN
DBMS_OUTPUT.PUT_LINE('去报两个补习班');
ELSE
DBMS_OUTPUT.PUT_LINE('去写作业');
END IF;
END;
SWITCH判断
DECLARE
V_SCORE NUMBER;
BEGIN
V_SCORE := '&请输入成绩';
CASE
WHEN V_SCORE > 90 THEN DBMS_OUTPUT.PUT_LINE('去玩游戏');
WHEN V_SCORE > 80 THEN DBMS_OUTPUT.PUT_LINE('去报补习班');
WHEN V_SCORE > 70 THEN DBMS_OUTPUT.PUT_LINE('去报两个补习班');
ELSE DBMS_OUTPUT.PUT_LINE('去写作业');
END CASE;
END;
循环结构
LOOP循环
-- 要求一个变量,每次循环减1,并输出结果 ,当变量小于3时,退出循环
DECLARE
V_COUNT NUMBER := 10;
BEGIN
LOOP -- 循环开始
V_COUNT := V_COUNT - 1; -- 减1
EXIT WHEN V_COUNT < 3; -- 当V_COUNT小于3时,退出循环
DBMS_OUTPUT.PUT_LINE(V_COUNT);
END LOOP; -- 结束循环
END; DECLARE
V_COUNT := 10;
BEGIN
LOOP
V_COUNT : V_COUNT - 1;
IF V_COUNT < 3 THEN
EXIT; -- 满足条件,退出循环
DBMS_OUTPUT.PUT_LINE(V_COUNT);
END LOOP;
END;
WHILE循环
-- 声明变量1,每次循环加1,并输出结果,当变量大于20的时候,退出循环
DECLARE
V_NUM NUMBER := 1; -- 声明变量并赋值
BEGIN
WHILE V_NUM < 20 LOOP -- 开始循环
DBMS_OUTPUT_PUT_LINE(V_NUM);
V_NUM := V_NUM + 1;
END LOOP; -- 结束循环
END;
FOR循环
-- 变量从0开始,变量等于10,每次循环+1,算循环的次数
DECLARE
V_NUM NUMBER := 10;
BEGIN
FOR I IN 0..10 LOOP -- 0..10表示0到10
V_NUM := V_NUM + 1;
DBMS_OUTPUT.PUT_LINE(V_NUM);
END LOOP;
END;
PLSQL之异常处理
使用EXCEPTION处理异常
DECLARE
V_TEMP NUMBER(4);
BEGIN
SELECT EMPNO INTO V_TEMP FROM EMP WHERE DEPNO = 100; -- 这里DEPNO等于10的列不只一条,而V_TEMP只能接收一条数据,所以会造成异常
EXCEPTION
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('返回的数据太多了');
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('没有数据啊');
WHEN OTHERS THEN -- 使用OTHERS表示其他异常
DBMS_OUTPUT.PUT_LINE('其他异常');
END;
自定义异常
DECLARE
V_NUMBER1 NUMBER; -- 声明变量
V_NUMBER2 NUMBER;
V_RESULT NUMBER;
E_NONUMBER EXCEPTION; -- 声明异常 PRAGMA EXCEPTION_INIT (E_NONUMBER, -6502); -- 将错误的代码跟自定义的异常名称绑定,并注册到系统里面
BEGIN
V_NUMBER1 := '& 请输入被除数';
V_NUMBER2 := '& 请输入除数';
V_RESULT := V_NUMBER1 / V_NUMBER2;
DBMS_OUTPUT.PUT_LINE(V_RESULT);
EXCEPTION
WHEN E_NONUMBER THEN
DBMS_OUTPUT.PUT_LINE('你输入的不是数字');
END;
建立错误日志表
-- 创建表
CREATE TABLE ERROLOG( --错误日志
ERROCODE NUMBER, -- 出错的编码 (ORA-XXXX)
ERROMSG VARCHAR2 (1024), --出错的信息
ERRODATE DATE --出错的时间
) -- 记录错误日志
DECLARE
V_DEPTNO DEPT.DEPTNO%TYPE := 10; --声明一个变量v_deptno 是dept 表的deptno类型
ERROCODE NUMBER; --出错的编码
ERROMSG VARCHAR2(1024); --出错的信息 BEGIN
DELETE FROM DEPT WHERE DEPTNO = 90;
DELETE FROM DEPT WHERE DEPTNO = V_DEPTNO;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK; --回滚到之前的状态
ERROCODE := SQLCODE; --打印错误编码
ERROMSG := SQLERRM; --打印错误的信息
INSERT INTO ERROLOG VALUES (ERROCODE,ERROMSG,SYSDATE);
COMMIT;
END;
PLSQL(1)的更多相关文章
- PLSql Oracle配置
1.安装Oracle客户端或者服务端 2.配置环境变量 <1>.一般如果安装了Oracle客户端或者服务端的话,在环境变种的Path中有Oracle的安装路径(计算机-属性-高级系统设置- ...
- plsql查询乱码问题解决
步骤一:新建变量,设置变量名:NLS_LANG,变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK,确定即可: 步骤二: 退出plsql,重新登陆plsql.输入sql语句,执 ...
- Oracle/PLSQL: ORA-06550
参考: http://blog.csdn.net/haiross/article/details/20612135 Oracle/PLSQL: ORA-06550 Learn the cause an ...
- [No00008F]PLSQL自动登录,记住用户名密码&日常使用技巧
配置启动时的登录用户名和密码 这是个有争议的功能,因为记住密码会给带来数据安全的问题. 但假如是开发用的库,密码甚至可以和用户名相同,每次输入密码实在没什么意义,可以考虑让PLSQL Develope ...
- 使用plsql创建表空间和用户
使用plsql创建oracle数据库的表空间和用户,并授权的语句.1.创建表空间:说明:datafile是指定创建位置,指向oracle数据库的默认位置:autoextend 设置容量为自动增长,50 ...
- plsql查找不到带中文的纪录
今天在另外的电脑用plsql查询不到带中文的记录 select * from test where name like '%测试%' 然后发现是系统的环境变量还没设置好所造成的.在系统变量加入如下变量 ...
- plsql配置远程连接数据库
1.先安装plsql.地址:http://pan.baidu.com/s/1hqGbATI 2. 解压缩 instantclient_11_2(这个客户端可以在网上找精简版的),找到以下路径 \i ...
- PLSQL操作excel
一.plsql数据库操作: 删除数据前备份一张表: create table plat_counter_def_bf as select * from plat_monitor_counter_def ...
- PLSQL Developer 连接oracle(64) (instantclient)错误及解决方案
安装了PLSQL Developer 64bit,下载地址http://cy1.mqego.com/plsqldeveloperxx.zip. 1.安装完成后,输入数据库连接信息之后,提示如下错误 原 ...
- Oracle的tnsnames.ora配置(PLSQL Developer)
首先打开tnsnames.ora的存放目录,一般为D:\app\Administrator\product\11.2.0\client_1\network\admin,就看安装具体位置了. 步骤阅读 ...
随机推荐
- Python内置函数(13)——bytearray
英文文档: class bytearray([source[, encoding[, errors]]]) Return a new array of bytes. The bytearray cla ...
- Mego开发文档 - 基础查询
基础查询 Mego 使用语言集成查询(LINQ)从数据库查询数据.LINQ允许您使用C#(或其他.NET语言)根据派生的上下文和实体类编写强类型查询.将LINQ查询的表示传递给数据库提供者,翻译为数据 ...
- WebApi 的三种寄宿方式 (一)
最近逛博客园,看到了Owin,学习了一下,做个笔记,说不定将来哪天就用上了 关于 Owin 的介绍,百度解释的很清楚了: https://baike.baidu.com/item/owin/28607 ...
- Linux知识积累(8)卸载安装jdk
java -version yum remove java yum groupremove java java -version tar -zxvf jdk-8u60-linux-x64.tar.gz ...
- maven入门(1-3)构建简单的maven项目
1. 用Maven 命令创建一个简单的Maven项目 在cmd中运行如下命令: mvn archetype:generate -DgroupId=com.mycompany.app -Dartifac ...
- MySql入门(2-2)创建数据库
mysql -u root -p; show databases; create database apigateway; use apigateway; show tables;
- 丢掉DDL,我用这招3分钟清空 MySQL 9亿记录数据表
摘要:最近由于福建开机广告生产环境的广告日志备份表主键(int类型)达到上限(21亿多),不能再写入数据,需要重新清空下该表并将主键重置,但由于表里有8亿多记录的数据量,使用重置命令及DDL命令执行地 ...
- 简单搭建SpringMVC框架详解
在公司待了两年,用的一直是Spring+SpringMVC+Hibernate框架,都是公司自己搭建好的,自己从来没有主动搭建过,闲来无聊,自己搭建试试.一下即我搭建的过程以及搭建所遇到的问题,有部分 ...
- lambda匿名函数透析
lambda匿名函数透析 目录 1 匿名函数的作用... 1 2 匿名函数的格式... 1 3 匿名函数实例代码... 3 1 匿名函数的作用 ...
- scrapy.Spider的属性和方法
scrapy.Spider的属性和方法 属性: name:spider的名称,要求唯一 allowed_domains:允许的域名,限制爬虫的范围 start_urls:初始urls custom_s ...