【PL/SQL】PL/SQL语言基础

了解PL/SQL看这一篇够够了~ PLSQL是的缩写,PL/SQL是对SQL语言存储过程语言的扩展,它现在已经成为一种过程处理语言,简称PL/SQL。目前,PL/SQL 主要包含两部分:其一是数据库引擎部分,叫做数据库PL/SQL。其二是可嵌入其他产品工具中的独立引擎,也叫工具PL/SQL。两者编程非常类似,都具有特定结构、语法和逻辑机制。另外,工具PL/SQL还增加了用于支持工具的语法。Oracle从Version 6以后,它的管理系统(RDBMS)就附带了PL/SQL。 阅读详情

一、PL/SQL的块

 

(1)块(Block)是PL/SQL的基本程序单元

(2)一个PL/SQL应用程序由一个或多个块组成

1.PL/SQL块的基本组成

(1)定义部分(declare)

——定义常量、变量、游标等

——可选(不是块的必须部分)

(2)执行部分(begin…end;)

——执行SQL语句或PL/SQL语句

(3)异常部分(exception)

——处理运行时的错误

——可选(不是块的必须部分)

2.PL/SQL块的分类

(1)匿名块(anonymous):动态构造,只能执行一次,可调用其他程序,但不能被其他程序调用。

①无变量匿名块

SQL> begin

  2 

  3  dbms_output.put_line('Hello World ');

  4 

  5  end;

  6  /

 

PL/SQL procedure successfully completed

 

SQL> /

Hello World

PL/SQL procedure successfully completed

②有变量的匿名块,定义变量:

SQL> declare

  2  v_ename VARCHAR2(10);

  3  v_sal   NUMBER(7,2);

  4 

  5  begin

  6 

  7   select ename,sal into v_ename,v_sal from emp where empno=#

  8 

  9  dbms_output.put_line('Employees name is: '||v_ename);

 10  dbms_output.put_line('Employees salary is: '||v_sal);

 11 

 12  end;

 13  /

Employees name is: SCOTT

Employees salary is: 9000

(2)命名块(named):是带有名称的匿名块,这个名称就是标签。

(3)子程序(subprogram):在数据库上建立好后可在其他程序中调用它们。

——过程

——函数

(4)触发器(trigger):当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。

(5)程序包(package):存储在数据库中的一组子程序、变量定义。在包中的子程序可以被其他程序包或子程序调用。但如果声明的是局部子程序,则只能在定义该局部子程序的块中调用该局部子程序。

3.PL/SQL 变量

在PL/SQL程序中临时存储数据;

程序之间传递数据

(1)PL/SQL变量类型

①标量类型

BINARY_DOUBEL

BINARY_FLOAT

BINARY_INTEGER

BEC

BECIMAL

FLOAT

INT

INTEGER

NATURAL

NATURALN

NUMBER

NUMERIC

PLS_INTEGER

POSITIVE

REAL

SIGNTYPE

SMALLINT

CHAR

CHARACTER

LONG

LONG RAW

NCHAR

NVARCHAR2

RAW

ROWID

STRING

UROWID

VARCHAR

VARCHAR2

 

BOOLEAN

 

DATE

 

②复合类型

RECORD

TABLE

VARRAY

③参考类型

REF CURSOR

REF object_type

④大对象类型

BFILE

BLOB

CLOB

NCLOB

(2)PL/SQL变量定义语法

identifier  [CONSTRANT]  datatype  [NOT NULL]  [:= | DEFAULT expr]


变量定义实例: 

V_ename varchar2(20);

V_sal number(7,2);

V_balance binary_float;

V_hiredate date;

V_valid Boolean not null default false;

·定义常量和变量并赋值:

declare

v_ename VARCHAR2(10);

v_sal   NUMBER(7,2);

c_empno  NUMBER(4):=7788;               //声明一个常量

 

begin

 

 select ename,sal into v_ename,v_sal from emp where empno=c_empno;

 

dbms_output.put_line('Employees name is: '||v_ename);

dbms_output.put_line('Employees salary is: '||v_sal);

 

end;

·在执行部分给变量赋值:

SQL> declare

  2  v_ename VARCHAR2(10);

  3  v_sal   NUMBER(7,2);

  4  v_empno  NUMBER(4);

  5 

  6  begin

  7   v_empno := 7788;

  8 

  9   select ename,sal into v_ename,v_sal from emp where empno=v_empno;

 10 

 11  dbms_output.put_line('Employees name is: '||v_ename);

 12  dbms_output.put_line('Employees salary is: '||v_sal);

 13 

 14  end;

(3)%TYPE 属性

变量用于存放列值时,为了保证合适的数据类型和长度,可以使用%TYPE属性进行定义

V_ename emp.ename%type;

(4)复合变量

①用于存放多个值的变量

②复合变量的类型:

—PL/SQL记录

每个PL/SQL记录保护多个成员;

类似于c语句中的结构体;

通过record类型处理一行多列的数据;

1.record:在一个变量中可以存储多个区域,每个区域可以是一个标量、记录或table (用于处理一行多列的信息)

案例:

SQL> declare

  2     type emp_record  is record                          //定义变量类型为record

  3     ( v_ename emp.ename%type,

  4       v_sal   emp.sal%type,

  5       v_deptno emp.deptno%type

  6      );

  7 

  8     emp_rcd  emp_record ;

  9 

 10     begin

 11 

 12       select ename,sal,deptno into  emp_rcd from emp where empno=#

 13 

 14       dbms_output.put_line ('Employees name is: '||emp_rcd.v_ename);

 15       dbms_output.put_line ('Employees salary is: '||emp_rcd.v_sal);

 16       dbms_output.put_line ('Employees deparment number is: '||emp_rcd.v_deptno);

 17     end;

 18  /

Employees name is: SCOTT

Employees salary is: 9000

Employees deparment number is: 20

PL/SQL procedure successfully completed

 

2、通过%rowtype处理一行数据

 

SQL> declare

  2     emp_rcd  emp%rowtype ;

  3 

  4     begin

  5 

  6       select * into  emp_rcd from emp where empno=#

  7 

  8       dbms_output.put_line ('Employees name is: '||emp_rcd.ename);

  9       dbms_output.put_line ('Employees salary is: '||emp_rcd.sal);

 10       dbms_output.put_line ('Employees hiredate is: '||to_char

(emp_rcd.hiredate,'yyyy-mm-dd'));

 11       dbms_output.put_line ('Employees deparment number is: '||emp_rcd.deptno);

 12     end;

 13  /

Employees name is: SCOTT

Employees salary is: 9000

Employees hiredate is: 1987-04-19

Employees deparment number is: 20

PL/SQL procedure successfully completed

—PL/SQL表

table:  相当于高级语言中的数组,但是需要注意的是在高级语言中数组的下标不能为负数,而pl/sql是可以为负数的,并且表元素的下标没有限制

语法:

TYPE  ename_table_type IS TABLE OF emp.ename%TYPE

INDEX BY BINARY_INTEGER;

Ename_table  ename_table_type;

案例:

SQL> declare

  2   type emp_tab  is table of emp.ename%type            //定义变量类型为table类型

  3   index by binary_integer;                            //建立索引

  4 

  5   emp_table   emp_tab;

  6 

  7  begin

  8 

  9    select ename into emp_table(1) from emp where empno=7788;

 10     select ename into emp_table(2) from emp where empno=7369;

 11      select ename into emp_table(3) from emp where empno=7499;

 12 

 13    dbms_output.put_line('Employees 7788 name is: '||emp_table(1));

 14    dbms_output.put_line('Employees 7369 name is: '||emp_table(2));

 15    dbms_output.put_line('Employees 7499 name is: '||emp_table(3));

 16  end;

 17  /

Employees 7788 name is: SCOTT

Employees 7369 name is: SMITH

Employees 7499 name is: ALLEN

PL/SQL procedure successfully completed

 

 

SQL>

