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,就看安装具体位置了. 步骤阅读 ...
随机推荐
- 新概念英语(1-125)Tea for two
Does Susan have tea by herself?A:Can't you come in and have tea now,Peter? Not yet.B:I must water th ...
- 修改hosts 流畅使用coursera
以管理员权限打开 C盘 -> Windows-> System32 -> drives -> etc -> hosts文件 在hosts文件最后写入 52.84.246 ...
- 发布到NPMJS
最近在做微服务的前后端设计,打算将客户端中的一个模块独立出来发布到npmjs上,因此,有机会了解了一下npm的发布过程. 参考了很多网上的文章,长篇累牍(但在这里还是真心感谢他们的分享),最终总结成一 ...
- windbg分析Kernel32.dll导出表
写在前面的话: 继续上篇,在获得了Kernel32.dll基址的基础上,分析它的导出表结构: 对PE结构不太熟悉的同学,可以参考看雪论坛里的一篇帖子:https://bbs.pediy.com/thr ...
- 运维-替换kibana徽标
作为一名纯运维人员,想更改kibana的徽标. 并不能像开发一样去看源码并修改源码. 所以我们可以替换徽标. 先来一个效果图.我的版本是5.5.1. 具体的修改过程: 在kibana安装路径下面. o ...
- JavaScript中Global、Math、Date对象的常用方法
JavaScript当中Global.Math.Date类型常用方法如下: /* js 中 Global对象 是一个不存在的对象,它里面的方法可以调用 常用方法: 1 encodeURI 对uri进行 ...
- 格式化输出prettify()
BeautifulSoup的格式化输出函数: print(soup.prettify())
- Java基础之程序流程控制
Java中的程序流程控制 Java中的程序流程分为三种结构:①顺序结构:②分支结构:③循环结构 一.顺序结构 Java中定义成员变量的时候,采用的是前向引用,也就是后面的变量可以引用之前定义好的变量. ...
- [MongoDB教程] 1.简介
MongoDB (名称来自「humongous (巨大无比的)」), 是一个可扩展的高性能,开源,模式自由,面向文档的NoSQL,基于 分布式 文件存储,由 C++ 语言编写,设计之初旨在为 WEB ...
- Appium 在Win7环境下搭建
(一) Java环境准备 安装java sdk 环境变量配置:JAVA_HOME=D:\Program Files\Java\jdk1.8.0_92 PATH设置:%JAVA_HOME%\bin 验证 ...