PL/SQL 基础---数据交互
来源:互联网 发布:sql中update的用法 编辑:程序博客网 时间:2024/06/05 21:16
PL/SQL 基础—数据交互
主要讨论PL/SQL中数据任何在PL/SQL引擎和SQL引擎之间进行交互;
一、基本数据类型
包括NUMBER、VARCHAR2、BOOLEAN、CHAR、DATE,Record等,这些数据类型在SQL和PL/SQL中可以直接转换,并且一一对应;
使用方式
--获取数据 SELECT ... INTO v1,v2... --写入数据 INSERT INTO TABLE VALUES(v1,v2); UPDATE TABLE set COLUMN = v1 WHERE C=v2;
--获取数据DECLARE v_employee_id NUMBER(6); v_last_name VARCHAR(30);BEGIN SELECT e.EMPLOYEE_ID, e.LAST_NAME INTO v_employee_id,v_last_name FROM EMPLOYEES e WHERE e.EMPLOYEE_ID = 100; DBMS_OUTPUT.put_line(v_employee_id); DBMS_OUTPUT.put_line(v_last_name);END;--写入数据--写入DECLARE v_employee_id NUMBER(6); v_last_name VARCHAR(30);BEGIN v_employee_id := 100; v_last_name := 'NEW NAME'; UPDATE EMPLOYEES SET LAST_NAME = v_last_name WHERE EMPLOYEE_ID = v_employee_id;END;--SELECT * FROM EMPLOYEES e WHERE e.EMPLOYEE_ID = 100;
二、复杂数据类型(集合)
包括TABLE, VARRAY等集合类型,这些数据类型需要程序员逐条处理或者使用Oracle提供的批量处理的关键字来完成(BULK COLLECT 和 FORALL(遍历数组));
使用方式
--获取数据 BULK INTO 写入数组DECLARE TYPE T_EMP_TABLE IS TABLE OF EMPLOYEES%ROWTYPE; TYPE T_NAME_ARRAY IS VARRAY(100) OF VARCHAR(30); v_emp T_EMP_TABLE; v_name T_NAME_ARRAY;BEGIN --BULK COLLECT INTO TABLE SELECT * --RETURNING col1,col2 选取指定字段 BULK COLLECT INTO v_emp FROM EMPLOYEES e; FOR i IN 1..v_emp.COUNT LOOP DBMS_OUTPUT.put_line(v_emp(i).LAST_NAME); END LOOP; --BULK COLLECT INTO VARRAY SELECT e.LAST_NAME BULK COLLECT INTO v_name FROM EMPLOYEES e; FOR i IN 1..v_name.COUNT LOOP DBMS_OUTPUT.put_line(v_name(i)); END LOOP;END; --写入数据 FORALL遍历DECLARE TYPE T_EMP_TABLE IS TABLE OF EMPLOYEES%ROWTYPE; v_emp T_EMP_TABLE;BEGIN --BULK COLLECT INTO TABLE SELECT * BULK COLLECT INTO v_emp FROM EMPLOYEES e; FOR i IN 1..v_emp.COUNT LOOP v_emp(i).LAST_NAME := 'RENAME'; END LOOP; FORALL i IN 1..v_emp.COUNT UPDATE EMPLOYEES e SET e.LAST_NAME = v_emp(i).LAST_NAME WHERE v_emp(i).EMPLOYEE_ID = e.EMPLOYEE_ID;END;--SELECT * FROM EMPLOYEES e;
隐私游标 和 显式游标
游标是一个私有的SQL工作区域, Oracle数据库中有两种游标,分别是隐式游标和显式游标,隐式游标不易被用户和程序员察觉和意识到,实际上Oracle服务器使用隐式游标来解析和执行我们提交的SQL语句; 而显式游标是程序员在程序中显式声明的;通常我们说的游标均指显式游标。
隐式游标 – SQL
在使用DML语句(INSERT, UPDATE, or DELETE)或者SELECT INTO 返回单行记录时,Oracle会隐式的完成游标的创建、开启、关闭等操作 ;
显式游标 – 自定义游标
显式游标不对应DML语句,只对应SELECT语句查询结果,且需要提前声明所对应的SELECT语句;
显式游标声明
CURSOR cursor_name [ ( [ parameter [, parameter ...] ) ] [ RETURN return_specification ] IS SELECT_statement [FOR UPDATE [OF [column list]];
示例
CREATE OR REPLACE FUNCTION jealousy_level ( NAME_IN IN friends.NAME%TYPE) RETURN NUMBERAS CURSOR jealousy_cur IS SELECT location FROM friends WHERE NAME = UPPER (NAME_IN); jealousy_rec jealousy_cur%ROWTYPE; retval NUMBER;BEGIN OPEN jealousy_cur; FETCH jealousy_cur INTO jealousy_rec; IF jealousy_cur%FOUND THEN IF jealousy_rec.location = 'PUERTO RICO' THEN retval := 10; ELSIF jealousy_rec.location = 'CHICAGO' THEN retval := 1; END IF; END IF; CLOSE jealousy_cur; RETURN level_out;END;
游标操作
游标参数
游标概念的描述(转)
游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。
游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。
游标有两种类型:显式游标和隐式游标。在前述程序中用到的SELECT…INTO…查询语句,一次只能从数据库中提取一行数据,对于这种形式的查询和DML操作,系统都会使用一个隐式游标。但是如果要提取多行数据,就要由程序员定义一个显式游标,并通过与游标有关的语句进行处理。显式游标对应一个返回结果为多行多列的SELECT语句。游标一旦打开,数据就从数据库中传送到游标变量中,然后应用程序再从游标变量中分解出需要的数据,并进行处理。
- PL/SQL 基础---数据交互
- SQL-PL/SQL基础
- 利用PL/SQL Developer进行数据收集(基础版)
- ORACLE PL/SQL 基础
- PL/SQL基础
- PL/SQL语言基础
- PL/SQL语言基础
- PL/SQL语言基础
- ORACLE PL/SQL 基础
- PL/SQL基础小结
- PL/SQL 基础
- PL/SQL基础学习
- PL/SQL编程基础
- oracle pl/sql 基础
- PL/SQL基础
- PL/SQL --> 语言基础
- PL/SQL基础(一)
- oracle pl/sql 基础
- Android Studio各种快捷功能及好用的插件
- Gson解析,多个接口有多个不同的名字
- 混合编译:c++文件调用c文件变量和函数、c文件调用c++文件变量和函数
- 数据结构-Java实现栈
- Ubuntu 14.04 安装配置强大的星际译王(stardict)词典
- PL/SQL 基础---数据交互
- BP神经网络概述
- PL/SQL 基础---触发器
- 汉诺塔游戏
- 2D游戏 NGUI 不同Atlas 同Panel下 ,根据图片的x值 UISprite 前后深度算法
- IT运维存在问题及改进
- 论文笔记之Deep Convolutional Networks on Graph-Structured Data
- 浅析为什么要使用ST的固件库,谈谈我个人的工具思维!!!
- UVa 136 Ugly Number