PL/SQL学习二
来源:互联网 发布:2016com域名注册 促销 编辑:程序博客网 时间:2024/05/07 10:49
6、%TYPE用法
当使用%TYPE属性来定义变量的时候,它会安装数据库的列属性或其他变量的属性来确定你当前定义的新变量的类型和长度。
如:
v_sal emp.sal%TYPE;
表示v_sal变量与表emp的列sal属性一样(长度和类型都一致)。
7、复合变量
复合变量是指用于存放多个值的类型。主要有四种:
7.1、PL/SQL RECORD(记录类型)
类似于C中的结构体变量。
PS:建议PL/SQL编程应养成良好的习惯,声明、BEGIN/END、异常处理块都应当有才完整(虽然声明和异常处理不是必须的)。
7.2、PL/SQL 表(TABLE)
类似于C中的数组,不同的是PL/SQL的表类型下标可以为负数和字符串,而且其元素个数没有限制。
7.3、嵌套表(Nested Table)
也类似于C中的数组,嵌套表下标不能为负数,但其元素个数没有限制。
嵌套表也可以作为表列的数据类型(PL/SQL表不可以)。
创建嵌套表类型:
注意在使用嵌套表类型的时候,必须要为其指定专门的存储表。
当使用%TYPE属性来定义变量的时候,它会安装数据库的列属性或其他变量的属性来确定你当前定义的新变量的类型和长度。
如:
v_sal emp.sal%TYPE;
表示v_sal变量与表emp的列sal属性一样(长度和类型都一致)。
7、复合变量
复合变量是指用于存放多个值的类型。主要有四种:
7.1、PL/SQL RECORD(记录类型)
类似于C中的结构体变量。
-- ex:pl/sql_8DECLARE --匿名块 TYPE EMP_RECORD_TYPE IS RECORD( --定义记录类型 NAME ORDER.BILLTYPENAME%TYPE, --注意是逗号 V_SAL STOER.NUM%TYPE, V_BILLID ORDERDETAIL.BILLID%TYPE); V_EMP_RECORD EMP_RECORD_TYPE; --定义记录变量BEGIN--分别给记录变量内的各个变量赋值,也可以一起赋值(先select出来再into) SELECT BILLTYPENAME INTO V_EMP_RECORD.NAME FROM ORDER WHERE ROWNUM = 1; SELECT NUM INTO V_EMP_RECORD.V_SAL FROM STOER WHERE ROWNUM = 1; SELECT BILLID INTO V_EMP_RECORD.V_BILLID FROM ORDERDETAIL WHERE ROWNUM = 1;--输出 DBMS_OUTPUT.PUT_LINE('name:' || V_EMP_RECORD.NAME); DBMS_OUTPUT.PUT_LINE('sal:' || V_EMP_RECORD.V_SAL); DBMS_OUTPUT.PUT_LINE('billid:' || V_EMP_RECORD.V_BILLID);--异常处理EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error!');END;
PS:建议PL/SQL编程应养成良好的习惯,声明、BEGIN/END、异常处理块都应当有才完整(虽然声明和异常处理不是必须的)。
7.2、PL/SQL 表(TABLE)
类似于C中的数组,不同的是PL/SQL的表类型下标可以为负数和字符串,而且其元素个数没有限制。
-- ex:pl/sql_9 DECLARE-- 定义表类型及表类型变量,下标为整型 TYPE V_TABLE_TYPE IS TABLE OF T_BILLLIST.BILLTYPENAME%TYPE INDEX BY BINARY_INTEGER; V_TABLE V_TABLE_TYPE;BEGIN--给表类型中下标为-3的变量赋值 SELECT BILLTYPENAME INTO V_TABLE(-3) FROM T_BILLLIST WHERE ROWNUM = 1;--输出 DBMS_OUTPUT.PUT_LINE('name:' || V_TABLE(-3)); --异常处理EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error!');END;
7.3、嵌套表(Nested Table)
也类似于C中的数组,嵌套表下标不能为负数,但其元素个数没有限制。
嵌套表也可以作为表列的数据类型(PL/SQL表不可以)。
创建嵌套表类型:
-- 创建类型em_typeCREATE OR REPLACE TYPE EM_TYPE AS OBJECT( NAME VARCHAR2(20), SALARY NUMBER(22, 4), HIREDATE DATE)-- 创建嵌套表(表列为类型EM_TYPE)CREATE OR REPLACE TYPE EMP_ARRAY IS TABLE OF EM_TYPE;
注意在使用嵌套表类型的时候,必须要为其指定专门的存储表。
-- 嵌套表的存储表CREATE TABLE em_test( deptno NUMBER(2), dname VARCHAR2(10), employee emp_array -- 嵌套表类型做表列)NESTED TABLE employee STORE AS test_nest;
其中test_nest就是嵌套表类型的存储表。它也是作为表类型存储(如图),但是它不能用select查询。
SQL> select * from test_nest;select * from test_nest *第 1 行出现错误:ORA-22812: 无法参考嵌套表列的存储表
--插入数据到em_testinsert into em_test values(1,'c001',emp_array(em_type('cry',22.234,sysdate)));--查询嵌套表列SELECT * FROM TABLE (SELECT EMPLOYEE FROM EM_TEST);
7.4、VARRAY(变长数组)
类似于嵌套表,但VARRAY的元素个数是有限制的。
创建变长数组(VARRAY)如下:
SQL> CREATE TYPE tmp_type AS OBJECT( 2 title VARCHAR2(30), 3 pDate DATE); 4 /类型已创建。SQL> CREATE TYPE tmp_array IS VARRAY(20) OF tmp_type; 2 /类型已创建。SQL> CREATE TABLE author( 2 ID NUMBER(8), 3 NAME VARCHAR2(20), 4 article tmp_array); -- 变长数组类型article表已创建
注意变长数组不需为其指定专门的存储表。
- PL/SQL学习二
- PL/SQL学习笔记(二)
- PL/SQL学习笔记二
- PL/SQL学习笔记(二)
- 学习PL/SQL 之二:PL/SQL程序结构
- ORACLE PL/SQL 集合学习笔记(二)
- oracle PL-SQL学习案例(二)
- pl/sql学习笔记(二)
- Oracle PL/SQL 学习笔记(二)
- PL/SQL个人学习笔记(二)
- pl/sql编程学习笔记(二)
- pl/sql基础知识学习笔记(二)
- 经典SQL学习笔记 (八) - pl/sql编程二
- Oracle 学习:PL/SQL循序渐进全面学习教程--课程二 PL/SQL 查询行函数
- Oracle 学习:PL/SQL循序渐进全面学习教程--课程二 PL/SQL 查询行函数
- PL/SQL 二
- PL/SQL知识点(二)
- PL/SQL(二)
- Hadoop 2.0 计数器
- asp.net mvc1 mvc2 mvc3 mvc4 特
- S3C2440 Linux驱动移植——LCD
- 用两个栈实现队列
- 移动开发四国语言概览三:数据类型与常量、变量(上)
- PL/SQL学习二
- C语言 运算符优先级
- openfiler和netapp使用指南参考网址
- HDU1253 BFS
- [math] hdu 3816 to be no. one
- 学习Web 开发技术的16个国外最佳教程网站和博客
- emacs+python[Chinese]
- Struts2中result全貌
- JAVA开发工具简介