PL/SQL 处理流程

简介:
 P249 -P254  oracle8i_9i数据库基础——查看本号百度文库
  ***********PL/SQL 简介***************
  1、PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言
  2、PL/SQL 是对SQL的扩展
  3、支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制结构
  4、可用于创建存储过程、触发器和程序包,给SQL语句的执行添加程序逻辑
  5、与 Oracle 服务器和 Oracle 工具紧密集成,具备可移植性、灵活性和安全性
  §11.2.2  *********************PL/SQL 可用的SQL语句*******************
  PL/SQL是Oracle系统的核心语言,现在Oracle的许多部件都是由PL/SQL写成。在PL/SQL中可以使用的SQL语句有:
  在PL/SQL中可以用的SQL语句有:
  INSERT
  UPDATE
  DELETE
  SELECT INTO
  COMMIT
  ROLLBACK
  SAVEPOINT
  提示:在 PL/SQL中只能用 SQL语句中的 DML 部分,不能用 DDL 部分,
  如果要在PL/SQL中使用DDL(如Create  table  等)的话,只能以动态的方式来使用。
  Oracle 的 PL/SQL 组件在对 PL/SQL 程序进行解释时,同时对在其所使用的表名、列名及数据类型进行检查。
  PL/SQL 可以在SQL*PLUS 中使用。PL/SQL 可以在高级语言中使用。
  PL/SQL可以 在Oracle的 开发工具中使用。
  其它开发工具也可以调用PL/SQL编写的过程和函数,如Power Builder 等都可以调用服务器端的PL/SQL过程。
  /**************************PL/SQL块的结构如下:*************************/
  Declare
  /*   声明部分: 在此  声明PL/SQL用到的变量,类型及光标 */
  begin
  /*  执行部分:  过程及SQL 语句  , 即程序的主要部分  */
  Exception
  /* 执行异常部分: 错误处理  */
  End;
  ************************************第十三章PL/SQL 处理流程**************************
  在PL/SQL程序中,要使程序能按照逻辑进行处理,除了有些语句是SQL语句外,还必须有能进行逻辑控制的语句。下面就介绍进行处理流程的语句结构。
  §13.1  /*********条件语句**********条件语句*********************条件语句******/
  IF <布尔表达式> THEN
  PL/SQL 和 SQL语句
  END IF;
  IF <布尔表达式> THEN
  PL/SQL 和 SQL语句
  ELSE
  其它语句
  END IF;
  IF <布尔表达式> THEN
  PL/SQL 和 SQL语句
  ELSIF < 其它布尔表达式> THEN
  其它语句
  END IF;
  提示: ELSIF 不能写成 ELSEIF
  例:
  declare
  v_salary annualsalary.nannualsalary%TYPE;--annualsalary.nannualsalary%TYPE 为 "表名.字段名%type"
  v_output varchar(100);
  begin
  select nannualsalary into v_salary    --为v_salary 赋值
  from annualsalary where nyear=1997;
  if v_salary <40000 then
  v_output:='1员工工资小于40000';
  elsif v_salary>50000 then
  v_output:='1员工工资大于50000';
  else
  v_output:='1员工工资在40000到50000之间';
  end if;
  dbms_output.put_line(v_output);
  end;
  §13.2  循环
  1.  简单循环  ****************loop end loop*************loop  end loop*******************loop   end loop****************
  Loop
  要执行的语句;
  end loop;
  --此循环将执行到遇到一条 exit 语句为止.
  例1.
  declare
  x  number;
  begin
  x:= 0;
  loop
  x:=x+1;
  dbms_output.put_line(to_char(x));
  exit  when x=10;
  end loop;
  end;
  例 2.
  --节选自在线代码 simple.sql
  DECLARE
  V_counter  BINARY_INTEGER  := 1;
  Begin
  LOOP
  Inert into temp_table
  Values( v_counter, ‘loop index’ );
  V_counter  := v_counter  + 1;
  If v_counter > 50  then
  Exit;
  End if ;
  End loop;
  End;
  例 3.
  --节选自在线代码 exitwhen.sql
  DECLARE
  V_counter  binary_index := 1;
  Begin
  Loop
  Insert  into temp_table
  Values ( v_counter,’ loop index ‘ );
  Exit  when  v_counter > 50  ;
  End loop;
  End;
  2.  WHILE 循环 /********While <> Loop  End Loop*******************While <> Loop  End Loop*******************
  While 循环
  While  <布尔表达式>  loop
  要执行的语句;
  end loop;
  例1.
  declare
  x  number;
  begin
  x:= 1;
  while  x<10  loop
  dbms_output.put_line(to_char(x)||’还小于10’);
  x:= x+1;
  end loop;
  end;
  例 2.
  --节选自在线代码 while1.sql
  DECLARE
  V_counter  binary_integer  := 1;
  Begin
  While v_counter <= 50  loop
  Inert  into temp_table
  Values( v_counter, ‘loop index ‘) ;
  V_counter  := v_counter + 1;
  End loop;
  End;
  3.  数字式循环
  For 循环/****************************************For  循环计数器  in  下限 ..  上限
  For  循环计数器  in  下限 ..  上限
  loop
  要执行的语句;
  end loop;
  FOR loop_counter  IN [ REVERSE ] low_bound  . . high_bound  LOOP
  Sequence_of_statements;
  END LOOP;
  例1.
  begin
  for  I   in   1    ..   10    loop
  dbms_output.put_line(‘in=’||to_char(I));
  end loop;
  end;
  例 2.
  --节选自在线代码 forscope.sql
  DECLARE
  V_counter  number := 7;
  Begin
  Inert  into temp_table  (num_col)
  Values ( v_counter );
  For  v_counter  IN 20 .. 30 loop
  Insert  into temp_table (num_col )
  Values ( v_counter );
  End  loop;
  Inert  into temp_table (num_col )
  Values( v_counter );
  End ;
  注:*******************************************如果在for 中用 INVERSE 关键字,则循环索引将从最大向最小进行迭代.
  §13.3  ***************标号和GOTO************标号和GOTO****************标号和GOTO
  PL/SQL中GOTO语句是无条件跳转到指定的标号去的意思。语法如下:
  GOTO   label;
  . . .  . . .
  <<label>>
  例:
  --节选自在线代码 goto.sql
  DECLARE
  V_counter  BINARY_INTEGER := 1;
  Begin
  Loop
  Inert  into temp_table
  Values( v_counter,’loop count’ );
  V_counter  := v_counter + 1;
  If  v_counter > 50 then
  Goto l_endofloop;
  End  if;
  End loop;
  <<l_endofloop>>
  insert  into  temp_table ( char_col )
  values(‘Done !’);
  End ;
  §13.4  ***********NULL 语句 *******************NULL 语句 *****************NULL 语句
  在 PL/SQL 程序中,null语可以用 null 语句来说明“不用做什么”的意思。如:
  declare
  . . .
  begin
  …
  if( v_num is null then
  goto print1;
  end if;
  …
  <<print1>>
  NULL;  -- 不需要处理任何数据。

  End;


本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2011/07/07/2100385.html,如需转载请自行联系原作者

目录
相关文章
|
10月前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
133 2
|
12月前
|
SQL 缓存 关系型数据库
揭秘MySQL一条SQL语句的执行流程
以上步骤共同构成了MySQL处理SQL语句的完整流程,理解这一流程有助于更有效地使用MySQL数据库,优化查询性能,及时解决可能出现的性能瓶颈问题。
272 7
|
SQL Oracle 关系型数据库
SQL与PL/SQL:数据库编程语言的比较
【8月更文挑战第31天】
382 1
|
Java 测试技术 容器
从零到英雄:Struts 2 最佳实践——你的Web应用开发超级变身指南!
【8月更文挑战第31天】《Struts 2 最佳实践:从设计到部署的全流程指南》深入介绍如何利用 Struts 2 框架从项目设计到部署的全流程。从初始化配置到采用 MVC 设计模式,再到性能优化与测试,本书详细讲解了如何构建高效、稳定的 Web 应用。通过最佳实践和代码示例,帮助读者掌握 Struts 2 的核心功能,并确保应用的安全性和可维护性。无论是在项目初期还是后期运维,本书都是不可或缺的参考指南。
132 0
|
SQL 存储 数据管理
掌握SQL Server Integration Services (SSIS)精髓:从零开始构建自动化数据提取、转换与加载(ETL)流程,实现高效数据迁移与集成——轻松上手SSIS打造企业级数据管理利器
【8月更文挑战第31天】SQL Server Integration Services (SSIS) 是 Microsoft 提供的企业级数据集成平台,用于高效完成数据提取、转换和加载(ETL)任务。本文通过简单示例介绍 SSIS 的基本使用方法,包括创建数据包、配置数据源与目标以及自动化执行流程。首先确保安装了 SQL Server Data Tools (SSDT),然后在 Visual Studio 中创建新的 SSIS 项目,通过添加控制流和数据流组件,实现从 CSV 文件到 SQL Server 数据库的数据迁移。
3491 0
|
SQL 数据库 数据库管理
SQL查询是否都需要解析:深入解析SQL执行流程与优化技巧
在数据库管理系统中,SQL(Structured Query Language)查询是用户与数据库交互的主要方式
|
SQL 算法
基于若依的ruoyi-nbcio流程管理系统修改代码生成的sql菜单id修改成递增id(谨慎修改,大并发分布式有弊端)
基于若依的ruoyi-nbcio流程管理系统修改代码生成的sql菜单id修改成递增id(谨慎修改,大并发分布式有弊端)
242 1
|
SQL 数据库 Perl
PL/SQL中执行按钮变为灰色后如何恢复【已解决】
PL/SQL中执行按钮变为灰色后如何恢复【已解决】
914 0
|
SQL Oracle 关系型数据库
Oracle的PL/SQL游标自定义异常:数据探险家的“专属警示灯”
【4月更文挑战第19天】Oracle PL/SQL中的游标自定义异常是处理数据异常的有效工具,犹如数据探险家的警示灯。通过声明异常名(如`LOW_SALARY_EXCEPTION`)并在满足特定条件(如薪资低于阈值)时使用`RAISE`抛出异常,能灵活应对复杂业务规则。示例代码展示了如何在游标操作中定义和捕获自定义异常,提升代码可读性和维护性,确保在面对数据挑战时能及时响应。掌握自定义异常,让数据管理更从容。
|
SQL Oracle 安全
Oracle的PL/SQL游标异常处理:从“惊涛骇浪”到“风平浪静”
【4月更文挑战第19天】Oracle PL/SQL游标异常处理确保了在数据操作中遇到的问题得以优雅解决,如`NO_DATA_FOUND`或`TOO_MANY_ROWS`等异常。通过使用`EXCEPTION`块捕获并处理这些异常,开发者可以防止程序因游标问题而崩溃。例如,当查询无结果时,可以显示定制的错误信息而不是让程序终止。掌握游标异常处理是成为娴熟的Oracle数据管理员的关键,能保证在复杂的数据环境中稳健运行。