PL/SQL学习笔记

PLSQL几种循环语句用法 PLSQL几种循环语句用法:适合初级人员使用。 立即下载
PL/SQL学习笔记

2004-9-7     星期二    阴

PL/SQL数据库编程(上)

第一章

1. Oracle应用编辑方法概览
答:1) Pro*C/C++/... : C语言和数据库打交道的方法,比OCI更常用;
    2) ODBC
    3) OCI: C语言和数据库打交道的方法,和ProC很相似,更底层,很少用;
    4) SQLJ: 很新的一种用Java访问Oracle数据库的方法,会的人不多;
    5) JDBC
    6) PL/SQL: 存储在数据内运行, 其他方法为在数据库外对数据库访问;

2. PL/SQL
答:1) PL/SQL(Procedual language/SQL)是在标准SQL的基础上增加了过程化处理的语言;
    2) Oracle客户端工具访问Oracle服务器的操作语言;
    3) Oracle对SQL的扩充;

4. PL/SQL的优缺点
答:优点:
    1) 结构化模块化编程,不是面向对象;
    2) 良好的可移植性(不管Oracle运行在何种操作系统);
    3) 良好的可维护性(编译通过后存储在数据库里);
    4) 提升系统性能;

    缺点
    1) 不便于向异构数据库移植应用程序(只能用于Oracle);

5. SQL与PL/SQL的区别
答:SQL:1) 第四代语言(智能语言);
         2) 做什么,不管怎么做;
         3) 缺少过程与控制语句;
         4) 无算法
    PL/SQL: 1) 扩展变量和类型;
            2) 扩展控制结构;
            3) 扩展过程与函数;
            4) 扩展对象类型与方法
            

第二章

PL/SQL程序结构

1. PL/SQL块
答:1) 申明部分, DECLARE(不可少);
    2) 执行部分, BEGIN...END;
    3) 异常处理,EXCEPTION(可以没有);

2. PL/SQL开发环境
答:可以运用任何纯文本的编辑器编辑,例如:VI

3. PL/SQL字符集
答:PL/SQL对大小写不敏感

4. 标识符命名规则
答:1) 字母开头;
    2) 后跟任意的非空格字符、数字、货币符号、下划线、或# ;
    3) 最大长度为30个字符(八个字符左右最合适);

5. 变量声明
答:语法
    Var_name type [CONSTANT][NOT NULL][:=value];
    注:1) 申明时可以有默认值也可以没有;
        2) 如有[CONSTANT][NOT NULL], 变量一定要有一个初始值;
        3) 赋值语句为“:=”;
        4) 变量可以认为是数据库里一个字段;
        5) 规定没有初始化的变量为NULL;

第三章

1. 数据类型
答:1) 标量型:数字型、字符型、布尔型、日期型;
    2) 组合型:RECORD(常用)、TABLE(常用)、VARRAY(较少用)
    3) 参考型:REF CURSOR(游标)、REF object_type
    4) LOB(Large Object)

2. %TYPE
答:变量具有与数据库的表中某一字段相同的类型
    例:v_FirstName studengts.first_name%TYPE;

3. RECORD类型
答:TYPE record_name IS RECORD(            /*其中TYPE,IS,RECORD为关键字,record_name为变量名称*/
 field1 type [NOT NULL][:=expr1],   /*每个等价的成员间用逗号分隔*/
 field2 type [NOT NULL][:=expr2],   /*如果一个字段限定NOT NULL,那么它必须拥有一个初始值*/
        ...                                /*所有没有初始化的字段都会初始为NULL
 fieldn type [NOT NULL][:=exprn]);

4. %ROWTYPE
答:返回一个基于数据库定义的类型
    DECLARE
      v_StuRec Student%ROWTYPE;            /*Student为表的名字*/

    注:与3中定一个record相比,一步就完成,而3中定义分二步:a. 所有的成员变量都要申明; b. 实例化变量;

5. TABLE类型
答:TYPE tabletype IS TABLE OF type INDEX BY BINARY_INTEGER;
    例:DECLARE
          TYPE t_StuTable IS TABLE OF Student%ROWTYPE INDEX BY BINARY_INTERGER;
          v_Student t_StuTable;
 BEGIN
          SELECT * INTO v_Student(100) FROM Student WHERE id = 1001;
        END;
    注:1) 行的数目的限制由BINARY_INTEGER的范围决定;

