网站首页 > 技术文章 正文
第二章:PL/SQL基础
2.1 PL/SQL程序结构
2.1.1 PL/SQL块的类型
所有的PL/SQL程序都是以块作为基本单位,以及都是由块组成的。
这些块可以是按顺序出现的,也可以是嵌套的
块可以根据其带名称和不带名称以及在数据库中的存储方式分为以下类型:
匿名块:只能执行一次,不能存储在数据库中
带名块:一种带标签的匿名块
子程序:可以存储在数据库中的过程,函数和包,可以多次执行,可以在外部的程序中显示调用
触发器:存储在数据库中的带名块,当相应的触发事件发生时触发器就被自动执行,触发器事件一般是针对特定的数据库表进行的DML语句,如INSERT,UPDATE,DELTE
<<I_Namedblock>>
DECLARE
v_num1 NUMBER := 1;
v_num2 NUMBER := 2;
v_str1 VARCHAR2 (30) := '你好!';
v_str2 VARCHAR2 (30) := '这是你第一次接触PL/SQL';
v_outputstr VARCHAR2 (30);
BEGIN
INSERT INTO test_table(ncolumn, vcolumn)VALUES (v_num1, v_str1);
INSERT INTO test_table(ncolumn, vcolumn)VALUES (v_num2, v_str2);
SELECT vcolumn INTO v_outputstr FROM test_table WHERE ncolumn = v_num1;
DBMS_OUTPUT.put_line (v_outputstr);
SELECT vcolumn INTO v_outputstr FROM test_table WHERE ncolumn = v_num2;
DBMS_OUTPUT.put_line (v_outputstr);
END I_Namedblock;
带名块就是在匿名块前面加上一个标签
把DECLARE关键字 变成 CREATE OR REPLACE PROCEDURE 就变成了存储过程
CREATE OR REPLACE PROCEDURE 过程名 IS
2.1.2 PL/SQL块的结构
所有块都包含3个部分:声明部分,执行部分,异常处理部分
DECLARE
v_ncolumn NUMBER :=6;
v_vcolumn VARCHAR2(30);
BEGIN
SELECT v_column INTO v_vcolumn FROM test_table WHERE ncolumn=v_ncolumn;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('没有找到匹配的数据');
END;
在过程和函数中声明变量是不需要DECLARE的,但在声明TRIGGER中的变量是必须要有DECLARE
如果块中不需要声明变量,类型和游标时,声明部分可以省略
执行部分是不可缺少的,一般以BEGIN开始 END结束。END关键字必须是分号结束的
2.1.3 词法单位
e代表乘以10的多少次幂
2.2 变量声明
Variable_name [CONSTANT] type [NOT NULL][:=value | DEAFULT value]
Variable_name是变量名
CONSTANT 声明的是一个常量
Type 是类型
NOT NULL 可选,表示不能为空
:=value | DEAFULT value表示赋值
缺省的变量会被初始化为NULL
不能把NULL付给一个定义为NOT NULL的变量acct_id INTEGER(5) NOT NULL;这样是不允许的
在NATURAL和POSITIVEN,他们被预先定义为NOT NULL
每行只能声明一个变量,这和其他语言不同
BEGIN END;是可以嵌套的
2.3 变量类型
4中标量类型(数字类型,布尔型,字符型,日期型)
复合型
引用型
LOB型
数字型的三种基本类型:BINARY_INTEGER,NUMBER,PLS_INTEGER
字符型:CHAR,VARCHAR2,LONG和LONG RAW,RAW,ROWID和UROWID
LOB类型:BFILE,BLOB,CLOB,NCLOB
布尔类型:BOOLEAN(TRUE,FALSE,NULL)
日期时间类型:DATE,TIMESTAMP,TIMESTAMP WITH TIME ZONE,TIMESTAMP WITH LOCAL TIME ZONE,INTERVAL YEAR TO MONTH,INTERVAL DAY TO SENCOND
复合类型:记录,表,数组
引用类型:REF CURSOR 和ref object_type
用户自定义类型
2.4 数据类型转换
显式转换,可以使用内置函数
隐式转换,隐式转换不是好的习惯,可能会影响效率,结果可能不可预料
2.5 表达式
表达式是由操作符和运算符的结合
CASE 表达式
CASE SELECTOR
WHEN express THEN result1
WHEN express THEN result3
WHEN express THEN result2
END;
猜你喜欢
- 2025-07-17 PageHelper - 最方便的 MyBatis 分页插件
- 2025-07-17 面试二:pagehelper是怎么实现分页的,
- 2025-07-17 MyBatis如何实现分页查询?(mybatis-plus分页查询)
- 2025-07-17 SpringBoot 各种分页查询方式详解(全网最全)
- 2025-07-17 如何在Linux上运行exe文件,怎么用linux运行windows软件
- 2025-07-17 快速了解hive(快速了解美国50个州)
- 2025-07-17 Python 中的 pyodbc 库(pydbclib)
- 2025-07-17 Linux搭建Weblogic集群(linux weblogic部署项目步骤)
- 2025-07-17 「DM专栏」DMDSC共享集群之部署(一)——共享存储配置
- 2025-07-17 故障分析 | MySQL 派生表优化(mysql pipe)
你 发表评论:
欢迎- 612℃几个Oracle空值处理函数 oracle处理null值的函数
- 603℃Oracle分析函数之Lag和Lead()使用
- 592℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 589℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 583℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 576℃【数据统计分析】详解Oracle分组函数之CUBE
- 566℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 558℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- PageHelper - 最方便的 MyBatis 分页插件
- 面试二:pagehelper是怎么实现分页的,
- MyBatis如何实现分页查询?(mybatis-plus分页查询)
- SpringBoot 各种分页查询方式详解(全网最全)
- 如何在Linux上运行exe文件,怎么用linux运行windows软件
- 快速了解hive(快速了解美国50个州)
- Python 中的 pyodbc 库(pydbclib)
- Linux搭建Weblogic集群(linux weblogic部署项目步骤)
- 「DM专栏」DMDSC共享集群之部署(一)——共享存储配置
- 故障分析 | MySQL 派生表优化(mysql pipe)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)