`

PL/SQL 编程入门

 
阅读更多

PL/SQL 是基于SQL 语言的一种扩展,是运行在Oracle服务器端的一种语句,以下给出PL/SQL 的基本使用方式

基本语法:

--数据类型
declare 
    type table_datatype is table of varchar2(50) index by binary_integer; --表类型
    v_table table_datatype;
    i_provider_id  int ;
    v_provider_name varchar(20);
    v_provider_address varchar(20);
    type record_datatype is record (
         id int ,
         name varchar(20),
         address varchar(20)
    );
    v_record record_datatype ;
begin 
    v_table(0) := '张三';
    v_table(1) := '李四';
    v_table(2) := '王五';
    dbms_output.put_line(v_table(0)||','||v_table(1)||','||v_table(2));
    --select into 的 语法必须返回单行,否则会出现错误
    select provider_id,provider_name,provider_address into i_provider_id,v_provider_name,v_provider_address from  t_provider_info where provider_id=1;
    dbms_output.put_line(i_provider_id||','||v_provider_name||','||v_provider_address);
    --select into 给table类型的变量赋值
    select provider_id,provider_name,provider_address into v_table(0),v_table(1),v_table(2) from  t_provider_info where provider_id=1;
    dbms_output.put_line('table:'||v_table(0)||','||v_table(1)||','||v_table(2));
    v_record.id :=1;
    v_record.name :='赵六';
    v_record.address :='广州';
    dbms_output.put_line(v_record.id||','|| v_record.name||','||v_record.address);
    select provider_id,provider_name,provider_address  into  v_record from  t_provider_info where provider_id=2;
    dbms_output.put_line(v_record.id||','|| v_record.name||','||v_record.address);
    --循环的语法 loop ,end loop exit when 
    declare 
      v_count int :=0 ;
    begin
    loop 
       v_count := v_count+1 ;
       exit  when v_count=5;
       dbms_output.put_line('v_count:'||v_count);                       
    end loop ;
    end ;
    --循环语法 when ,loop end loop;
    declare 
       v_count int :=0;
    begin
       while  v_count<>5 loop
       dbms_output.put_line('while 循环:v_count:'||v_count);  
       v_count := v_count+1;                     
       end loop ;
    end ;
    --循环语法 for loop end loop;
    declare 
       v_count int :=0;
    begin
       for v_ount in 2..5 loop 
       dbms_output.put_line('for 循环:v_count:'||v_count); 
       v_count :=v_count+1 ; 
       end loop ; 
    end ;
    
    -- if的语法
    declare 
       v_count int := 6 ;
    begin
       if  v_count=5 then 
       dbms_output.put_line('满足条件5:v_count:'||v_count);
       elsif  v_count=3 then
       dbms_output.put_line('满足条件3:v_count:'||v_count);
       else 
       dbms_output.put_line('不满足条件3、5:v_count:'||v_count);
       end if ;
    end ;
    --case when 的语法
    declare 
        v_count int :=2 ;
     begin 
        case v_count
        when 1 then 
        dbms_output.put_line('满足条件1:v_count:'||v_count);
        when 2 then 
        dbms_output.put_line('满足条件2:v_count:'||v_count);
        else 
        dbms_output.put_line('不满足条件1、2:v_count:'||v_count);
        end case ;
     end ;
     
     --游标的使用 ,使用fetch的方式遍历游标,必须显示打开和关闭游标
     declare 
        cursor c_cursor is select provider_id,provider_name,provider_address from t_provider_info ; --定义游标
        i_provider_id  int ;
        v_provider_name varchar(20);
        v_provider_address varchar(20);
     begin
         open c_cursor;--打开游标
         loop 
              fetch c_cursor  into i_provider_id,v_provider_name,v_provider_address;
              dbms_output.put_line('游标的使用:'||i_provider_id||','||v_provider_name||','||v_provider_address);
              exit  when  c_cursor%notfound ;
         end loop ;
         close c_cursor;
     end ;
     
     --使用for  循环的方式遍历游标 不需要显示打开后者关闭游标
     declare 
      cursor c_cursor is select provider_id,provider_name,provider_address from t_provider_info ; --定义游标
      c_row c_cursor%rowtype ; --定义一个游标变量
      begin
       for c_row in c_cursor loop 
           dbms_output.put_line('隐式游标的使用:v_provider_name'||c_row.provider_id);
       end loop;
      end ;
      
      --调用有返回值的存储过程
      declare 
        v_name varchar(20) ;
        v_id int ;
      begin 
        pro_provider_info(1,v_name,v_id);
        dbms_output.put_line('v_name:'||v_name||',v_id:'||v_id);
      end ;
end ;
/

 过程、触发器 函数的语法:

存储过程:

create or replace procedure pro_provider_info(id in int,name out varchar2,r_id out int)
as
  v_provider_name  varchar(50) := '广州发展中心';
  cursor c_cursor is select provider_id,provider_name,provider_address from t_provider_info where provider_id=id ; 
  --定义一个游标行的变量 
  c_row c_cursor%rowtype ;
  provider_id t_provider_info.provider_id%type ; --type 用来避免硬编码的错失
begin
   --隐式调用  
   for c_row in c_cursor loop
       provider_id := c_row.provider_id ;
       --更新对应的ID 的值
       if provider_id=id then 
       update t_provider_info set provider_name=v_provider_name where provider_id=id;
       name := v_provider_name;
       r_id := id;
       commit ;   
       end if ;
   end loop ;   
end ;

 触发器:

--触发器
create or replace trigger tri_provider_info
after insert or update or delete  on t_provider_info for each row
begin
      declare 
           v_insert varchar(20) :='插入操作' ;
           v_update varchar(20) :='更新操作' ;
           v_delete varchar(20) :='删除操作' ;
      begin
            if inserting then 
              insert into t_log(oper_id,oper_name) values(t_global_seq.nextval,v_insert);
              dbms_output.put_line('插入操作');
            elsif updating then
            --,:old.provider_id,:new.provider_id
              insert into t_log(oper_id,oper_name) values(t_global_seq.nextval,v_update);
              dbms_output.put_line('更新操作');    
            elsif deleting then
              insert into t_log(oper_id,oper_name) values(t_global_seq.nextval,v_delete);
              dbms_output.put_line('删除操作');
            else 
              dbms_output.put_line('无法明确的操作');   
            end if ;
            --commit ;  在触发器中不需要手动提交
      end ;
end ;
/

 

不断完善中

分享到:
评论

相关推荐

    ORACLE PL/SQL从入门到精通

    循环语句是PL/SQL编程中用来重复执行一组语句的结构,包括loop、while、for三种形式,它们各自有不同的使用场景和语法。 分支条件语句在PL/SQL中用来根据不同的条件执行不同的代码分支,主要包括CASE表达式和if-...

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

    这本书"Oracle PL/SQL从入门到精通"的配套源代码,显然是为了帮助读者通过实践来深入理解和掌握Oracle数据库的编程技术。 首先,让我们探讨Oracle PL/SQL的基础知识。PL/SQL是Oracle数据库的内置编程语言,由块构成...

    PL/SQL入门到精通书的源代码

    PL/SQL是Oracle数据库系统中的过程式语言,它结合了SQL的数据操作能力与结构化编程语句,使得开发者能够创建复杂的...对于想要系统学习PL/SQL的开发者来说,这是一个宝贵的资源,可以帮助你逐步成为PL/SQL编程的专家。

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

     本书是专门为oracle应用开发人员提供的sql和pl/sql编程指南。通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法...

    Oracle PL/SQL编程及最佳实践

    Oracle PL/SQL 编程及最佳实践 Oracle PL/SQL 是一种高级编程语言,用于开发 Oracle 数据库中的存储过程、函数和触发器。PL/SQL language 提供了强大的编程能力,可以实现复杂的业务逻辑,并且与 Oracle 数据库紧密...

    基本PL/SQL编程

    本指南旨在为初学者提供一个基础的PL/SQL编程入门,帮助他们理解并掌握这个强大的工具。 ### 第一章 PL/SQL程序设计简介 PL/SQL(Procedural Language/Structured Query Language)结合了SQL的查询功能和一种类似C...

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

     本书是专门为oracle应用开发人员提供的sql和pl/sql编程指南。通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法...

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

    #### 一、PL/SQL编程基础 - **PL/SQL简介**:PL/SQL(Procedural Language for SQL)是Oracle数据库的一种内嵌式过程化语言,用于增强SQL的功能。它允许在SQL查询的基础上添加控制流语句、变量定义、错误处理等特性...

    Oracle PL/SQL从入门到精通 配书教学视频 第11章

    Oracle PL/SQL从入门到精通 配书教学视频 第11章

    PL/SQL开发文档1

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

    Oracle 11g SQL和PL SQL从入门到精通〖送源代码〗

    本书是专门为Oracle应用开发人员提供的SQL和PL/SQL编程指南。通过学习本书,读者不仅可以掌握Oracle常用工具Oracle Universal Installer、Net Comfiguration Assistant、SQL Developer、SQL*Plus的作用及使用方法,...

    Oracle高级开发课程之PL-SQL编程入门视频

    教程名称:Oracle高级开发课程之PL-SQL编程入门视频课程目录:【】PL_SQL编程课程_-lesson3【】PL_SQL编程课程_lesson5-2(完结)【】PL_SQL编程课程_最佳入门教程-intr1【】PL_SQL编程课程_最佳入门教程-lesson1【】...

    pl/sql学习笔记

    PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库中的过程式编程语言,它结合了SQL查询语句和传统的过程式编程元素,使得在数据库管理中进行复杂逻辑处理成为可能。以下是对PL/SQL的学习笔记...

    oracle 经典资料及PL/SQL 使用指南 英文版

    二、PL/SQL编程 1. PL/SQL块结构:PL/SQL由声明部分、执行部分和异常处理部分组成。理解块的结构对于编写有效程序至关重要。 2. 变量与常量:PL/SQL支持声明变量和常量,用于存储数据。学习如何声明、初始化和改变...

    Oracle+11g+SQL和PL+SQL从入门到精通

    4. **PL/SQL基础**:学习PL/SQL的编程元素,如变量、常量、条件语句(IF-THEN-ELSIF-ELSE)、循环(WHILE、FOR)、异常处理(BEGIN-EXCEPTION-END)以及过程和函数的创建与调用。 5. **PL/SQL高级**:探讨PL/SQL中...

    Oracle PL/SQL语言入门基础

    Oracle PL/SQL是一种专为Oracle数据库设计的编程语言,它扩展了标准的SQL,使得开发者能够在数据库级别进行更复杂的逻辑处理。PL/SQL是Oracle服务器的一部分,作为一个内置引擎,它处理PL/SQL程序块,而SQL执行器则...

    pl/sql精通

    《PL/SQL精通》这本书是针对Oracle数据库管理系统中PL/SQL编程语言的深入学习指南。Oracle SQL是Oracle数据库系统的核心语言,而PL/SQL则扩展了SQL的功能,提供了过程化编程的能力,使得数据库管理和开发更加高效和...

    Oracle 11g PL/SQL 从入门到精通(视屏讲解)第一章

    1. **PL/SQL简介**:首先会介绍PL/SQL的基本结构和特性,它是如何与SQL交互的,以及为何在Oracle数据库环境中使用PL/SQL编程。 2. **PL/SQL块**:PL/SQL代码是以块为单位编写的,包括声明部分、执行部分和异常处理...

    PL/SQL中文帮助手册

    这个"PL/SQL中文帮助手册"是7.0版本,对于理解和掌握PL/SQL编程具有极大的指导价值。 在PL/SQL中,主要包含以下核心概念: 1. **块结构**:PL/SQL程序的基本单元是块,包括声明部分、执行部分和异常处理部分。声明...

    Oracle Database 10g PL/SQL入门教程

    Oracle Database 10g PL/SQL入门教程是针对初学者设计的一份教程,旨在帮助读者掌握Oracle数据库系统中PL/SQL编程语言的基础知识。PL/SQL是Oracle数据库特有的编程语言,它结合了SQL(结构化查询语言)的功能,用于...

Global site tag (gtag.js) - Google Analytics