SQL> declare

  2   type emp_tab  is table of emp.ename%type

  3   index by binary_integer;

  4 

  5    type emp_t  is table of emp.sal%type

  6   index by binary_integer;

  7 

  8   emp_table   emp_tab;

  9   emp_t_sal   emp_t;

 10 

 11  begin

 12 

 13    select ename into emp_table(1) from emp where empno=7788;

 14     select ename into emp_table(2) from emp where empno=7369;

 15      select ename into emp_table(3) from emp where empno=7499;

 16 

 17     select sal into emp_t_sal(1) from emp where empno=7788;

 18     select sal into emp_t_sal(2) from emp where empno=7369;

 19     select sal into emp_t_sal(3) from emp where empno=7499;

 20 

 21    dbms_output.put_line('Employees 7788 name is: '||emp_table(1));

 22    dbms_output.put_line('Employees 7369 name is: '||emp_table(2));

 23    dbms_output.put_line('Employees 7499 name is: '||emp_table(3));

 24 

 25      dbms_output.put_line('Employees 7788 salary is: '||emp_t_sal(1));

 26    dbms_output.put_line('Employees 7369 salary is: '||emp_t_sal(2));

 27    dbms_output.put_line('Employees 7499 salary is: '||emp_t_sal(3));

 28  end;

 29  /

Employees 7788 name is: SCOTT

Employees 7369 name is: SMITH

Employees 7499 name is: ALLEN

Employees 7788 salary is: 9000

Employees 7369 salary is: 6800

Employees 7499 salary is: 7600

PL/SQL procedure successfully completed

—嵌套表

在table类型中嵌套record类型,可以处理多行多列数据。

案例:

SQL> declare

  2          type emp_table_type is table of emp%rowtype

  3           index by binary_integer;

  4            emp_tab emp_table_type;

  5 

  6        begin

  7          select * into emp_tab(1) from emp where empno=7788;

  8          select * into emp_tab(2) from emp where empno=7369;

  9         dbms_output.put_line('7788 Ename is: '||emp_tab(1).ename );

 10         dbms_output.put_line('7788 Salary is: '|| emp_tab(1).sal);

 11         dbms_output.put_line('7788 Deparment ID is: '||emp_tab(1).deptno);

 12         dbms_output.put_line('7369 Ename is: '||emp_tab(2).ename);

 13         dbms_output.put_line('7369 Salary is: '|| emp_tab(2).sal);

 14         dbms_output.put_line('7369 Deparment ID is: '||emp_tab(2).deptno);

 15        end;

 16  /

7788 Ename is: SCOTT

7788 Salary is: 9000

7788 Deparment ID is: 20

7369 Ename is: SMITH

7369 Salary is: 6800

7369 Deparment ID is: 20

PL/SQL procedure successfully completed

—VARRAY

数组:类似于嵌套表,但元素个数要指定上限。

TYPE VARRAY_NAME  IS  VARRY(SIZE) OF ELEMENT_TYPE [NOT NULL];

案例:

SQL> declare

  2  type tab_varray_type is varray(4) of varchar2(1);

  3  v_tab_varray  tab_varray_type;

  4  begin

  5    v_tab_varray :=tab_varray_type('A','B','C','D');

  6    dbms_output.put_line(v_tab_varray(1));

  7    dbms_output.put_line(v_tab_varray(2));

  8    dbms_output.put_line(v_tab_varray(3));

  9    dbms_output.put_line(v_tab_varray(4));

 10    dbms_output.put_line(v_tab_varray(1)||'-'||v_tab_varray(4));

 11    end;

 12  /

A

B

C

D

A-D

PL/SQL procedure successfully completed

 

 

—参照变量

是值用于存放数值指针的变量

参照变量的类型

游标变量(REF CURSOR)

对象类型变量(REF obj_type)

 

 

PL/SQL 代码标准化

①变量以v_开头

②常量以c_开头

③游标以_cursor结尾

④异常以e_开头

⑤表类型以_table_type结尾

⑥表变量以_table结尾

⑦记录类型以_record_type结尾

⑧记录变量以_record结尾

①SQL关键字采用大写

②PL/SQL关键字采用大写

③数据类型采用大写

④标识符和参数采用小写

⑤数据库对象和列采用小写

 

代码缩进:

①同级代码应对齐

②下一级代码要进行缩进

 