6. 变量的作用域和可见性
答:1) 执行块里可以嵌入执行块;
    2) 里层执行块的变量对外层不可见;
    3) 里层执行块对外层执行块变量的修改会影响外层块变量的值;

第四章

1. 条件语句
答:IF boolean_expression1 THEN
    ...
    ELSIF boolean_expression2 THEN   /*注意是ELSIF,而不是ELSEIF*/
    ...                              /*ELSE语句不是必须的,但END IF;是必须的*/
    ELSE
    ...
    END IF;

2. 循环语句
答:1) Loop
       ...
         IF boolean_expr THEN        /* */
            EXIT;                    /* EXIT WHEN boolean_expr */
         END IF;                     /* */
       END LOOP;
    2) WHILE boolean_expr LOOP
       ...
       END LOOP;
    3) FOR loop_counter IN [REVERSE] low_blound..high_bound LOOP
       ...
       END LOOP;
       注:a. 加上REVERSE 表示递减,从结束边界到起始边界,递减步长为一;
           b. low_blound  起始边界; high_bound  结束边界;

3. GOTO语句
答:GOTO label_name;
    1) 只能由内部块跳往外部块;
    2) 设置标签:<<label_name>>
    3) 示例:
       LOOP
       ...
         IF D%ROWCOUNT = 50 THEN
            GOTO l_close;
         END IF;
       ...
       END LOOP;
       <<l_close>>;
       ...

4. NULL语句
答:在语句块中加空语句,用于补充语句的完整性。示例:
    IF boolean_expr THEN
    ...
    ELSE
      NULL;
    END IF;

5. SQL in PL/SQL
答:1) 只有DML SQL可以直接在PL/SQL中使用;

第五章

1. 游标(CURSOR)
答:1) 作用:用于提取多行数据集;
    2) 声明:a. 普通申明:DELCARE CURSOR CURSOR_NAME IS select_statement  /* CURSOR的内容必须是一条查询语句*/
             b. 带参数申明:DELCARE CURSOR c_stu(p_id student.ID%TYPE) SELECT * FROM student WHERE ID = p_id;
    3) 打开游标:OPEN Cursor_name;   /*相当于执行select语句,且把执行结果存入CURSOR;
    4) 从游标中取数:a. FETCH cursor_name INTO var1, var2, ...; /*变量的数量、类型、顺序要和Table中字段一致;*/
                     b. FETCH cursor_name INTO record_var;
       注:将值从CURSOR取出放入变量中,每FETCH一次取一条记录;
    5) 关闭游标: CLOSE Cursor_name;
       注:a. 游标使用后应该关闭;
           b. 关闭后的游标不能FETCH和再次CLOSE;
           c. 关闭游标相当于将内存中CURSOR的内容清空;

2. 游标的属性
答:1) %FOUND:    是否有值;
    2) %NOTFOUND: 是否没有值;
    3) %ISOPEN:   是否是打开状态;
    4) %ROWCOUNT: CURSOR当前的记录号;

3. 游标的FETCH循环
答:1) LOOP
         FETCH cursor INTO ...
         EXIT WHEN cursor%NOTFOUND;   /*当cursor中没记录后退出*/
       END LOOP;
    2) WHILE cursor%FOUND LOOP
         FETCH cursor INTO ...
       END LOOP;
    3) FOR var IN cursor LOOP
         FETCH cursor INTO...
       END LOOP;
      
第六章

