PL/SQL语句_sql语句declare用法

PL/SQL语句_sql语句declare用法因为SQL只能访问、操作数据库,却不能进行程序设计,而OraclePL/SQL是一种高级数据库程序设计语言,该语言专门用于对ORACLE数据库进行访问,并且可以进行过程处理。*注:在PL/SQL中只能用SQL语句中的DML部分,不能用DDL部分,如果要在PL/SQL中使用DDL(如CREATEtable等)的话,只能以动态的方式来使用。**1.DML(datamanipulationlanguage)数据操纵语言:比如SELECT、UPDATE、INSERT、DELETE

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

整理于 Oracle PL/SQL编程详解 – 古立 – 博客园

因为SQL只能访问、操作数据库,却不能进行程序设计,而Oracle PL/SQL是一种高级数据库程序设计语言,该语言专门用于对ORACLE数据库进行访问,并且可以进行过程处理。
注:在 PL/SQL中只能用 SQL语句中的 DML 部分,不能用 DDL 部分,如果要在PL/SQL中使用DDL(如CREATE table 等)的话,只能以动态的方式来使用。
1. DML(data manipulation language)数据操纵语言:比如SELECT、UPDATE、INSERT、DELETE等操作,主要用来对数据库的数据进行一些操作 。

2. DDL(data definition language)数据库定义语言: 其实就是我们在创建表的时候用到的一些sql,比如说:CREATE、ALTER、DROP等。DDL主要是用在定义或改变表的结构,数据类型,表之间的链接和约束等初始化工作上

PL/SQL块的结构

DECLARE   
  --声明部分: 在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数 
BEGIN 
  -- 执行部分:  过程及SQL语句,即程序的主要部分 
EXCEPTION 
  -- 执行异常部分: 错误处理 
END;

DECLARE部分主要是进行变量,常量,游标,函数等参数的声明。

声明规范

关于声明的规范,建议如下:
在这里插入图片描述
注: 通常情况不应让变量名与表中字段名一样

标识符

PL/SQL程序设计中的标识符定义与SQL 的标识符定义的要求相同。要求和限制有:

1.标识符名不能超过30字符;

2.第一个字符必须为字母;

3.不分大小写;

4.不能用’-‘(减号);

5.不能是SQL保留字。

数据类型

对于变量,常量等的类型,如下图:
在这里插入图片描述

定义记录类型语法:

TYPE record_name IS RECORD( 
   v1 data_type1  [NOT NULL]  [:= default_value ], 
   v2 data_type2  [NOT NULL]  [:= default_value ], 
   …… 
   vn data_typen  [NOT NULL]  [:= default_value ] 
   );

定义VARRY数据类型语法:

TYPE varray_name IS VARRAY(size) OF element_type [NOT NULL];

varray_name是VARRAY数据类型的名称,size是下整数,表示可容纳的成员的最大数量,每个成员的数据类型是element_type。默认成员可以取空值,否则需要使用NOT NULL加以限制。
对于VARRAY数据类型来说,必须经过三个步骤,分别是:定义、声明、初始化。
栗子:

 DECLARE 
  --定义一个最多保存5个VARCHAR(25)数据类型成员的VARRAY数据类型 
     TYPE reg_varray_type IS VARRAY(5) OF VARCHAR(25); 
  --声明一个该VARRAY数据类型的变量 
     v_reg_varray REG_VARRAY_TYPE; 
  BEGIN 
  --用构造函数语法赋予初值 
     v_reg_varray := reg_varray_type 
           ('中国', '美国', '英国', '日本', '法国'); 
     DBMS_OUTPUT.PUT_LINE('地区名称:'||v_reg_varray(1)||'、' 
                                     ||v_reg_varray(2)||'、' 
                                     ||v_reg_varray(3)||'、' 
                                     ||v_reg_varray(4)); 
     DBMS_OUTPUT.PUT_LINE('赋予初值NULL的第5个成员的值:'||v_reg_varray(5)); 
 --用构造函数语法赋予初值后就可以这样对成员赋值 
     v_reg_varray(5) := '法国'; 
     DBMS_OUTPUT.PUT_LINE('第5个成员的值:'||v_reg_varray(5)); 
 END;

使用%TYPE

定义一个变量,其数据类型与已经定义的某个数据变量(尤其是表的某一列)的数据类型相一致,这时可以使用%TYPE。

使用%TYPE特性的优点在于:
1.所引用的数据库列的数据类型可以不必知道;
2.所引用的数据库列的数据类型可以实时改变,容易保持一致,也不用修改PL/SQL程序。

 DECLARE 
     -- 用%TYPE 类型定义与表相配的字段 
     TYPE T_Record IS RECORD( 
          T_no emp.empno%TYPE, 
          T_name emp.ename%TYPE, 
          T_sal emp.sal%TYPE ); 
     -- 声明接收数据的变量 
     v_emp T_Record; 
 BEGIN 
     SELECT empno, ename, sal INTO v_emp FROM emp WHERE empno=7788; 
     DBMS_OUTPUT.PUT_LINE 
      (TO_CHAR(v_emp.t_no)||' '||v_emp.t_name||'  ' || TO_CHAR(v_emp.t_sal)); 
 END;

使用%ROWTYPE

PL/SQL 提供%ROWTYPE操作符, 返回一个记录类型, 其数据类型和数据库表的数据结构相一致。

