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,就看安装具体位置了. 步骤阅读 ...
随机推荐
- python常用运算符
1. / 浮点除法,就算分子分母都是int类型,也返回float类型,比如我们用4/2,返回2.0 2. // 整数除法,根据分子分母的不同组合,返回的值有差异. 正数//正数,取整,比如5//3,返 ...
- HTML中的上下标标签的演示
HTML中的上下标标签的演示 #table_head>td { font-weight: bold } tr { text-align: center } 作用 标签 演示代码 呈现效果 上标 ...
- python基础——类名称空间与对象(实例)名称空间
python基础--类名称空间与对象(实例)名称空间 1 类名称空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类的良好总属性:数据属性和函数属性 其中类 ...
- JavaScript实现图片轮播图
<!DOCTYPE html><html> <head> <script > var time; function init(){ //设置定时操作 t ...
- [Nginx]-外部多端口映射Https443端口配置
https服务器配置完成后,域名访问默认匹配至443端口,如果想同时通过https域名网址来请求多个对外服务,就需要在Nginx配置里来对请求进行规则判断,并匹配至相应的内部端口,这也是Nginx反向 ...
- Redis Cluster 4.0 on CentOS 6.9 搭建
集群简介 Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施(installation). Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需 ...
- fiddler实现手机抓包
对fiddler相关配置 1.允许fiddler捕获http协议,打开fiddler客户端,菜单框选择Tools->Options->HTTPS,勾选图中三项 2.允许远程连接,Tools ...
- ASP.NET MVC5 使用NPOI导出ExceL 返回浏览器下载
一,什么是NPOI 该项目是位于http://poi.apache.org/的POI Java项目的.NET版本.POI是一个开源项目,可以帮助您读取/写入xls,doc,ppt文件.它有着广泛的应用 ...
- BOM,Dom 回顾
加给元素: offsetLeft(距离定位父级的距离)/offsetTop(距离定位父级的距离)/offsetWidth(可视宽度)/offHeight(可视高度) clientLeft(左边框宽度) ...
- Spring Cloud Eureka 自我保护机制
Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期,但是在保护期内如果 ...