从零构建Fama-French多因子模型:量化投资系统开发实战 本文详细介绍了如何从零构建Fama-French多因子模型,并将其应用于量化投资系统的开发。首先,文章概述了Fama-French多因子模型的背景、核心原理和架构,解释了其如何通过引入市场风险、规模、价值、盈利和投资等因子来解释股票收益率的变化。接着,文章详细阐述了构建该模型的具体步骤,包括因子的计算、因子暴露的确定以及模型的估计。通过数学模型和公式,文章对模型进行了理论推导,并举例说明了其应用。此外,文章还提供了项目实战的代码案例,从开发环境搭建到源代码实现,逐步指导读者完成量化投资系统的开发。最后,文章 阅读详情

相关推荐

CS5523实战:如何用国产芯片完美替代LT8911设计MIPI转eDP电路(附原理图)

本文详细介绍了使用国产芯片CS5523完美替代LT8911进行MIPI转eDP电路设计的实战经验。文章从芯片选型、核心特性对比入手,深入剖析了电源时钟设计、MIPI/eDP接口的PCB布局与信号完整性要点,并提供了完整的原理图参考和调试排错指南,为硬件工程师实现国产化替代提供了清晰可行的方案。

yhn4567890的博客 1140

PLSQL编程语言

PL/SQL编程语言 PL/SQL(Procedure Language/SQL) PL : P 过程化 L 语言 SQL:结构化查询语言 PLSQL 是 Oracle 对 sql 语言的过程化扩展, 指在 SQL 命令语言中增加了过程处理语句(如分支、循环等), 使 SQL 语言具有过程处理能力。 把 SQL 语言的数据操纵能力与过程语言的数据处理能力结合起来, 使得 PLSQL ...

h294590501的专栏 7470

Open3D 教程学习指南 (持续整理)

Open3D 是一个开源库,旨在为 3D 数据处理提供高效且易用的工具。它由 Intel 开发和维护,支持多种 3D 数据处理任务,如点云处理、3D 重建、几何处理和可视化等。

Chase Blog 5932

PL/SQL详述

PL/SQL语言(Procedural Language/SQL,过程化SQL语言)是Oracle推出的过程化的SQL编程语言,使用PL/SQL可以为SQL语言引入结构化的程序处理能力,例如可以在PL/SQL中定义常量、变量、游标、存储过程等,可以使用条件、循环等流程控制语句。PL/SQL的这种特性使得开发人员可以在数据库中添加业务逻辑,并且由于业务逻辑与数据均位于数据库服务器端,比客户端编写的业务逻辑能提供更好的性能。PL/SQL是一种块结构的语言,它将一组语句放在一个块中,一次性发送给服务器,PL/SQ

qq_62687015的博客 1万+

分子动力学模拟学习1-采用AmberTools21的MCPB.py构建金属蛋白的top文件

分子动力学模拟学习1-采用AmberTools21的MCPB.py构建金属蛋白的top文件

weixin_45011386的博客 3826

CAN收发器TJA1145A休眠唤醒应用

TJA1145的唤醒工作原理主要依赖于其内部的唤醒机制和外部硬件的配合,主要涉及低功耗状态、选择性唤醒功能。TJA1145是一款CAN收发器,它支持多种工作模式,包括NormalStandbySleep等。在这些模式中,Sleep模式是最低功耗状态,而Normal模式则是最活跃的状态,其中Standby模式处于两者之间,允许一定的功能操作但功耗较低。TJA1145可以通过接收特定的唤醒源从Sleep或Standby模式唤醒到Standby或Normal模式。唤醒源的检测与处理。

radix关于mcu的博客,持续更新中... 5954

PL/SQL基础入门,史上最全的教程

