`
xiaomogui
  • 浏览: 242686 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

oracle基础之pl/sql基础知识

阅读更多

1. 块(Block)是pl/sql的基本程序单元,编写pl/sql程序实际上就是编写pl/sql块
   块由定义部分,执行部分和异常处理部分组成。
   定义部分用于定义常量,变量,游标,异常,复杂数据类型等,Declare。
   执行部分用于实现应用模块功能,主要包括要执行的sql语句和pl/sql语句,begin。
   异常处理用于处理 块 运行时可能出现的错误,Exception。
   end是pl/sql的结束标记;declare,begin和exception后面没有分号,而end后面有。

2. pl/sql标识符命名规范
    当使用标识符定义变量,常量时每行只能定义一个标识符;标识符只能使用字母,数字
    下划线,$和#,如要使用其它字符则必须加上双引号;标识符名称必须以字符(A-Z a-z)
    开头,并且最大长度30个字符,如果以其他字符开头,必须加上双引号;不能使用oracle关键字
    ,如果要使用则必须加上双引号。

    注意:如果把一个带有单引号的字符串赋给一个变量,可以使用 q'[要赋的值]' 格式;
      s_var := q'[i'm a boy!]'; -- 把 i'm a boy! 赋给变量s_var
3. pl/sql的块划分为匿名块命名块子程序触发器
   匿名块:没有名字的pl/sql块。

  DECLARE
   v_name varchar2(10);
 BEGIN
   SELECT t.name INTO v_name FROM emp t WHERE t.id = &id;
   dbms_output.put_line('名字是:' || v_name);
 END;
3. 命名块:有名字(标示)的pl/sql,块前使用《》加以标示
        <<block1>>
 DECLARE
   v_name varchar2(10);
   v_age  number(4);
 BEGIN
   <<block2>>
   BEGIN
     SELECT t.name INTO v_name FROM emp t WHERE t.id = &id;
     dbms_output.put_line('名字是:' || v_name);
   END;
   SELECT t.age INTO v_age FROM emp t WHERE t.name = v_name;
   dbms_output.put_line('年龄:' || v_age);
 END;

 
 3.子程序:包括存储过程函数
   存储过程:用于执行特定的操作,可以指定输入参数(in)或者输出参数(out),不指定默认输入。

 CREATE PROCEDURE test_update(name VARCHAR2, age NUMBER) IS
 BEGIN
   UPDATE emp t SET t.age = number WHERE t.name = name;
   COMMIT;--这里不加可以吗?
 END;

 
   函数:用于返回特定数据。函数的头部必须包含return字句,函数体内必须包含return语句返回的数据
   

     CREATE FUNCTION test_function(name VARCHAR2, age NUMBER) RETURN VARCHAR2 IS
   v_addr VARCHAR2(100);
 BEGIN
   SELECT '中国.山东' || t.addr
     INTO v_addr
     FROM emp t
    WHERE t.name = name
      and t.age = age;
   RETURN v_addr;
 END;

 
   包:用于逻辑组合相关的存储过程和函数,由包规范和包体组成。包规范用于定义公用的常量, 变量,存储过程和函数。
       

-- 包规范知识定义了一个存储过程和函数而没有实现代码
 CREATE PACKAGE test_pkg IS
   PROCEDURE test_procedure(name VARCHAR2, age NUMBER);
   FUNCTION test_function(name VARCHAR2, age NUMBER) RETURN NUMBER;
 END;

    包体:
         

CREATE PACKAGE BODY test_pkg IS
   PROCEDURE test_procedure(name VARCHAR2, age NUMBER) IS
   BEGIN
     UPDATE emp t set t.name = name WHERE t.age = age;
   END;
   FUNCTION test_function(name VARCHAR2, age NUMBER) RETURN NUMBER IS
     v_slary NUMBER(4, 1);
   BEGIN
     SELECT t.slary
       INTO v_slary
      WHERE t.name = name
        and t.age = age;
     RETURN NUMBER v_slary;
   END;
 END;

 

   在使用包中的存储过程和函数时,必须在存储过程或者函数名之前加上包名作为前缀
   (包名.子程序名)
       
4. 触发器:隐形执行的存储过程,必须指定触发事件以及触发操作,触发事件包括insert,update和delete;而触发操作实际上是一个pl/sql块。
     

  -- 当更新dept表中的d_name列时更新emp表中的d_name列
CREATE TRIGGER test_trigger
   AFTER UPDATE OF d_name ON dept
   FOR EACH ROW
 BEGIN
   UPDATE emp t SET t.d_name = :new.d_name WHERE t.d_name = o :d_name;
 END;

 

5. pl/sql数据类型:标量(Scalar)类型,复合(Composit)类型,参照(Reference)类型和LOB(Large Object)类型。

        标量(Scalar)类型:只能存放单个数值的变量;定义标量时必须指定数据类型。
        varchar2(n) : 定义可变长字符串,最大值32767字节;定义变量时必须指定长度。varchar2定义 列时最大长度是4000字节。
        char(n) : 定义变量时如果没有指的那个长度默认为1, 定义列数据时最大长度是2000字节。
        boolean :布尔类型值为true,false和null。表列不能使用该数据类型
        binary_integer:定义整数-2147483647到2147483647
        binary_float binary_double 是oracle10新增,分别用来定义单精度浮点数和双精度浮点数
        binary_float 应带有后缀f ,binary_double应带后缀d
 
    定义标量变量:

 

 v_name varchar2(10);
 v_age number(10,4);--整数部分是6位
 v_sex constant vachar(10):='woman';
 v_date Date;
 v_flag boolean not null default false;


   --如果在定义变量时没有指定初始值那么变量的初始值为null。

 

 

  %TYPE:当使用%type定义变量时,它会按照数据库列或者其他变量来确定新变量的类型和长度。
  

  DECLARE
   v_name   emp.name%TYPE;
   v_t_name v_name%TYPE;
   v_age CONSTANT NUMBER(2) := 11;
 BEGIN
   SELECT name, age INTO v_name, v_age FROM emp WHERE emp.id = '45';
   v_t_name := v_name;
   dbms_output.put_line('名字是:' || v_t_name);
 END;

 

 

 复合(Composit)类型:
    复合变量用来存放多个值的变量。pl/sql复合数据类型包括记录,表,嵌套表以及数组(varry);
  记录:首先在定义部分定义记录类型和记录变量,然后再执行部分引用该记录变量

 DECLARE
   TYPE test_type_emp IS RECORD(
     v_name emp.name%TYPE,
     v_age  emp.age%Type);
   v_r_emp test_type_emp; -- 定义一个record变量test_type_emp
 BEGIN
   SELECT name, age INTO v_r_emp FROM emp WHERE emp.id = '45';
   dbms_output.put_line('名字是:' || v_r_emp.v_name);
 END;

 

 

    嵌套表(Nested Table):类似高级语言的数组,只是嵌套表的个数没有限制。嵌套表可以作为
表列的数据类型。pl/sql表不能作为表列的数据类型。

 

 --创建嵌套表
CREATE OR REPLACE TYPE test_emp_type AS OBJECT
 (
   name varchar2(10),
   age  number
 ) ;

 

CREATE OR REPLACE TYPE emp_type IS TABLE OF test_emp_type;

 

 

 

       创建嵌套表后,就可以在表列或对象属性中将其作为用户自定义类型来引用。
       值得注意的是当使用嵌套表作为表列时必须专门为其制定专门的存储表。
        

CREATE TABLE hoom(
    hname varchar2(100);
    vemp emp_array
 )NESTED TABLE STORE AS vemp

 

       数组:类似嵌套表,varray的元素是有限制的。当使用varray数组时要先建立一个varray。当建立了varry类型之后,可以在表列或对象属性中将其作为用户自定义数据类型。

     

CREATE OR REPLACE TYPE test_emp_type AS OBJECT
 (
   name varchar2(10),
   age  number
 )
 ;

CREATE OR REPLACE TYPE emp_array IS VARRY(10) OF test_emp_type;
        
CREATE TABLE hoom(
    hname varchar2(100);
    vemp emp_array
 )

         
 参照变量: 用于存放数值指针的变量,使用参照变量,可以使应用程序共享相同对象包括游标(Cursor)和对象类型变量(obj_type)
       

 DECLARE
   TYPE c1 IS REF CURSOR;
   emp_cursor c1;
   v_name     emp.name%TYPE;
   v_age      emp.age%TYPE;
 BEGIN
   OPEN emp_cursor FOR
     SELECT name, age FROM emp WHERE emp.name = 'a';
   LOOP
     FETCH emp_cursor
       INTO v_name, v_age;
     EXIT WHEN emp_cursor%notfound;
     dbms_output.put_line('名字是:' || v_name);
   END LOOP;
   CLOSE emp_cursor;
 END;

 

 

分享到:
评论

相关推荐

    Oracle Database 12c PL/SQL开发指南 实例源代码

    1. **PL/SQL基础**:PL/SQL的基础语法,如变量声明、数据类型、流程控制语句(如IF-THEN-ELSIF,FOR循环,WHILE循环)、异常处理(BEGIN-EXCEPTION-END结构)等。 2. **函数与过程**:如何定义和调用用户自定义的...

    oracle 9i pl/sql程序设计笔记

    #### PL/SQL基础知识概览 **标题与描述**:本文档围绕“Oracle 9i PL/SQL程序设计笔记”这一核心主题,深入探讨了PL/SQL语言的基础知识及其在Oracle 9i数据库环境中的应用。 **关键词**:Oracle 9i、PL/SQL #### ...

    ORACLE PL/SQL从入门到精通

    ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括触发器、过程、函数、软件包、异常处理、游标、循环、分支、变量使用、数据库安装等关键知识点。 触发器是数据库中用来保证数据...

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

    首先,让我们探讨Oracle PL/SQL的基础知识。PL/SQL是Oracle数据库的内置编程语言,由块构成,包括声明部分、执行部分和异常处理部分。块可以是匿名块(即直接在SQL*Plus或其他工具中编写的一次性执行的代码),也...

    oracle sql and pl/sql

    ### Oracle SQL 和 PL/SQL 知识点 #### 一、Oracle SQL 概述 1. **定义**:Oracle SQL 是一种结构化查询语言(Structured Query Language),它是用于管理关系数据库的标准语言。 2. **功能**: - 数据定义(Data ...

    Oracle 12c PL/SQL程序设计终极指南

    本书以Oracle的最新版本12c为基础,呈现的是最新的PL/SQL技术,这一点也优于已出版的同类书.全书以一个综合性的人力资源项目为驱动,不仅能将各个理论知识点很好地融入实践,而且还能让读者体验完整的项目实操过程...

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

    ### Oracle PL/SQL程序设计(第5版)(上下册)知识点概述 ...本书不仅覆盖了PL/SQL的基础知识,还包括了大量的实战经验和高级主题,对于想要深入了解和掌握Oracle数据库的读者来说是非常宝贵的资源。

    PL/SQL Developer 远程连接Oracle数据库

    PL/SQL Developer是一款专为Oracle数据库设计的集成开发环境,它极大地简化了PL/SQL语言的编写、调试和管理任务。远程连接Oracle数据库是PL/SQL Developer的一项关键功能,允许用户在本地计算机上操作和管理远程...

    oracle pl/sql fundamentals

    Oracle PL/SQL Fundamentals是Oracle University为学生设计的一份培训指南,旨在深入理解并掌握Oracle数据库中的PL/SQL编程基础。PL/SQL是Oracle数据库特有的结构化查询语言扩展,它结合了SQL的强大功能与过程性编程...

    PL/SQL编程基础知识

    作为Oracle数据库的核心组成部分之一,PL/SQL在数据库应用程序开发中扮演着至关重要的角色。 **1.1 PL/SQL可用的SQL语句** 在PL/SQL环境中可以使用的SQL语句主要包括以下几种: - **INSERT**:用于向表中插入新...

    精通Oracle 10g SQL和PL/SQL

     本书是专门为oracle开发人员而提供的编程指南 通过学习本书 读者不仅可以掌握编写sql语句和pl/sql块的基础知识 而且还可以掌握sql高级特征 正则表达式 flashback查询 merge语句 sql:1999连接 和pl/sql高级特征 ...

    Oracle PL/SQL专家指南-高级PL/SQL解决方案的设计与开发

    1. **PL/SQL基础**:涵盖PL/SQL的基本语法,包括变量声明、常量定义、条件语句(IF-THEN-ELSIF-ELSE)、循环结构(WHILE, FOR)、异常处理(BEGIN-EXCEPTION-END)以及子程序(PROCEDURE和FUNCTION)的创建与调用。...

    pl/sql最新中文手册

    1. **PL/SQL基础**:手册可能会从基础开始,介绍PL/SQL的基本结构,包括声明变量、常量、游标、记录类型等。还会讲解如何编写存储过程、函数和触发器。 2. **控制流程语句**:这包括条件判断(IF-THEN-ELSIF-ELSE)...

    Oracle PL/SQL学习官方教材

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

    精通oracle10g PL/SQL编程

    本书《精通Oracle10g PL/SQL编程》为读者提供了一个系统性的学习路径,从基础知识到高级应用,从具体技巧到最佳实践,涵盖了PL/SQL编程的方方面面。通过本书的学习,读者将能够有效地提高Oracle数据库编程的效率和...

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

    Oracle PL/SQL是一种强大的编程语言,它将数据库管理和应用程序逻辑紧密结合起来,是Oracle数据库系统中的核心组件之一。这本书“Oracle PL/SQL实例编程”显然旨在深入讲解如何利用PL/SQL进行实际开发工作,通过实例...

    Oracle 11g pl/sql编程

    2. PL/SQL基础:包括PL/SQL块的结构、变量和数据类型、控制流语句(如IF语句、循环)、错误处理和异常管理。 3. 过程和函数:解释如何在PL/SQL中创建和使用过程和函数,包括参数传递、返回值和子程序的封装。 4. ...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一)

    通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录...

    Oracle8 PL/SQL程序设计

    学习Oracle 8 PL/SQL程序设计,你需要掌握以下几个关键知识点: 1. **基本语法和数据类型**:了解PL/SQL的基本结构,包括声明变量、常量、游标、表类型等,并熟悉各种内置数据类型,如NUMBER、VARCHAR2、DATE等。 ...

    精通Oracle 10g PL/SQL编程

    通过学习本书,读者不仅可以掌握PL/SQL的基础编程知识(嵌入SQL语句和编写子程序),而且还可以掌握PL/SQL的所有高级开发特征(使用记录类型、集合类型、对象类型和大对象类型)。另外,本书还为应用开发人员提供了大量...

Global site tag (gtag.js) - Google Analytics