1. 异常
答:DECLARE
      ...
      e_TooManyStudents EXCEPTION;  /* 申明异常 */
      ...
    BEGIN
      ...
      RAISE e_TooManyStudents;      /* 触发异常 */
      ...
    EXCEPTION
      WHEN e_TooManyStudents THEN   /* 触发异常 */
      ...
      WHEN OTHERS THEN              /* 处理所有其他异常 */
      ...
    END;

2004-9-8     星期三    阴

PL/SQL数据库编程(下)

1. 存储过程(PROCEDURE)
答:创建过程:
    CREATE [OR REPLACE] PROCEDURE proc_name
         [(arg_name[{IN|OUT|IN OUT}]TYPE,
           arg_name[{IN|OUT|IN OUT}]TYPE)]
          {IS|AS}
    procedure_body
    1) IN: 表示该参数不能被赋值(只能位于等号右边);
    2) OUT:表示该参数只能被赋值(只能位于等号左边);
    3) IN OUT: 表示该类型既能被赋值也能传值;

2. 存储过程例子
答:CREATE OR REPLACE PROCEDURE ModeTest(
        p_InParm IN NUMBER,
        p_OutParm OUT NUMBER,
        p_InOutParm IN OUT NUMBER)
    IS
        v_LocalVar NUMBER;                      /* 声明部分 */
    BEGIN
        v_LocalVar:=p_InParm;                   /* 执行部分 */
        p_OutParm:=7;
        p_InOutParm:=7;
        ...
    EXCEPTION
        ...                                     /* 异常处理部分 */
    END ModeTest;
   
3. 调用PROCEDURE的例子
答:1) 匿名块可以调;
    2) 其他PROCDEURE可以调用;
    例:
    DECLARE
        v_var1 NUMBER;
    BEGIN
        ModeTest(12, v_var1, 10);
    END;
    注:此时v_var1等于7

4. 指定实参的模式
答:1) 位置标示法:调用时添入所有参数,实参与形参按顺序一一对应;
    2) 名字标示法:调用时给出形参名字,并给出实参
       ModeTest(p_InParm=>12, p_OutParm=>v_var1, p_Inout=>10);
    注:a. 两种方法可以混用;
        b. 混用时第一个参数必须通过位置来指定。

5. 函数(Function)与过程(Procedure)的区别
答:1) 过程调用本身是一个PL/SQL语句(可以在命令行中通过exec语句直接调用);
    2) 函数调用是表达式的一部分;

6. 函数的声明
答:CREATE [OR REPLACE] PROCEDURE proc_name
        [(arg_name[{IN|OUT|IN OUT}]TYPE,
          arg_name[{IN|OUT|IN OUT}]TYPE)]
    RETURN TYPE
    {IS|AS}
    procedure_body
    注:1) 没有返回语句的函数将是一个错误;

7. 删除过程与函数
答:DROP PROCEDURE proc_name;
    DROP FUNCTION func_name;

第八章

1. 包
答:1) 包是可以将相关对象存储在一起的PL/SQL的结构;
    2) 包只能存储在数据库中,不能是本地的;
    3) 包是一个带有名字的声明;
    4) 相当于一个PL/SQL块的声明部分;
    5) 在块的声明部分出现的任何东西都能出现在包中;
    6) 包中可以包含过程、函数、游标与变量;
    7) 可以从其他PL/SQL块中引用包,包提供了可用于PL/SQL的全局变量。
    8) 包有包头和包主体,如包头中没有任何函数与过程,则包主体可以不需要。

2. 包头
答:1) 包头包含了有关包的内容的信息,包头不含任何过程的代码。
    2) 语法:
       CREATE [OR REPLACE] PACKAGE pack_name {IS|AS}
            procedure_specification|function_specification|variable_declaration|type_definition|exception_declaration|cursor_declaration
       END pack_name;
    3) 示例:
       CREATE OR REPLACE PACKAGE pak_test AS
           PROCEDURE RemoveStudent(p_StuID IN students.id%TYPE);
           TYPE t_StuIDTable IS TABLE OF students.id%TYPE INDEX BY BINARY_INTEGER;
       END pak_test;

