plsql基本语法格式

2024-05-28 14:18
文章标签 语法 基本 格式 plsql

本文主要是介绍plsql基本语法格式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1 PL/SQL可用的SQL语句
    • 2 PL/SQL块
    • 3 建议的命名方法
    • 4 复合类型
      • 4.1 使用记录类型
      • 4.2 使用%ROWTYPE

1 PL/SQL可用的SQL语句

PL/SQL是ORACLE系统的核心语言,现在ORACLE的许多部件都是由PL/SQL写成。在PL/SQL中可以使用的SQL语句有:

INSERT, UPDATE, DELETE, SELECT ... INTO, COMMIT, ROLLBACK, SAVEPOINT。

提示:在PL/SQL中只能用SQL语句中的DML部分,不能用DDL部分,如果要在PL/SQL中使用DDL(如CREATE table等)的话,只能以动态的方式来使用。

2 PL/SQL块

PL/SQL程序由三个块组成,即声明部分、执行部分、异常处理部分

PL/SQL块的结构如下:

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

其中,执行部分是必须的

例如:(在PL/SQL中执行前需运行set serveroutput on语句)

--declare--声明的变量、类型、游标
begin--程序的执行部分(类似于java里的main()方法)dbms_output.put_line('helloworld');
--exception--针对begin块中出现的异常,提供处理的机制--when ... then ...--when ... then ...
end;
declare--变量、记录类型等的声明v_sal number(8,2) := 0;
begin--程序的执行部分select salary into v_salfrom employeeswhere employee_id = 123;dbms_output.put_line('salary: '||v_sal);
--exception--异常的处理
end;

在 PL/SQL 编程中,变量赋值是一个值得注意的地方,它的语法如下:
variable := expression;
variable 是一个 PL/SQL 变量,expression 是一个 PL/SQL 表达式

--查询编号为100号员工的工资
declare--声明变量v_sal varchar2(20);
begin--sql语句的操作:select ... into ... from ... where ...select salary into v_sal from employees where employee_id = 100;--打印dbms_output.put_line(v_sal);
end;
--查询编号为100号员工的工资,邮箱,入职时间
declare--声明变量v_sal number(10,2);v_email varchar2(20);v_hire_date date;
begin--sql语句的操作:select ... into ... from ... where ...select salary, email, hire_date into v_sal, v_email, v_hire_date from employees where employee_id = 100;--打印dbms_output.put_line(v_sal||','||v_email||','||v_hire_date);
end;

使用%TYPE
定义一个变量,其数据类型与已经定义的某个数据变量的类型相同,或者与数据库的某个列的数据类型相同,这时可以使用%TYPE
使用%TYPE特性的优点在于:

  • 所引用的数据库列的数据类型可以不知道
  • 所引用的数据库列的数据类型可以实时改变
declare--声明变量v_sal employees.salary%type;v_email employees.email%type;v_hire_date employees.hire_date%type;
begin--sql语句的操作:select ... into ... from ... where ...select salary, email, hire_date into v_sal, v_email, v_hire_date from employees where employee_id = 100;--打印dbms_output.put_line(v_sal||','||v_email||','||v_hire_date);
end;

3 建议的命名方法

标识符命名规则例子
程序变量v_namev_name
程序常量c_namec_company_name
游标变量name_cursoremp_cursor
异常标识e_namee_too_many
表类型name_table_typeemp_record_type
name_tableemp_table
记录类型name_recordemp_record
SQL*Plus替代变量p_namep_sal
绑定变量g_nameg_year_sal

4 复合类型

4.1 使用记录类型

ORACLE在PL/SQL中除了提供基础的变量类型外,还提供一种称为复合类型的类型——记录

记录类型是把来逻辑相关的数据作为一个单元存储起来,称作PL/SQL RECORD的域(FIELD),其作用是存放互不相同但逻辑相关的信息
例如:

