Oracle PL/SQL,游标,过程
1、PL/SQL 语法相关
-- SQL 语言只是访问,操作数据库的语言,而比并不是程序设计语言,因此不能用于程序开发。
-- PL/SQL 是在标准SQl语言上进行过程性扩展后形成的程序设计语言,是一种Oracle数据库特有的,支持应用开发语言;
------------if--------------
DECLARE
address VARCHAR2(10) :='Y1';
BEGIN
IF (address ='Y') THEN
dbms_output.put_line('yes');
ELSE
dbms_output.put_line('no');
END IF;
END; -------------case------------
DECLARE
ADDRESS NUMBER := 1;
BEGIN
CASE ADDRESS
WHEN 1 THEN
DBMS_OUTPUT.PUT_LINE('1');
WHEN 2 THEN
DBMS_OUTPUT.PUT_LINE('2');
WHEN 3 THEN
DBMS_OUTPUT.PUT_LINE('3');
ELSE
DBMS_OUTPUT.PUT_LINE('4');
END CASE;
END;
------------LOOP-------------
DECLARE
NUM NUMBER := 5;
BEGIN
LOOP
IF NUM < 0 THEN
EXIT;
END IF;
dbms_output.put_line('H:'||NUM);
NUM := NUM - 1;
END LOOP;
END;
----------
DECLARE
NUM NUMBER := 5;
BEGIN
LOOP
EXIT WHEN NUM < 0;
DBMS_OUTPUT.PUT_LINE('k:' || NUM);
NUM := NUM - 1;
END LOOP;
END;
------FOR...IN..LOOP...END-------
BEGIN
FOR i IN 1..10 LOOP
DBMS_OUTPUT.PUT_LINE('L:' || i);
END LOOP;
END;
--------------------------
--%TYPE 定义一个变量,将数据类型与已经定义的数据变量的类型相同,
--或与数据库表的某列的数据类型相同
select * FROM chengji;
DECLARE
NAME1 CHENGJI.NAME%TYPE;
SCORE1 CHENGJI.SCORE%TYPE;
BEGIN
SELECT NAME, SCORE INTO NAME1, SCORE1 FROM CHENGJI WHERE ID = 4;
DBMS_OUTPUT.PUT_LINE(NAME1 || '-' || SCORE1);
END; --提供%ROWTYPE操作符, 返回一个记录类型, 其数据类型和数据库表的数据结构相一致
DECLARE
CJ CHENGJI%ROWTYPE;
BEGIN
SELECT * INTO CJ FROM CHENGJI WHERE ID = 4;
DBMS_OUTPUT.PUT_LINE(CJ.NAME || '-' || CJ.SCORE);
END;
2、游标使用
1.声明游标
2.打开游标
3.提取游标
4.关闭游标
游标属性
%NOTFOUND -- 是否没找打游标
%FOUND -- 是否找到游标
%ROWCOUNT -- 游标行数
%ISOPEN -- 游标是否打开
-- for 循环游标
DECLARE
CURSOR CJ IS
SELECT * FROM CHENGJI;
-- 定义一个游标变量cj_row ,类型为cj的一行类型
CJ_ROW CJ%ROWTYPE;
BEGIN
FOR CJ_ROW IN CJ LOOP
DBMS_OUTPUT.PUT_LINE(CJ_ROW.NAME || '-' || CJ_ROW.COURSE || '-' ||
CJ_ROW.SCORE);
END LOOP;
END; -- Fetch 游标
DECLARE
CURSOR CJ IS
SELECT NAME, COURSE, SCORE FROM CHENGJI;
CJ_ROW CJ%ROWTYPE; BEGIN
OPEN CJ;
LOOP
FETCH CJ
INTO CJ_ROW;
EXIT WHEN CJ%NOTFOUND;-- 判断是否取到值,没取到值就退出
DBMS_OUTPUT.PUT_LINE(CJ_ROW.NAME || ',' || CJ_ROW.COURSE || ',' ||
CJ_ROW.SCORE);
END LOOP;
CLOSE CJ;
END;
3、过程
3.1
-- 创建过程
CREATE OR REPLACE PROCEDURE 存储过程名(参数in,参数out)
AS
-- 变量声明
NAME VARCHAR2(10);
age INTEGER ;
BEGIN
--业务逻辑
END;
3.2
CREATE OR REPLACE PROCEDURE PRO_CHENGJI_ID(NAME1 IN chengji.name%TYPE, ID1 IN chengji.id%TYPE)
AS
BEGIN
UPDATE CHENGJI SET ID = ID1 WHERE NAME = NAME1;
COMMIT;
END ;
--执行过程
call PRO_CHENGJI_ID('王五',4);
3.3
CREATE OR REPLACE PROCEDURE PRO_CHENGJI_ID(NAME1 IN CHENGJI.NAME%TYPE,
ID1 IN CHENGJI.ID%TYPE,
COURSE1 IN CHENGJI.COURSE%TYPE,
SCORE1 OUT CHENGJI.SCORE%TYPE) AS
BEGIN
SELECT SCORE
INTO SCORE1
FROM CHENGJI
WHERE NAME = NAME1
AND ID = ID1
AND COURSE = COURSE1;
END PRO_CHENGJI_ID;
--执行过程
DECLARE
score chengji.score%TYPE;
BEGIN
PRO_CHENGJI_ID('王五',3,'化学',SCORE);
dbms_output.put_line(''||score);
END;
Oracle PL/SQL,游标,过程的更多相关文章
- Oracle PL/SQL 游标
在PL/SQL块中执行SELECT.INSERT.DELETE和UPDATE语句时,ORACLE会在内存中为其分配上下文区(Context Area),即缓冲区.游标是指向该区的一个指针,或是命名一个 ...
- Oracle PL/SQL游标
游标的提出: SQL是面向集合的,其结果一般是集合量(多条记录),而PL/SQL的变量一本是标量,其一组变量异常一直只能存放一条记录.所以仅仅使用变量并不能完全满足SQL语句向应用程序输出数据的要求. ...
- [oracle]pl/sql --分页过程demo
这句sql能够用来查询一张表中的特定位置的记录 --查询的方法获取分页的语句 select *from (select t1.*,rownum rn from (select *from books) ...
- [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)
原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL ...
- ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)
原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!) 继上篇:ORACLE P ...
- ORACLE PL/SQL编程详解
ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...
- [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)
原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...
- ORACLE PL/SQL编程之八:把触发器说透
原文:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之八: 把触发器说透 大家一定要评论呀,感谢!光发表就花了我将近一个下午. 本篇主要内容如下: 8.1 触发器类型 ...
- [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)
原文:[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不殆) [推荐]ORACLE PL/SQL编程之五: 异常错误处理(知已知彼.百战不殆) 继上三篇:ORACLE PL/S ...
- [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)
原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ...
随机推荐
- vue 兼容性——ie家族不支持promise
解决方案: 安装: cnpm install es6-promise 在 main.js 引入 : polyfill require("es6-promise").polyfill ...
- FortiGate双链路不同运营商上网配置
1.防火墙端口配置 2.LLB配置
- [leetcode]33. Search in Rotated Sorted Array旋转过有序数组里找目标值
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...
- Solidity的三种合约间的调用方式 call、delegatecall 和 callcode
0x00 前言 Solidity(http://solidity.readthedocs.io/en/v0.4.24/) 是一种用与编写以太坊智能合约的高级语言,语法类似于 JavaScript. S ...
- webapi postman 415 错误
https://blog.csdn.net/Intangible_moon/article/details/80183121 猜测:如果后台接口使用的是[fromBody]标签的话,需要使用raw方式
- python爬虫之urllib
#coding=utf-8 #urllib操作类 import time import urllib.request import urllib.parse from urllib.error imp ...
- Java代码获取spring 容器的bean几种方式
一.目的 写了一个项目,多个module,然后想在A模块中实现固定的config注入,当B模块引用A时候,能够直接填写相对应的配置信息就行了.但是遇到一个问题,B引用A时候,A的配置信息总是填充不了, ...
- OSI网络七层协议+火了火了火
因为部门新进了一台价值百万的网络测试设备,所以有太大的必要了解有关网络相关的基础知识了. 网络七层协议OSI(open system interconnection)从上到下依次为:应用层.表示层.会 ...
- IoGetRelatedDeviceObject学习
PDEVICE_OBJECT IoGetRelatedDeviceObject( IN PFILE_OBJECT FileObject ) /*++ Routine Description: This ...
- 【机器学习】Octave 实现逻辑回归 Logistic Regression
ex2data1.txt ex2data2.txt 本次算法的背景是,假如你是一个大学的管理者,你需要根据学生之前的成绩(两门科目)来预测该学生是否能进入该大学. 根据题意,我们不难分辨出这是一种二分 ...