/* PL/SQL集合 1. RECORD 由单行多列的标量构成的复合结构。可以看做是一种用户自定义数据类型。 01.TYPE t_emp IS RECORD( 其中TYPE,IS,RECORD为关键字,record_name为变量名称 field1 type [NOT NULL][:=expr1], 每个等价的成员间用逗号分隔 field2 type [NOT NULL][:=expr2], 如果一个字段限定NOT NULL,那么它必须拥有一个初始值 fieldn type [NOT NULL][:=exprn] 所有没有初始化的字段都会初始为NULL ) 2. %ROWTYPE 返回一个基于数据库定义的类型 3.TABLE 类型 TYPE tabletype IS TABLE OF type(类型名,要保存成的数据类型) INDEX BY BINARY_INTEGER */ ---------RECORD 实验--------------------------------------------------------------------- CREATE TABLE USERS(ID NUMBER(4),LOGIN NUMBER(4),NAME VARCHAR2(10)); INSERT INTO USERS VALUES(1,1,'1'); INSERT INTO USERS VALUES(12,12,'12'); INSERT INTO USERS VALUES(11,11,'11'); INSERT INTO USERS VALUES(14,14,'14'); INSERT INTO USERS VALUES(15,15,'15'); COMMIT; --存储过程 CREATE OR REPLACE PROCEDURE TEST_RECORD AS TYPE USER_RECORD_TYPE IS RECORD( MYID USERS.ID%TYPE,--[变量名] [表名.字段名] [%TYPE],表示变量具有与数据库的表中某一字段相同的类型 MYLOGIN USERS.LOGIN%TYPE, MYNAME USERS.NAME%TYPE); U_R_T USER_RECORD_TYPE; BEGIN FOR RECD IN (SELECT * FROM USERS) LOOP SELECT ID, LOGIN, NAME INTO U_R_T FROM USERS WHERE ID = RECD.ID; DBMS_OUTPUT.put_line('ID:' || U_R_T.MYID || ',LOGIN_ID:' || U_R_T.MYLOGIN || ',NAME:' || U_R_T.MYNAME); END LOOP; END; --打印结果 admin@ORCL> EXEC TEST_RECORD; ID:15,LOGIN_ID:15,NAME:15 ID:1,LOGIN_ID:1,NAME:1 ID:12,LOGIN_ID:12,NAME:12 ID:11,LOGIN_ID:11,NAME:11 ID:14,LOGIN_ID:14,NAME:14 PL/SQL 过程已成功完成。 --使用一下 ROWTYPE CREATE OR REPLACE PROCEDURE TEST_RECORD AS U_R_T USERS%ROWTYPE;--相当于RECORD的简化版,集合的属性直接根据表结构来定 BEGIN FOR RECD IN (SELECT * FROM USERS) LOOP SELECT ID, LOGIN, NAME INTO U_R_T FROM USERS WHERE ID = RECD.ID; DBMS_OUTPUT.put_line('ID:' || U_R_T.ID || ',LOGIN_ID:' || U_R_T.LOGIN || ',NAME:' || U_R_T.NAME); END LOOP; END; --打印结果 admin@ORCL> exec TEST_RECORD; ID:15,LOGIN_ID:15,NAME:15 ID:1,LOGIN_ID:1,NAME:1 ID:12,LOGIN_ID:12,NAME:12 ID:11,LOGIN_ID:11,NAME:11 ID:14,LOGIN_ID:14,NAME:14 PL/SQL 过程已成功完成。 --再来看个调用输出的过程 CREATE OR REPLACE PROCEDURE TEST_RECORD (VAL_RETURN OUT USERS%ROWTYPE)AS U_R_T USERS%ROWTYPE;--相当于RECORD的简化版,集合的属性直接根据表结构来定 BEGIN SELECT ID, LOGIN, NAME INTO U_R_T FROM USERS WHERE ID = 12; VAL_RETURN := U_R_T; END; admin@ORCL> DECLARE 2 ID USERS%ROWTYPE; 3 BEGIN 4 TEST_RECORD(ID); 5 DBMS_OUTPUT.PUT_LINE('ID IS: '||ID.ID||',NAME IS: '||ID.NAME); 6 END; 7 / ID IS: 12,NAME IS: 12 PL/SQL 过程已成功完成。 ---------TABLE 实验------------------------------------------------------------------ DECLARE TYPE T_TAB IS TABLE OF USERS%ROWTYPE; V_TAB T_TAB; I INT := 0; V_COUNT INT := 0; BEGIN V_TAB := T_TAB(); --用不带参数的构造函数初始化一个空表,这个步骤为必须。否者会报错 ORA-06531: 引用未初始化的收集 DBMS_OUTPUT.PUT_LINE('表USERS共有' || V_COUNT || '条记录'); FOR REC IN (SELECT * FROM USERS) LOOP I := I + 1; V_TAB.EXTEND; --增加一条空表 SELECT * INTO V_TAB(I) FROM USERS WHERE ID = REC.ID; END LOOP; V_COUNT := V_TAB.COUNT; DBMS_OUTPUT.PUT_LINE('元素个数' || V_COUNT); DBMS_OUTPUT.PUT_LINE('第一个元素' || V_TAB.FIRST); DBMS_OUTPUT.PUT_LINE('最后一个元素' || V_TAB.LAST); FOR N IN 1 .. V_COUNT LOOP DBMS_OUTPUT.PUT_LINE(V_TAB(N).ID || ',' || V_TAB(N).LOGIN); END LOOP; DBMS_OUTPUT.PUT_LINE('---------------------------'); END; / 表USERS共有0条记录 元素个数5 第一个元素1 最后一个元素5 10,10 15,15 12,12 11,11 14,14 --------------------------- PL/SQL 过程已成功完成。 --------REF CURSOR实验----------------------------------------------------------------- http://wenku.baidu.com/view/dd3d0e305a8102d276a22f5a.html -------TABLE 集合------------------------------------------------------------------- http://www.cnblogs.com/JavaCharp/archive/2010/03/26/1697266.html
相关推荐
Oracle PL/SQL学习官方教材,英文版,覆盖了PL/SQL的所有知识,适合入门者或作为参考资料.
《Oracle PL/SQL程序设计(第5版)(套装上下册)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何...
PL/SQL是Oracle对标准数据库语言的扩展,Oracle公司已经将PL/SQL整合到Oracle 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本教程将以循速渐进的方式讲述PL/SQL基础语法,结构和组件、以及...
Topics covered: How to use Oracle PL/SQL in all its manifestations through Oracle9i. Fundamentals of program structure (loops, cases, exceptions, etc.) and execution get attention, as do data types, ...
Oracle PL/SQL实例精解 student模式 数据库建立代码 包括数据库的建立、索引等。样本数据的插入。
Oracle PL/SQL实例编程 Oracle PL/SQL实例编程 Oracle PL/SQL实例编程
oracle pl/sql实例精讲student数据库模式
oracle PL/SQL pdf学习资料oracle PL/SQL pdf学习资料oracle PL/SQL pdf学习资料oracle PL/SQL pdf学习资料oracle PL/SQL pdf学习资料
Considered the best Oracle PL/SQL programming guide by the Oracle community, this definitive guide is precisely what you need to make the most of Oracle’s powerful procedural language. The sixth ...
Oracle PL/SQL专家指南-高级PL/SQL解决方案的设计与开发
oracle pl/sql从入门到精通 配套源代码
《Oracle PL/SQL程序设计(第5版)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何有效地使用它。...
ORACLE PL/SQL编程之八ORACLE PL/SQL编程之八ORACLE PL/SQL编程之八ORACLE PL/SQL编程之八
这是我自己根据书本《ORACLE PL/SQL从入门到精通》何明,写的笔记,有目录。
《oracle pl/sql程序设计(第5版)》基于oracle数据库11g,从pl/sql编程、pl/sql程序结构、pl/sql程序数据、pl/sql中的sql、pl/sql应用构建、高级pl/sql主题6个方面详细系统地讨论了pl/sql以及如何有效地使用它。...
Oracle PL/SQL程序设计,经典书籍,既可以当教材学习,也可以当手册查询。
oracle 9i pl/sql程序设计笔记。
《OraclePL/SQL程序设计(第5版)》不但介绍了大量的Oracle11g的PL/SQL新性能,还提供了许多优化PL/SQL性能的新方法。 《OraclePL/SQL程序设计(第5版)》结构清晰,示例丰富,实践性强,适用于Oracle数据库开发人员、...
oracle pl/sql 编程大全,希望能对想学oracle或者oracle新手以及需要用到这方面知识的朋友有点帮助。
oracle pl/sql最佳实践