3. 包主体
答:1) 包主体是可选的,如包头中没有任何函数与过程,则包主体可以不需要。
    2) 包主体与包头存放在不同的数据字典中。
    3) 如包头编译不成功,包主体无法正确编译。
    4) 包主体包含了所有在包头中声明的所有过程与函数的代码。
    5) 示例:
       CREATE OR REPLACE PACKAGE BODY pak_test AS
           PROCEDURE RemoveStudent(p_StuID IN students.id%TYPE) IS
           BEGIN
              ...
           END RemoveStudent;
           TYPE t_StuIDTable IS TABLE OF students.id%TYPE INDEX BY BINARY_INTEGER;
       END pak_test;

4. 包的作用域
答:1) 在包外调用包中过程(需加包名):pak_test.AddStudent(100010, 'CS', 101);
    2) 在包主体中可以直接使用包头中声明的对象和过程(不需加包名);

5. 包中子程序的重载
答:1) 同一个包中的过程与函数都可以重载;
    2) 相同的过程或函数名字,但参数不同;

6. 包的初始化
答:1) 包存放在数据库中;
    2) 在第一次被调用的时候,包从数据库中调入内存并被初始化;
    3) 包中定义的所有变量都被分配内存;
    4) 每个会话都将拥有自己的包内变量的副本。

第九章

1. 触发器
答:1) 触发器与过程/函数的相同点
       a. 都是带有名字的执行块;
       b. 都有声明、执行体和异常部分;
    2) 触发器与过程/函数的不同点
       a. 触发器必须存储在数据库中;
       b. 触发器自动执行;

2. 创建触发器
答:1) 语法:
       CREATE [OR REPLACE] TRIGGER trigger_name
       {BEFORE|AFTER} triggering_event ON table_reference
       [FOR EACH ROW [WHEN trigger_condition]]
       trigger_body;
    2) 范例:
       CREATE OR REPLACE TRIGGER UpdateMajorStats AFTER INSERT OR DELETE OR UPDATE ON students
       DECLARE
           CURSOR c_Statistics IS
               SELECT * FROM students GROUP BY major;
       BEGIN
           ...
       END Up;

3. 触发器
答:1) 三个语句(INSERT/UPDATE/DELETE);
    2) 二种类型(之前/之后);
    3) 二种级别(row-level/statement-level);
    所以一共有 3 X 2 X 2 = 12

4. 触发器的限制
答:1) 不应该使用事务控制语句;
    2) 不能声明任何LONG或LONG RAW变量;
    3) 可以访问的表有限。

5. 触发器的主体可以访问的表
答:1) 不可以读取或修改任何变化表(被DML语句正在修改的表);
    2) 不可以读取或修改限制表(带有约束的表)的主键、唯一值、外键列 

环境仿真软件:MIKE 21_(9).MIKE21水生植物模块介绍 MIKE21支持多种水生植物的模拟,用户需要在配置文件中定义植物种类及其特性。</</</</</</</</</假设我们需要定义一种新的水生植物“水葫芦”(Water Hyacinth),并将其特性写入配置文件。# 创建XML根元素# 定义新的植物种类# 生成XML文件假设我们需要分析仿真的水流速度变化,并绘制水流速度随时间变化的图。# 读取NetCDF文件# 获取水流速度数据# 获取时间数据# 绘制水流速度随时间变化的图plt.xlabel('时间 (天)') 阅读详情

相关推荐

PPO算法详解:基于CartPole-v1的强化学习实现

PPO算法详解:基于CartPole-v1的强化学习实现

m0_54720701的博客 865

【R语言】cbind和rbind函数

