`
胡杨大爷
  • 浏览: 4732 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Oracle学习笔记(五)PL/SQL

阅读更多

1.一个完整的pl/sql块的结构

 

declare
   Declarations
begin
   Excutable Code
exception
  Exceptional handlers
end;

 

  ①定义部分

   定义部分以关键字declare为标识从declare开始到begin结束。以此主要定义要使用的常量、变量、数据类型、游标、异常处理名称等。PL/SQL所有需要定义的内容,必须在该部分集中定义,而不能像某些高级语言那样可以在程序执行过程中定义。该部分是可选的。

  ②执行部分

   执行部分以begin为标识。以end为结束标识。通过一系列语句和流程控制,实现数据查询、数据操纵、事务控制、游标处理等数据库操作的功能。执行部分是必须的。

  ③异常处理部分

  异常处理部分以关键字exception为标识,以关键字end为结束标识。用于处理执行过程中产生的异常。该部分是可选的。

2.匿名块

 

匿名块是指动态生成,只能执行一次的块。它没有名字,不能由其他应用程序调用。
①
SQL> set serveroutput on
SQL> begin
  2    dbms_output.put_line('This is the first anonymous block.');
  3  end;
  4  /
This is the first anonymous block.

PL/SQL 过程已成功完成。

②
SQL> declare
  2   v_name varchar(20);
  3  begin
  4   select name into v_name from students where sid=10228;
  5    dbms_output.put_line('学生姓名:'||v_name);
  6  end;
  7  /
学生姓名:林紫寒

PL/SQL 过程已成功完成。

③从控制台读入学生id,然后输入它的姓名
SQL> declare
  2   v_name varchar(20);
  3  begin
  4    select name into v_name from students where sid=&stu_id;
  5    dbms_output.put_line('学生姓名:'||v_name);
  6  exception
  7   when no_data_found then
  8    dbms_output.put_line('No data found!');
  9  end;
 10  /
输入 stu_id 的值:  12343
原值    4:   select name into v_name from students where sid=&stu_id;
新值    4:   select name into v_name from students where sid=12343;
No data found!

PL/SQL 过程已成功完成。
————————————————————————————————————
SQL> /
输入 stu_id 的值:  10212
原值    4:   select name into v_name from students where sid=&stu_id;
新值    4:   select name into v_name from students where sid=10212;
学生姓名:欧阳春岚

PL/SQL 过程已成功完成。

 

3.命名块

  PL/SQL命名块是指一次编译可以多次运行的PL/SQL程序,包括自定义函数、过程、包、触发器等。他们编译后放在服务器中,由应用程序或系统在特定的条件下进行调用。

 具体实例见后文

 

4.PL/SQL基本语法

  ①.只有PL/SQL可以适用的一部分数字:20E3、2.232E-4、7*10**2(结果为700)。

  ②.如果文字中包含单引号,可以使用([]、()、<>)来分隔。但是这时需要使用q+单引号+[字符串]+单引号.

  ③

1.
  SQL> declare
  2   v_student students%rowtype;
  3  begin
  4   select * into v_student from students where sid=10212;
  5   dbms_output.put_line('姓名  性别  出生日期 ');
  6   dbms_output.put_line(v_student.name || v_student.sex || v_student.dob);
  7  end;
  8  /
姓名  性别  出生日期
欧阳春岚女12-3月 -89

PL/SQL 过程已成功完成。


2.
SQL> declare
  2   v_id department.did%type;
  3   v_name department.dname%type;
  4   v_address department.address%type;
  5  begin
  6   select * into v_id,v_name,v_address from department where did=&id;
  7   dbms_output.put_line('系部名称:'||v_name);
  8   dbms_output.put_line('系部地址:'||v_address);
  9  end;
 10  /
输入 id 的值:  102
原值    6:  select * into v_id,v_name,v_address from department where did=&id;
新值    6:  select * into v_id,v_name,v_address from department where did=102;
系部名称:电气工程
系部地址:2号教学楼

3.

SQL> declare
  2    v_id students.sid%type:=0199;
  3    v_mid students.mid%type:=NULL;
  4    v_name students.name%type:='张三';
  5    v_sex students.sex%type:='女';
  6    v_dob students.dob%type:='07-5月-2010';
  7    v_specialty students.specialty%type:='计算机';
  8  begin
  9   insert into students values(v_id,v_mid,v_name,v_sex,v_dob,v_specialty);
 10  end;
 11  /

PL/SQL 过程已成功完成。

4.IF-THEN-ELSEIF-THEN-ELSE-ENDIF
SQL> DECLARE
  2     v_id teachers.tid%TYPE;
  3     v_title teachers.title%TYPE;
  4  BEGIN
  5    v_id := &teacher_id;
  6    SELECT title INTO v_title
  7      FROM Teachers WHERE tid = v_id;
  8    IF v_title = '教授' THEN
  9       UPDATE Teachers
 10         SET wage = 1.1*wage WHERE tid=v_id;
 11    ELSIF v_title = '高工' OR v_title= '副教授' THE
 12       UPDATE Teachers
 13         SET wage = 1.05*wage WHERE tid = v_id;
 14    ELSE
 15       UPDATE Teachers
 16         SET wage = wage+100 WHERE tid = v_id;
 17    END IF;
 18  END;
 19  /
输入 teacher_id 的值:  10103
原值    5:   v_id := &teacher_id;
新值    5:   v_id := 10103;

PL/SQL 过程已成功完成。

5.CASE-WHEN-THEN-END CASE

 SQL> DECLARE
  2     v_id Teachers.tid%TYPE;
  3     v_title Teachers.title%TYPE;
  4  BEGIN
  5    v_id := &teacher_id;
  6    SELECT title INTO v_title
  7      FROM Teachers WHERE tid = v_id;
  8    CASE
  9      WHEN v_title = '教授' THEN
 10         UPDATE Teachers
 11           SET wage = 1.1*wage WHERE tid = v_id;
 12      WHEN v_title = '高工' OR v_title= '副教授' THEN
 13         UPDATE Teachers
 14           SET wage = 1.05*wage WHERE tid = v_id;
 15      ELSE
 16         UPDATE Teachers
 17           SET wage = wage+100 WHERE tid = v_id;
 18    END CASE;
 19  END;
 20  /
输入 teacher_id 的值:  10103
原值    5:   v_id := &teacher_id;
新值    5:   v_id := 10103;

PL/SQL 过程已成功完成。
  

 

循环结构:

 

1.LOOP循环
  SQL> declare
  2   v_i int:=1;
  3   v_sum int:=0;
  4  begin
  5   loop
  6    v_sum:=v_sum+v_i;
  7    exit when v_i=10;
  8    v_i:=v_i+1;
  9    dbms_output.put_line('The sum is:'||v_sum);
 10  end loop;
 11  end;
 12  /
The sum is:1
The sum is:3
The sum is:6
The sum is:10
The sum is:15
The sum is:21
The sum is:28
The sum is:36
The sum is:45

PL/SQL 过程已成功完成。

2.WHILE循环
 SQL> declare
  2   v_i int:=1;
  3   v_sum int:=0;
  4  begin
  5   while v_i<11 loop
  6    v_sum:=v_sum+v_i;
  7    v_i:=v_i+1;
  8   end loop;
  9   dbms_output.put_line('The result is:'||v_sum);
 10  end;
 11  /
The result is:55

PL/SQL 过程已成功完成。

3.FOR循环
  SQL> declare
  2   i int:=1;
  3   v int:=0;
  4  begin
  5   for i in 1..10 loop
  6    v:=i+v;
  7   dbms_output.put_line('The result is:'||v);
  8  end loop;
  9  end;
 10  /
The result is:1
The result is:3
The result is:6
The result is:10
The result is:15
The result is:21
The result is:28
The result is:36
The result is:45
The result is:55

PL/SQL 过程已成功完成。

5.GOTO和NULL语句。实现跳转
SQL> declare
  2   i int:=1;
  3   v int:=0;
  4  begin
  5   loop
  6     v:=v+i;
  7     if i=10 then
  8       goto out;
  9     end if;
 10     i:=i+1;
 11  end loop;
 12  <<out>>
 13   NULL;
 14  dbms_output.put_line('The i is:'||i);
 15  end ;
 16  /
The i is:10

PL/SQL 过程已成功完成。

 

 

分享到:
评论
1 楼 胡杨大爷 2010-12-11  
过几天再更新吧

相关推荐

    ORACLE PL/SQL从入门到精通

    ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括...这本书籍将为读者提供一个全面、系统的学习路径,帮助数据库管理员、开发人员深入理解并掌握ORACLE PL/SQL的强大功能和应用技巧。

    pl/sql学习笔记

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

    pl/sql数据库学习笔记

    PL/SQL数据库学习笔记 PL/SQL是一种高级的程序语言,主要用于Oracle数据库管理系统中。下面是PL/SQL数据库学习笔记的知识点总结。 一、基本原则 *瀑布模型:需求分析→设计(概要设计,详细设计:SQL语句,变量...

    PL/SQL学习笔记

    PL/SQL是Oracle公司开发的一种过程化SQL扩展,它是Oracle数据库的重要组成部分,用于在数据库服务器上编写存储过程、函数、触发器、包等可执行代码。PL/SQL可以处理复杂的数据操作和业务逻辑,支持编程结构如循环、...

    oracle/SQL和PL/SQL课堂笔记

    Oracle SQL和PL/SQL是数据库管理和编程的重要工具,主要用于...这些笔记提供了学习SQL和Oracle数据库操作的基本框架,对于初学者来说是非常有价值的资源。通过实践和深入学习,可以掌握更复杂的查询技巧和PL/SQL编程。

    PL/SQL学习教程,附笔记

    PL/SQL,全称是Procedural Language/Structured Query Language,是Oracle数据库提供的一种结合了SQL语言和过程式编程的编程环境。它扩展了SQL的功能,使得开发人员能够编写复杂的数据库应用程序,处理事务、实现...

    我的PL/SQL学习笔记(一)

    在这个“我的PL/SQL学习笔记(一)”中,我们将探讨PL/SQL的基础知识,包括其语法结构、变量声明、流程控制以及如何与Oracle数据库中的数据进行交互。 首先,PL/SQL的基本结构分为声明部分、执行部分和异常处理部分...

    PL/SQl超级笔记

    总的来说,“PL/SQL超级笔记”应该涵盖了从基本语法到高级特性的全面教程,通过学习,新手可以逐步掌握如何使用PL/SQL进行数据库编程,从而更好地管理和操作Oracle数据库。配合"oracle_ppt"中的PPT材料,学习效果会...

    PL/SQL听课笔记

    ### PL/SQL听课笔记 #### 一、PL/SQL简介 **PL/SQL**(Procedural Language for SQL)是一种专门为Oracle数据库设计的过程化语言扩展。它是在标准SQL基础上增加了一系列高级编程特性,如变量、控制结构、函数、...

    oraclePL/SQL精华笔记

    此文档由个人总结快速学习pl/sql的案例及说明,也是快速查询pl、sql开发的精华文档,在此提供给大家学习与查阅

    oracle笔记 (PL-SQL)

    Oracle笔记(PL-SQL)是关于数据库管理和编程的一个重要主题,主要聚焦于Oracle数据库系统中的结构化查询语言(SQL)的扩展——PL/SQL。PL/SQL是一种过程化语言,结合了SQL的功能,使得开发者能够编写复杂的数据库应用...

    oracle复习笔记之PL/SQL程序所要了解的知识点

    在Oracle数据库环境中,PL/SQL是一种强大的编程语言,它扩展了SQL的功能,使得数据库操作更加灵活和高效。本文将深入探讨PL/SQL程序设计中的一些关键知识点,包括基本语法、记录类型、流程控制、游标使用、异常处理...

    PL/SQL文本文档

    PL/SQL,全称为Procedural Language/Structured Query Language,是Oracle数据库的一种扩展,它将SQL(结构化查询语言)与过程式编程语言相结合,为数据库管理提供了强大的编程能力。以下是对PL/SQL的一些核心知识点...

    PL/SQL存储过程笔记

    ### PL/SQL 存储过程知识点详解 #### 1. PL/SQL 存储过程概述 PL/SQL(Procedure Language for SQL)是...通过这些基本概念的学习,可以帮助开发者更好地掌握 PL/SQL 的使用技巧,提高数据库应用程序的效率和性能。

    PL/SQL学习笔记5

    在PL/SQL的学习中,分区是数据库管理大型数据集的一种高效方法,特别是在处理大数据量时。本篇笔记主要探讨了何时应该使用分区以及Oracle支持的分区类型。 首先,当面对超过2GB的大数据表时,分区是十分必要的。这...

Global site tag (gtag.js) - Google Analytics