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,就看安装具体位置了. 步骤阅读 ...
随机推荐
- 分贝块---dBblock
分贝,用英语来表达的话,是decibel,是量度两个相同单位之数量比例的计量单位,主要用于度量声音强度,常用dB表示. 块,block,在百度百科中,指数据库中的最小存储和处理单位,包含块本身的头信息 ...
- vueJs 源码解析 (三) 具体代码
vueJs 源码解析 (三) 具体代码 在之前的文章中提到了 vuejs 源码中的 架构部分,以及 谈论到了 vue 源码三要素 vm.compiler.watcher 这三要素,那么今天我们就从这三 ...
- Spark快速入门
Spark 快速入门 本教程快速介绍了Spark的使用. 首先我们介绍了通过Spark 交互式shell调用API( Python或者scala代码),然后演示如何使用Java, Scala或者P ...
- 京东2019春招Java工程师编程题题解
生成回文串 题目描述 对于一个字符串,从前开始读和从后开始读是一样的,我们就称这个字符串是回文串. 例如"ABCBA","AA","A"是回 ...
- linux centos-7.2-64bit 安装配置启动nginx
1.安装依赖包yum -y install openssl openssl-develyum install pcre*yum install openssl*yum install zlib yum ...
- hive:创建索引
hive也是支持索引的使用,但是如果表中已经有数据的情况下,创建索引的过程不是特别快. 已经拥有表: create table if not exists llcfpd_withgroupbykey( ...
- netcore webapi帮助文档设置
如何建 .netcore webapi 项目这个就不说了,这个都没有没必要看下去. 我这里是.netcore 2.0,虽然没测过1.0的,但想来差不多. 1.Nuget Packages安装,使用程序 ...
- html的基本结构
html的基本结构 1.<html>内容</html> html文档的文档标记,也称为html开始标记 这对标记分别位于网页的最前端和最后端,表示开始和结束 2.<hea ...
- www的构建技术
www的构建技术分别是: html超文本标记语言,页面的文本显示 http超文本传输协议,信息传输转移的约定 url统一资源定位符,客户端浏览超文本的地址集合
- RTKLIB源码解析(一)——单点定位(pntpos.c)
RTKLIB源码解析(一)--单点定位(pntpos.c) 标签: GNSS RTKLIB 单点定位 [TOC] pntpos int pntpos (const obsd_t *obs, int n ...