declare--声明一个记录类型type emp_record is record(v_sal employees.salary%type,v_email employees.email%type,v_hire_date employees.hire_date%type);--定义一个记录类型的成员变量v_emp_record emp_record;
begin--sql语句的操作:select ... into ... from ... where ...select salary, email, hire_date into v_emp_record from employeeswhere employee_id = 100;--打印dbms_output.put_line(v_emp_record.v_sal||','||v_emp_record.v_email||','||v_emp_record.v_hire_date);
end;
declaretype salary_record is record(v_name varchar2(20),v_salary number(10,2));v_salary_record salary_record;
beginv_salary_record.v_name := '刘德华';v_salary_record.v_salary := 100000; dbms_output.put_line('name: '||v_salary_record.v_name||' salary: '||v_salary_record.v_salary);
end;

4.2 使用%ROWTYPE

PL/SQL 提供%ROWTYPE操作符,返回一个记录类型,其数据类型和数据库表的数据结构相一致
使用%ROWTYPE特性的优点在于:

  • 所引用的数据库中列的个数和数据类型可以不必知道
  • 所引用的数据库中列的个数和数据类型可以实时改变
declarev_emp_record employees%rowtype;
beginselect * into v_emp_record from employees where employee_id = 123;dbms_output.put_line('employeeid: '||v_emp_record.employee_id);
end;

这篇关于plsql基本语法格式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010804

相关文章

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

easyui同时验证账户格式和ajax是否存在

accountName: {validator: function (value, param) {if (!/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/i.test(value)) {$.fn.validatebox.defaults.rules.accountName.message = '账户名称不合法(字母开头,允许4-16字节,允许字母数字下划线)';return fal

C 语言的基本数据类型

C 语言的基本数据类型 注:本文面向 C 语言初学者,如果你是熟手,那就不用看了。 有人问我,char、short、int、long、float、double 等这些关键字到底是什么意思,如果说他们是数据类型的话,那么为啥有这么多数据类型呢? 如果写了一句: int a; 那么执行的时候在内存中会有什么变化呢? 橡皮泥大家都玩过吧,一般你买橡皮泥的时候,店家会赠送一些模板。 上

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

Java 多线程的基本方式

Java 多线程的基本方式 基础实现两种方式: 通过实现Callable 接口方式(可得到返回值):

C++语法知识点合集:11.模板

文章目录 一、非类型模板参数1.非类型模板参数的基本形式2.指针作为非类型模板参数3.引用作为非类型模板参数4.非类型模板参数的限制和陷阱:5.几个问题 二、模板的特化1.概念2.函数模板特化3.类模板特化(1)全特化(2)偏特化(3)类模板特化应用示例 三、模板分离编译1.概念2.模板的分离编译 模版总结 一、非类型模板参数 模板参数分类类型形参与非类型形参 非类型模板

Java基础回顾系列-第一天-基本语法

基本语法 Java基础回顾系列-第一天-基本语法基础常识人机交互方式常用的DOS命令什么是计算机语言(编程语言) Java语言简介Java程序运行机制Java虚拟机(Java Virtual Machine)垃圾收集机制(Garbage Collection) Java语言的特点面向对象健壮性跨平台性 编写第一个Java程序什么是JDK, JRE下载及安装 JDK配置环境变量 pathHe

[数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2757 标注数量(xml文件个数):2757 标注数量(txt文件个数):2757 标注类别数:4 标注类别名称:["Platelets","RBC","WBC","sickle cell"] 每个类别标注的框数:

一步一步将PlantUML类图导出为自定义格式的XMI文件

一步一步将PlantUML类图导出为自定义格式的XMI文件 说明: 首次发表日期:2024-09-08PlantUML官网: https://plantuml.com/zh/PlantUML命令行文档: https://plantuml.com/zh/command-line#6a26f548831e6a8cPlantUML XMI文档: https://plantuml.com/zh/xmi