`
sjk2013
  • 浏览: 2245808 次
文章分类
社区版块
存档分类
最新评论

PL/SQL学习二

 
阅读更多
6、%TYPE用法
当使用%TYPE属性来定义变量的时候,它会安装数据库的列属性或其他变量的属性来确定你当前定义的新变量的类型和长度。
如:
v_sal emp.sal%TYPE;
表示v_sal变量与表emp的列sal属性一样(长度和类型都一致)。

7、复合变量
复合变量是指用于存放多个值的类型。主要有四种:
7.1、PL/SQL RECORD(记录类型)
类似于C中的结构体变量。
-- ex:pl/sql_8
DECLARE
  --匿名块
  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_type
CREATE 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_test
insert 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 7.0版本的指南,对于学习和精通Oracle数据库编程至关重要。以下是手册可能涵盖的一些核心知识点: 1. **PL/SQL基础**:手册可能会从基础开始,介绍PL/SQL的基本...

    oracle10g_pl/sql

    通过深入学习Oracle 10g PL/SQL,不仅可以掌握数据库编程的基本技能,还能了解如何利用这些技能来设计和实现复杂的业务逻辑,优化数据库性能,以及更好地维护和管理Oracle数据库系统。本教程涵盖了所有这些关键知识...

    Oracle PL/SQL学习官方教材

    以下是对"Oracle PL/SQL学习官方教材"中可能包含的主要知识点的详细解释: 1. **基础概念**:首先,教材会介绍PL/SQL的基本概念,包括块(Block)、变量(Variable)、常量(Constant)、数据类型(Data Types)和...

    一个对数据库的操作工具PL/SQLpl/sqL工具

    2. **数据处理**:通过PL/SQL,用户可以直接对数据库表进行增删改查操作,使用SELECT、INSERT、UPDATE、DELETE等SQL语句。 3. **游标**:PL/SQL支持游标,允许用户逐行处理查询结果,这对于处理大量数据时非常有用...

    pl/sql 学习资料

    在这个“PL/SQL学习资料”压缩包中,包含了十一个PDF文件,覆盖了从基础到进阶的广泛主题。下面我们将详细探讨这些知识点。 1. **PL/SQL基础知识**: - PL/SQL结构:了解块的概念,包括声明部分、执行部分和异常...

    PL/SQL学习笔记

    PL/SQL是Oracle公司开发的一种过程化SQL扩展,它是Oracle数据库的重要组成部分,用于在数据库服务器上编写存储过程、函数、触发器、包等可执行...通过学习和掌握PL/SQL,开发者可以构建高效、复杂的数据库应用程序。

    Oracle PL/SQL实战(待续)

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计...通过实践和学习"Oracle PL/SQL实战(待续)"的相关内容,我们可以提升在Oracle环境中解决问题的能力,更好地管理和优化数据库系统。

    PL/SQL学习资料

    这个“PL/SQL学习资料”压缩包包含了对这一编程语言深入理解和应用的关键知识点。 PL/SQL由三部分组成:声明部分、执行部分和异常处理部分。在声明部分,我们可以定义变量、常量、游标、记录类型等;执行部分用于...

    pl/sql学习笔记

    以下是对PL/SQL的学习笔记的详细解析: 1. **什么是PL/SQL语言** PL/SQL是Oracle数据库为数据库管理员和开发人员设计的一种编程语言。它扩展了SQL的功能,允许编写包含控制结构、变量、过程和函数的程序段,这些...

    PL/SQL学习教程,附笔记

    在学习PL/SQL的过程中,理解这些基本概念和结构是至关重要的。通过实践编写存储过程、函数和触发器,你可以逐渐掌握PL/SQL的强大功能,并利用它来解决实际的数据库编程问题。对于初学者来说,循序渐进、结合实例学习...

    oracle 中 pl/sql 只是学习方法

    2. **流程控制**:PL/SQL支持条件语句(IF-THEN-ELSE、CASE)和循环语句(FOR、WHILE、LOOP)。这使得我们能够在处理数据时根据不同的条件执行不同的逻辑。 3. **集合和游标**:集合是PL/SQL中处理多行数据的有效...

    oracle pl/sql从入门到精通 配套源代码

    2. **存储过程和函数**:这些是PL/SQL的核心组成部分,它们封装了一系列操作,可以被多次调用,提高代码复用性。书中可能包含各种示例,如自定义计算函数、处理业务逻辑的存储过程等。 3. **触发器**:当数据库中的...

    PL/SQL学习课件

    第二章“访问Oracle”将探讨如何通过PL/SQL连接到Oracle数据库,使用连接字符串、用户认证和游标来操作数据。这部分内容对于理解如何在PL/SQL环境中执行数据库查询至关重要。 第三章“控制结构”深入讲解了PL/SQL中...

    Oracle PL/SQL程序设计(第5版)(上下册)

    - **集合与记录**:学习如何使用PL/SQL中的集合和记录类型,这些结构可以帮助更高效地处理数据集。 - **游标**:介绍游标的使用方法,包括隐式游标和显式游标,以及如何利用游标遍历查询结果。 #### 四、PL/SQL中的...

    PL/SQL 基本知识

    总的来说,PL/SQL是Oracle数据库开发的重要工具,通过学习和掌握PL/SQL,开发者可以更好地利用Oracle数据库的强大功能,构建高效、稳定的企业级应用。而`jbpm.sql`文件可能包含的流程管理相关代码,正是PL/SQL在企业...

    PL/SQL下载

    对于初学者,可以从以下几个方面入手学习PL/SQL: 1. **基础语法**:理解PL/SQL的基本数据类型、变量声明、流程控制结构等。 2. **函数和过程**:掌握如何定义和调用自定义函数和过程。 3. **游标**:了解如何使用...

    Oracle PL/SQL实例编程(PL/SQL经典书籍)

    2. **变量和数据类型**:PL/SQL支持多种数据类型,包括数值型(NUMBER、BINARY_INTEGER、PLS_INTEGER)、字符型(VARCHAR2、CHAR)、日期型(DATE)、布尔型(BOOLEAN)以及复合数据类型如记录和数组。 3. **控制...

    PL/SQL编程基础知识

    ### PL/SQL编程基础知识 #### 一、PL/SQL简介 PL/SQL(Procedural Language for SQL)是一种过程化语言,它结合了SQL的数据操纵功能和过程化语言的...对于初学者来说,掌握这些基本概念是学习和应用PL/SQL的关键。

    PL/SQL开发文档1

    标题中提到的“PL/SQL开发文档1”,说明本文档是关于PL/SQL开发的入门级指导材料,面向希望学习使用PL/SQL进行数据库程序单元开发的用户。文档很可能是Oracle公司内部或其授权的培训机构用于教学目的的官方材料。 ...

    最容易上手的PL/SQL学习教程-有经过测试的丰富案例

    本教程专注于为初学者提供一个易于上手的PL/SQL学习路径,通过丰富的测试案例,帮助读者快速掌握这一强大的数据库编程工具。 首先,让我们深入了解一下PL/SQL的基本概念。在第1章中,教程介绍了SQL与PL/SQL的关系。...

Global site tag (gtag.js) - Google Analytics