cbind和rbind函数 cbind: 根据列进行合并,即叠加所有列,m列的矩阵与n列的矩阵cbind()最后变成m+n列,合并前提:cbind(a, c)中矩阵a、c的行数必需相符 rbind: 根据行进行合并,就是行的叠加,m行的矩阵与n行的矩阵rbind()最后变成m+n行,合并前提:rbind(a, c)中矩阵a、c的列数必需相符   &gt; a &lt;- matrix(1:...

小哲的博客 5万+

银河麒麟V10离线升级OpenSSH实战:从编译到回滚全流程

OpenSSH作为Linux系统远程登录的核心组件,其版本升级直接关系到系统安全与等保合规。在信创环境下,银河麒麟V10自带的OpenSSH版本往往无法满足漏洞扫描与安全加固要求,而离线编译升级涉及依赖处理、编译参数、服务替换与回滚方案等多个技术环节。本文围绕银河麒麟V10(x86_64)平台,详细讲解OpenSSH离线升级的完整实操流程,包括环境摸底、依赖包安装、源码编译、配置文件兼容性处理、服务重启验证以及常见问题排查,并分享批量升级与安全加固的工程经验,帮助运维人员在不断网、不重装的前提下一次成功完成

weixin_30582943的博客 386

r语言中大小写c的区别吗,R语言中cbind、rbind和merge函数的使用与区别

cbind: 根据列进行合并,即叠加所有列,m列的矩阵与n列的矩阵cbind()最后变成m+n列,合并前提:cbind(a, c)中矩阵a、c的行数必需相符rbind: 根据行进行合并,就是行的叠加,m行的矩阵与n行的矩阵rbind()最后变成m+n行,合并前提:rbind(a, c)中矩阵a、c的列数必需相符> a > print(a)[,1] [,2] [,3] [,4][1,] ...

weixin_39618730的博客 322

从仿真到实机:四足机器人控制算法的全流程验证框架

本文系统阐述了四足机器人从仿真到实机的全流程验证框架。针对仿真与实机环境的巨大差异,文章详细介绍了在MuJoCo等高保真仿真环境中的建模、算法迭代与压力测试方法,并重点解析了通过硬件抽象层和中间件搭建通往实机的关键桥梁。最后,提供了实机部署的安全清单与调试策略,旨在帮助开发者构建可重复、风险可控的算法验证闭环,提升算法在真实世界中的鲁棒性与可靠性。

lilh34434的博客 383

GEE开发之Landsat8计算MNDWI和数据分析

上一篇博客介绍了landsat8计算NDWI以及数据的获取,这次介绍MNDWI(改进的归一化差异水体指数)。

等待着冬天的风的博客 8440

Day 12 数据转换

数据转换

weixin_53449848的博客 1620

Linux系统安装AutoDockTools、AutoGrid和AutoDock并实现分子对接(详细讲解)

linux系统为centos7.0 按照下面操作安装AutoDockTools(MGLTools) 1. 下载安装包,链接(https://ccsb.scripps.edu/mgltools/downloads/),我的linux系统是64位,下载红色标记源代码,拷贝入linux目标文件夹下。 2. shell终端进行安装: 1. 终端进入安装包所在文件夹,并获取root权限;赋予代码安装权限; cd /home/... #目标文件夹,根据目标程序文件位置进行更改 su #获

carlos_zhao的博客 1万+

SqlServer数据库DROP TABLE IF EXISTS语句

近日碰到SqlServer数据库版本不一致,执行建表脚本时DROP TABLE IF  EXISTS语法的小问题,自己做个记录便于后续查看。 在SqlServer2016版本及更高版本,建表前判断表是否存在,可以使用: DROP TABLE IF EXISTS myschema.mytable; CREATE TABLE myschema.mytable( STUNAM varchar(2...

cong_da_da的博客 5万+

基于Simulink的双向DC-DC变换器在储能系统中的应用仿真

摘要:本文详细介绍了基于Simulink的双向DC-DC变换器在光伏储能系统中的仿真实现。主要内容包括:1)采用非隔离型双向Buck-Boost拓扑作为储能系统枢纽;2)针对750V直流微网中的20kWh锂电池接口场景进行建模;3)详细阐述双闭环控制器设计(电压外环+电流内环)、工作模式判断逻辑等关键步骤;4)通过仿真验证了系统在功率阶跃和模式切换下的性能。文章提供了完整的建模流程和控制方法,为储能系统接口设计提供了实用参考。