使用%ROWTYPE特性的优点在于:
1.所引用的数据库中列的个数和数据类型可以不必知道;
2.所引用的数据库中列的个数和数据类型可以实时改变,容易保持一致,也不用修改PL/SQL程序。

 DECLARE 
     v_empno emp.empno%TYPE :=&no; 
     rec emp%ROWTYPE; 
 BEGIN 
     SELECT * INTO rec FROM emp WHERE empno=v_empno; 
     DBMS_OUTPUT.PUT_LINE('姓名:'||rec.ename||'工资:'||rec.sal||'工作时间:'||rec.hiredate);  
 END;

注:v_empno emp.empno%TYPE :=&no; 这里的 :=&no是指键入参数

变量作用范围及可见性

在PL/SQL编程中,如果在变量的定义上没有做到统一的话,可能会隐藏一些危险的错误,这样的原因主要是变量的作用范围所致。变量的作用域是指变量的有效作用范围,与其它高级语言类似,PL/SQL的变量作用范围特点是:

1.变量的作用范围是在你所引用的程序单元(块、子程序、包)内。即从声明变量开始到该块的结束。

2.一个变量(标识)只能在你所引用的块内是可见的。

3.当一个变量超出了作用范围,PL/SQL引擎就释放用来存放该变量的空间(因为它可能不用了)。

4.在子块中重新定义该变量后,它的作用仅在该块内。

DECLARE 
   Emess char(80); 
BEGIN 
   DECLARE 
      V1 NUMBER(4); 
   BEGIN 
      SELECT empno INTO v1 FROM emp WHERE LOWER(job)='president'; 
      DBMS_OUTPUT.PUT_LINE(V1); 
   EXCEPTION 
      When TOO_MANY_ROWS THEN 
         DBMS_OUTPUT.PUT_LINE ('More than one president'); 
   END; 
   DECLARE  
      V1 NUMBER(4); 
   BEGIN 
      SELECT empno INTO v1 FROM emp WHERE LOWER(job)='manager'; 
   EXCEPTION 
      When TOO_MANY_ROWS THEN 
          DBMS_OUTPUT.PUT_LINE ('More than one manager'); 
   END; 
EXCEPTION 
   When others THEN 
      Emess:=substr(SQLERRM,1,80); 
      DBMS_OUTPUT.PUT_LINE(emess); 
END;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/171292.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • linux解压安装包rar_ubuntu rar文件解压

    linux解压安装包rar_ubuntu rar文件解压#wgethttps://www.rarlab.com/rar/rarlinux-x64-5.8.b4.tar.gz—>>下载包#ls-lrtrar/rar/order.htmrar/acknow.txtrar/readme.txtrar/default.sfxrar/license.txtrar/rarfiles.lstrar/…

    2022年10月21日
  • 手机修改ntp服务器地址,修改手机ntp服务器ip地址[通俗易懂]

    手机修改ntp服务器地址,修改手机ntp服务器ip地址[通俗易懂]修改手机ntp服务器ip地址内容精选换一换本文介绍使用云手机服务时需要了解的基本概念。云手机是一台包含原生安卓操作系统,具有虚拟手机功能的云服务器,简单来说,云手机=云服务器+AndroidOS。您可以远程实时控制云手机,实现安卓APP的云端运行;也可以基于云手机的基础算力,高效搭建应用,如云游戏、移动办公、直播互娱等场景。服务器是用来提供云手机的物理服务器。云手机目前以服务器您可以直接修改虚…

  • create方法 eslint关闭_Vue项目如何关闭Eslint检测

    create方法 eslint关闭_Vue项目如何关闭Eslint检测读取本地外网IP地址读取本地外网IP地址.根据启动并运行的网卡名称,找到本机实际的IP地址(已知当前运行的无线网卡名包含某一个字符)importjava.net.InterfaceAddress;importj…【原创】大众点评监控平台cat的性能分析由于工作的原因,或者说我们之前内部监控设计和实现有点不满足现有的研发需求,所以调研了一下大众点评开源出来的cat这一套监控系统.今…

  • 上那学计算机,从零开始学电脑(学电脑从哪开始)

    上那学计算机,从零开始学电脑(学电脑从哪开始)从零开始学电脑(学电脑从哪开始)如今,手机已经成为我们生活中不可缺少的必需品,各种手机应用软件的层出不穷,使得智能手机占据了互联网的半壁江山,似乎手机无所不能了,平时,很多人觉得一手机在手便可以仗剑走天涯,但当我们走进职场,你就会发现,对于办公而言,手机还是有很大的局限性,掌握电脑知识,熟悉电脑基本操作是胜任工作的必备技能。真是“书到用时方恨少”。今天开始,涛哥就带你走进电脑的世界,让你从电脑小白…

  • 线程池拒绝策略详解[通俗易懂]

    线程池拒绝策略详解[通俗易懂]线程池拒绝策略详解JDK中已经预设了4种线程池拒绝策略,下面结合场景详细聊聊这些策略的使用场景,以及我们还能扩展哪些拒绝策略。池化设计思想池话设计应该不是一个新名词。我们常见的如java线程池、jdbc连接池、redis连接池等就是这类设计的代表实现。这种设计会初始预设资源,解决的问题就是抵消每次获取资源的消耗,如创建线程的开销,获取远程连接的开销等。就好比你去食堂打饭,打饭的大妈会先…

  • goland 激活码 2021.8_在线激活

    (goland 激活码 2021.8)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~S32PGH0SQB-eyJsaWNlbnNlSWQiOi…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号