PLSQL(2)
游标
[1] 不带参数的游标
-- 取出EMP表中的所有人名字
DECLARE
CURSOR C IS SELECT * FROM EMP;
V_EMP C%ROWTYPE; -- V_EMP : 带有游标C的EMP中所有数据
BEGIN
OPEN C; -- 打开游标
FETCH C INTO V_EMP; -- 把当前游标指向的数据拿出来
DBMS_OUTPUT.PUT_LINE(V_EMP.ENAME);
CLOSE C; -- 关闭游标
END; -- 循环读取
DECLARE
CURSOR C IS SELECT * FROM EMP; -- 声明游标
V_EMP C%ROWTYPE;
BEGIN
OPEN C;
LOOP
FETCH C INTO V_EMP;
EXIT_WHEN (C%NOTFOUND);
DBMS_OUTPUT.PUT_LINE(V_EMP.ENAME);
END LOOP;
CLOSE C;
END;
[2] 带参数的游标
DECLARE
CURSOR C(V_DEPTNO EMP.DEPTNO%TYPE, V_JOB EMP.JOB%TYPE)
IS
SELECT ENAME, SAL FROM EMP WHERE DEPTNO = V_DEPTNO AND JOB = V_JOB;
BEGIN
FOR V_EMP IN C(30, 'CLERK') LOOP
DBMS_OUTPUT.PUT_LINE(V_TEMP.ENAME);
END LOOP;
END;
[3] 可更新的游标
DECLARE
CURSOR C IS SELECT * FROM EMP FOR UPDATE; -- 只要写for update: 为了更新才使用的游标
BEGIN
FOR V_TEMP IN C LOOP
IF(V_TEMP.SAL < 2000) THEN
UPDATE EMP SET SAL = SAL*2 WHERE CURRENT OF C; -- CURRENT OF C表示游标C当前位置
ELSIF(V_TEMP.SAL = 3000) THEN
DELETE FROM EMP WHERE CURRENT OF C;
END IF;
END LOOP;
END;
存储过程
[1] 不带参存储过程
-- 存储过程关键字: PROCEDURE 名字: PPP
CREATE OR REPLACE PROCEDURE PPP
IS
CURSOR C IS SELECT * FROM EMP FOR UPDATE; -- 为了更新才使用的游标
BEGIN
FOR V_TEMP IN C LOOP
IF(V_TEMP.SAL < 2000) THEN
UPDATE EMP SET SAL = SAL*2 WHERE CURRENT OF C;
ELSIF(V_TEMP.SAL = 3000) THEN
DELETE FROM EMP WHERE CURRENT OF C;
END IF;
END LOOP;
END; -- 执行存储过程
BEGIN
PPP;
END;
[2] 带参的存储过程
1 -- IN: 传入参数 OUT: 传出参数 IN,OUT: 即可传入也可传出
2 CREATE OR REPLACE PROCEDURE P(V_A IN NUMBER, V_B IN NUMBER, V_C OUT NUMBER, V_TEMP IN OUT NUMBER)
3 IS
4 BEGIN
5 IF(V_A > V_B) THEN
6 V_C ;= V_A;
7 ELSE
8 V_C ;= V_B;
9 END IF;
10 V_TEMP := V_TEMP + 1;
11 END;
12
13 -- 调用存储过程
14 DECLARE
15 V_A NUMBER := 3;
16 V_B NUMBER := 4;
17 V_C NUMBER;
18 V_TEMP NUMBER := 5;
19 BEGIN
20 P(V_A, V_B, V_C, V_TEMP);
21 DBMS_OUTPUT.PUT_LINE(V_C);
22 DBMS_OUTPUT.PUT_LINE(V_TEMP);
23 END;
函数
-- 关键字: FUNCTION
CREATE OR REPLACE FUNCTION SAL_TAX
(V_SAL NUMBER) -- 形参
RETURN NUMBER -- 返回类型
IS
BEGIN
IF(V_SAL < 2000) THEN
RETURN 0.10;
ELSIF(V_SAL < 2750) THEN
RETURN 0.15;
ELSE
RETURN 0.20;
END IF;
END; -- 使用
SELECT LOWER(ENAME), SAL_TAX(SAL) FROM EMP;
序列
-- 序列的名字为SEQ_AA,序列的第一值是1,每次执行增加1;
CREATE SEQUENCE SEQ_AA
START WITH 1
INCREMENT BY 1; -- 查看当前值
SELECT SEO_AA.CURRENT FROM DUAL;
-- 查看下一个值
SELECT SEQ_AA.NEXTVAL FROM DUAL; -- 查看序列
SELECT SEQUENCE_NAME FROM USER_SEQUENCE; -- 删除序列
DROP SEQUENCE SEQ_AA; -- 序列的值如何在想表中插入数据的时候使用
INSERT INTO AA VALUES (SEQ_AA.NEXTVAL,'色彩'); -- SEQ_AA.NEXTVAL将该序列的值与 '色彩' 栏匹配 -- 序列参数
CREATE SEQUENCE SEQ_IDD
START WITH 100 -- 序列从一百开始
INCREMENT BY -1 -- 每次减一
MAXVALUE 100 -- 序列最大值100
MINVALUE 90 -- 序列最小值90
CYCLE -- 缓存为10
CACHE 10;
PLSQL(2)的更多相关文章
- 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,就看安装具体位置了. 步骤阅读 ...
随机推荐
- 用javascript做别踩白块游戏2
这一次做一个好一点的,要求黑块自动下落,且速度逐渐加快 <!DOCTYPE html> <html> <head> <!-- 禁用缩放功能 --> &l ...
- 使用 vi 命令
一.vi是什么 vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器. Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实 ...
- maven入门(10)maven的仓库
[0]README 1)本文部分文字转自 "maven实战",旨在 review "maven(6)仓库" 的相关知识: [1]何为 Maven仓库 1) ...
- 【笔记】快应用QuickApp(hap) -- 构建一个微博应用
一.背景 在上次和小伙伴分享了快应用(后面简称hap)后,有很多待定的思路没有去尝试.这周有时间简单开发了一个热门微博的应用,主要涉及到的难点:富文本.长列表.画廊.这里将整个开发过程中遇到的问题以及 ...
- 从感知机到 SVM,再到深度学习(二)
这篇博文承接上一篇,详细推导了 SVM 算法,包括对偶算法,SMO 优化算法,核函数技巧等等,最后还提到用高度非线性的曲线代替超平面,就是神经网络的方法. 在第一篇中已经得到了最优间隔 ...
- 微信小程序:wx.request之post请求后端无法获取数据的问题
前言:小程序的开发中总是踩到各种坑,看文档也不知所云: 例如当我们在写微信小程序接口时,method请求方式有POST和GET两种,为了数据安全,我们会偏向于使用POST请求方式访问服务器端: 问题: ...
- sqli-lab 第一题 单引号 error based single quotes
一.第一次见面 1.初识 http://localhost/Less-1/ 提示输入id,因此访问http://localhost/Less-1/?id=1 可以继续测试id=2.3.4等的情况,会输 ...
- 使用redis,zookeeper实现分布式锁
1.分布式锁 分布式锁一般用在分布式系统或者多个应用中,用来控制同一任务是否执行或者任务的执行顺序.在项目中,部署了多个tomcat应用,在执行定时任务时就会遇到同一任务可能执行多次的情况,我们可以借 ...
- 机器学习基石:09 Linear Regression
线性回归假设: 代价函数------均方误差: 最小化样本内代价函数: 只有满秩方阵才有逆矩阵. 线性回归算法流程: 线性回归算法是隐式迭代的. 线性回归算法泛化可能的保证: 根据矩阵的迹的性质:tr ...
- 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池)
一.本文产生原由: 之前文章<总结消息队列RabbitMQ的基本用法>已对RabbitMQ的安装.用法都做了详细说明,而本文主要是针对在高并发且单次从RabbitMQ中消费消息时,出现了连 ...