amy_mhd的博客 179

POCV/SOCV 、LVF的差别

1.POCV与OCV、AOCV 为了模拟片上PVT的差异带来的影响,最早提出了OCV(On Chip Variation)给每个cell都设置一个固定的derate值,来覆盖最悲观的情况,但是随着工艺发展,设计规模增大,OCV过度的悲观开始限制性能,于是又有了AOCV(Advanced On Chip Variation),用基于depth和distance的derate来取代单一的全局的derate值,但时序收敛的过程中逻辑级数depth的变化让时序分析的时间变得非常长,由此POCV诞生了。 POCV

m0_61544122的博客 5364

PL/SQL学习笔记1

子类型是另一种数据类型的子集,称为其基类型。子类型具有与其基类型相同的有效操作,但只有其有效值的一个子集。您可以定义和使用自己的子类型。

csy931的博客 918

UNET改进77:全网首发-添加CFBlock |

本文介绍了在UNet模型中集成CFBlock注意力机制的实现方法。主要分为三个步骤:1) 创建CFBlock模块,包含卷积注意力机制和MLP;2) 在UNet连接处添加注意力模块;3) 在卷积层中嵌入注意力机制。具体实现包括:定义Conv、MLP和ConvolutionalAttention等基础模块,构建CFBlock核心结构;在UNet跳跃连接处插入注意力模块;将注意力机制整合到DoubleConv和Down模块中。该方法通过在不同位置引入注意力机制,可有效提升模型的特征提取能力。代码实现使用PyTor

AIcurator的博客 388

ORALCE PL/SQL学习笔记

ORALCE  PL/SQL学习笔记 详情见自己电脑的备份数据资料

极客on之路 507

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Oracle之PL/SQL学习笔记

自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧。是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家批评指正。     PL/SQL定义:PL/SQL是由Oracle开发,专门用于Oracle的程序设计语言。 PL---Procedural Language. SQL—Structure

yinjing8435的博客 394

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

PL/SQL学习笔记(索引贴)

我前段时间写了T-SQL学习笔记得到了许多朋友的支持当然也有一些朋友提出了质疑,在此一并表示感谢最近项目中用到Oracle,于是萌生了写PL/SQL学习笔记的念头。同时也希望得到大家的支持或批评。并非常希望能和朋友们一起讨论相关知识。 这是一个有一点T-SQL基础的、刚入门者的学习笔记,以Oracle  10g为讲解对象没有涉及到高级话题如果对哪篇文章有疑问,可以在文章下留言我会尽快回复的 下...

weixin_34203426的博客 188

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

PL/SQL学习笔记6

PL/SQL 提供了用户定义的记录类型,允许定义不同的记录结构。这些记录由不同的字段组成。TYPE...PL/SQL 允许根据程序的需要定义自己的异常。必须使用 RAISE 语句或过程显式声明并引发用户定义的异常DECLAREPL/SQL 提供了许多预定义的异常,当程序违反任何数据库规则时会执行这些异常。异常Oracle 错误代码描述06530-6530当一个空对象被自动分配一个值时,它会被引发。06592-6592。

csy931的博客 1303

PL/SQL学习笔记一

PL/SQL学习笔记一 1、 PL/SQL的塊結構 Declare         /* Declare section-PL/SQL variables,types,cursors,and local subprograms go here.         */ Begin         /*                Executable section-procedu

冯立彬的博客 6641

PL/SQL学习笔记5

− 这些子程序返回单个值;主要用于计算和返回一个值。− 这些子程序不直接返回值;主要用于执行一个动作。

csy931的博客 636
上一篇: java.util下的Timer,TimerTask和quartz的比较
下一篇: oracle 存储过程的基本语法
FutureInHands
博客等级 码龄20年 1粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值