1、什么是PL/SQL? PLSQL是Oracle对sql语言的过程化扩展 (类似于Basic) 指在SQL命令语言中增加了过程处理语句(如分支、循环等),使SQL语言具有过程处理能力。(减少数据库和服务器之间的交互,提高执行效率) 2、程序结构 PLSQL语言的大小写是不区分的,PL/SQL可以分为三个部分:声明部分、可执行部分、异常处理部分。 DECLARE – 声明变量、游标。 I INTEGER; BEGIN – 执行语句 –[异常处理] END; 其中 DECLARE部分用来声明变量或游标(结果集

qq_46297315的博客 2万+

SAP-ABAP:SAP HANA性能神器FDA:是极速查询的引擎,也是CPU过载的元凶

在SAP S/4HANA的世界里,有一个被ABAP开发者们既爱又怕的特性——Fast Data Access(FDA),它能将性能提升百倍,也能让CPU瞬间飙升。本文将带您全面解剖这一核心机制。

baidu_35680696的博客 849

PL/SQL概述

PL/SQL(Procedure Language/SQL)是 Oracle对 sql 语言的过程化扩展,指在 SQL 命令语言中增加了过程处理语句(如分支、循环等),使 SQL 语言具有过程处理能力。把SQL语言的数据操纵能力与过程语言的数据处理能力结合起来,使得 PLSQL 面向过程但比过程语言简单、高效、灵活和实用。

weixin_71629261的博客 4695

银行一表通监管报送系统详解

国家金融监管总局对于“一表通”的总体描述为:通过建立一套明细级、标准化的数据体系和汇总计算规则,将银行机构传送至监管可信区的业务明细数据汇总生成财务指标、监管指标和监管报表,大幅提升监管数据时效性,统一数据标准,实现数据间的穿透和整合,同时改变机构多头报送数据模式,减轻机构报送负担。

银行信息系统应用架构详解 2520

手把手教你学Simulink——基于Simulink的全双工无线通信仿真建模示例

目录手把手教你学Simulink——基于Simulink的全双工无线通信仿真建模示例一、背景介绍二、所需工具和环境三、步骤详解步骤1:创建Simulink模型步骤2:设计输入信号步骤3:添加调制模块步骤4:添加自干扰消除模块步骤5:添加AWGN信道步骤6:添加接收端处理步骤7:添加解调模块步骤8:计算误码率(BER)步骤9:添加显示模块步骤10:设置仿真参数步骤11:运行仿真并分析结果四、总结 全双工(Full-Duplex)无线通信技术允许在同一频段上同时进行数据的发送和接收,这与传统的半双工(Half-

MHD0815的博客 182

Oracle PL/SQL 编程入门:第二章 PL/SQL 语言基础

在这一章中,我们深入探讨了 PL/SQL 的语言基础,包括变量的使用、保留字、标识符、数据类型以及块的作用范围等核心概念。变量的使用:掌握如何声明和使用变量,以及变量的作用范围。保留字和标识符:了解 PL/SQL 中的保留字和标识符的命名规则。数据类型:熟悉常用的标量类型,如数值类型、字符类型和日期类型。块和嵌套块:理解块的作用范围和嵌套块的使用方法。

caifox的博客 992

Python爬虫实战:全自动采集银行理财产品收益率数据

本文通过Playwright动态爬虫技术,成功实现了对银行理财产品收益率数据的实时采集,并通过 Pandas 数据清洗、SQLite 存储、调度自动化等模块,构建了一个可扩展的银行理财数据抓取系统。理财非儿戏,数据做决策。掌握银行收益信息是我们迈向理性投资的第一步。希望这套工具对你有所帮助!

2201_76125261的博客 1156

[转贴]Oracle PL/SQL语言基础

Oracle PL/SQL语言基础   PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL/SQL程序。     PL/SQL的优点     从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一

学习点滴 612

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Oracle PL/SQL语言基础

Oracle PL/SQL语言基础  2002-8-23   Oracle PL/SQL语言基础 PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL/SQL程序。 PL/SQL的优点 从版本6开始

My urban life 3766

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Oracle基础——第三章 Oracle PL/SQL语言基础

本章目标   PL/SQL语言基本结构 PL/SQL变量和常量的声明 PL/SQL程序的执行部分 了解PL/SQL常用函数   PL/SQL简介   1.       PL/SQL简介 a)       PL/SQL(Procedural Language/SQL,过程语言/SQL)                         i.              它是结合

DBA@Robin 4324

PL/SQL语言基础

PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL/SQL程序。  PL/SQL的优点  从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有的数据管理的便利性

AprilChen的专栏 3146
上一篇: 【PL/SQL】PL/SQL介绍
下一篇: 【PL/SQL】处理数据
卜塔
博客等级 码龄10年 135粉丝 318原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值