游标

[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)的更多相关文章

  1. PLSql Oracle配置

    1.安装Oracle客户端或者服务端 2.配置环境变量 <1>.一般如果安装了Oracle客户端或者服务端的话,在环境变种的Path中有Oracle的安装路径(计算机-属性-高级系统设置- ...

  2. plsql查询乱码问题解决

    步骤一:新建变量,设置变量名:NLS_LANG,变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK,确定即可: 步骤二: 退出plsql,重新登陆plsql.输入sql语句,执 ...

  3. Oracle/PLSQL: ORA-06550

    参考: http://blog.csdn.net/haiross/article/details/20612135 Oracle/PLSQL: ORA-06550 Learn the cause an ...

  4. [No00008F]PLSQL自动登录,记住用户名密码&日常使用技巧

    配置启动时的登录用户名和密码 这是个有争议的功能,因为记住密码会给带来数据安全的问题. 但假如是开发用的库,密码甚至可以和用户名相同,每次输入密码实在没什么意义,可以考虑让PLSQL Develope ...

  5. 使用plsql创建表空间和用户

    使用plsql创建oracle数据库的表空间和用户,并授权的语句.1.创建表空间:说明:datafile是指定创建位置,指向oracle数据库的默认位置:autoextend 设置容量为自动增长,50 ...

  6. plsql查找不到带中文的纪录

    今天在另外的电脑用plsql查询不到带中文的记录 select * from test where name like '%测试%' 然后发现是系统的环境变量还没设置好所造成的.在系统变量加入如下变量 ...

  7. plsql配置远程连接数据库

    1.先安装plsql.地址:http://pan.baidu.com/s/1hqGbATI 2.  解压缩 instantclient_11_2(这个客户端可以在网上找精简版的),找到以下路径  \i ...

  8. PLSQL操作excel

    一.plsql数据库操作: 删除数据前备份一张表: create table plat_counter_def_bf as select * from plat_monitor_counter_def ...

  9. PLSQL Developer 连接oracle(64) (instantclient)错误及解决方案

    安装了PLSQL Developer 64bit,下载地址http://cy1.mqego.com/plsqldeveloperxx.zip. 1.安装完成后,输入数据库连接信息之后,提示如下错误 原 ...

  10. Oracle的tnsnames.ora配置(PLSQL Developer)

    首先打开tnsnames.ora的存放目录,一般为D:\app\Administrator\product\11.2.0\client_1\network\admin,就看安装具体位置了. 步骤阅读 ...

随机推荐

  1. AngularJS1.X学习笔记8-自定义指令(上)

    AngulaJS的指令是一种非常强大的特性,一个ng-repeat就能让我们非常方便的展示一个数据列表,指令相当于是一个组件,为我们将一些东西封装起来了,提供了复用的可能性.个人认为自定义指令还是比较 ...

  2. Mego开发文档 - 复杂查询

    复杂查询 Mego 还支持一些更高级的LLINQ查询写法,本文只列出一部分. 分组汇总查询 using (var db = new OrderManageEntities()) { var query ...

  3. 查找git ignore的追踪

    前言 版本控制说简单也简单,说复杂也困难的多.作为开发者,最基础的版本管理和团队协作的功能必须掌握.而其他一些相关的信息也可以了解下.比如,这次就有同事遇到了问题. 遇到的问题 在windows下,往 ...

  4. OAuth2.0学习(2-1)Spring Security OAuth2.0 开发指南

    开发指南:http://www.cnblogs.com/xingxueliao/p/5911292.html Spring OAuth2.0 提供者实现原理: Spring OAuth2.0提供者实际 ...

  5. linux下查看mysql日志文件的方法

    查看mysql日志方法: mysql默认不允许我们查看日志.需要更改一些设置 1 vi 更改配置文件 允许用户查看日志文件 sudo vi /etc/mysql/mysql.conf.d/mysqld ...

  6. RxJava系列2(基本概念及使用介绍)

    RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) RxJava系列4(过滤操作符) RxJava系列5(组合操作符) RxJava系列6(从微观角 ...

  7. python 杂货铺

    python 杂货铺之不知道的python操作 1.交互模式下的神奇的_ windos中cmd交互模式中下(python2,python3),最近一个表达式的值赋给变量 _.这样我们就可以把它当作一个 ...

  8. 原生JS实现几个常用DOM操作API

    原生实现jQuery的sibling方法 <body> <span>我是span标签</span> <div>我是一个div</div> & ...

  9. VueJs(2)---VueJs开发环境的搭建和讲解index.html如何被渲染

    VueJs开发环境的搭建和讲解初始框架 有关如何搭建vue.js框架我这看了一篇文章,自己也根据它进行搭建环境. 文章地址:vue.js2.0实战(1):搭建开发环境及构建项目 接下来对初始的框架进行 ...

  10. NGUI----简单聊天系统一

    1:聊天背景的创建 新建一个场景-----保存场景 NGUI---->Create-----Panel 选中UIRoot,然后新建一个sprite 选择图集 效果如下图 添加一个可拖拽的功能 选 ...