百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

PL/SQL 杂谈(二)(pl/sql developer使用)

mhr18 2025-06-18 22:40 5 浏览 0 评论

承接(一)部分。我们从结构和功能这两个方面展示PL/SQL的关键要素。可以看看 PL/SQL 的优雅的代码。写出一个好的代码,就和文科生写出一篇优秀的作文一样,那么赏心悦目。

1、与SQL的集成

PL/SQL的一个最重要的表现就是和SQL的紧密集成。我们不必依赖其他中间软件作为胶水去运行PL/SQL中的SQL语句,比如ODBC(开放数据库连接)或JDBC(JAVA数据库连接),相反我们只需在代码中插入 update 或 select 语句,看看下面这个匿名块:

declare

l_book_count integer;---定义一个计数书本数量的变量,integer 数据类型

------

begin

select count(*)

into l_book_count

from books

where author like '%张飞%';

/*以上这部分是将从数据表 BOOKS 查询到作者为张飞的书本数量计数,存入到变量 l_book_count*/

dbms_output.put_line('张飞写了'||l_book_count|| ' 书本。');

-----以上是在屏幕上输出“张飞写了多少书本。”

Update books

set author=replace(author,'张飞','关羽')

where author like '%张飞%';

---以上是将所有作者名是张飞的书本,都改成关羽。用的是 REPLACE 函数。

end;

2、控制和条件逻辑

(1)if 和 case 语句

他们进行逻辑条件判断,例如 如果一本书的页数大于1000,则需要干什么。在这里,我个人更倾向于写 CASE WHEN 语句,特别是多层嵌套的情况。当然 IF 和 CASE WHEN 是可以相互嵌套的。

(2)一个完整的循环或者迭代控制

包括 For 循环 ,while 循环以及简单 loop 循环

(3)goto 语句

PL/SQL提供了这个语句,使得我们可以无条件将执行跳转到程序的另一个部分。但是,说实话,大多数 ORACLE 的专家都是非常不推荐使用这个语句。在实际编码,我也很少见到有人会使用这个语句。

下面的这个存储过程(一个可以根据名字被调用,可以重复使用的代码块),演示了前面提到的一些特性,大家可以在自己电脑上新建一个表 accounts ,当然要有account_id_in字段。运行之后,可以测试调用结果。代码很简单,一眼就明:

CREATE OR REPLACE PROCEDURE pay_out_balance (

account_id_in IN accounts.id%TYPE)

IS

l_balance_remaining NUMBER;

BEGIN

LOOP

l_balance_remaining := account_balance (account_id_in);

IF l_balance_remaining < 1000

THEN

EXIT;

ELSE

apply_balance (account_id_in, l_balance_remaining);

---如果自己没有这个过程,可以用屏幕输出代替来测试

END IF;

END LOOP;

END pay_out_balance;

3、出错处理

无论是发现错误还是处理错误,PL/SQL都有一个强大的机制。下面我们根据账户ID获得一个账户的名称和余额,随后判断余额是否过少,如果过少,就要显式引发异常,终止过程的继续执行:

CREATE OR REPLACE PROCEDURE check_account (

account_id_in IN accounts.id%TYPE

)

IS

l_balance_remaining NUMBER;

l_balance_below_minimum EXCEPTION;

l_account_name accounts.name%TYPE;

BEGIN

-- 根据账户 ID 查询账户名称

SELECT name

INTO l_account_name

FROM accounts

WHERE id = account_id_in;

-- 调用 account_balance 函数获取账户余额

l_balance_remaining := account_balance(account_id_in);

-- 输出账户名称和余额信息

DBMS_OUTPUT.PUT_LINE(

'Balance for ' || l_account_name ||

' = ' || l_balance_remaining

);

-- 检查账户余额是否低于 1000

IF l_balance_remaining < 1000 THEN

-- 若低于 1000,抛出自定义异常

RAISE l_balance_below_minimum;

END IF;

EXCEPTION

-- 处理未找到账户的情况

WHEN NO_DATA_FOUND THEN

-- 调用 log_error 函数记录错误信息,这里假设传入账户 ID 和错误信息

log_error(account_id_in, 'No account found for this ID');

-- 重新抛出异常

RAISE;

-- 处理账户余额低于 1000 的情况

WHEN l_balance_below_minimum THEN

-- 调用 log_error 函数记录错误信息,传入账户 ID 和余额信息

log_error(account_id_in, 'Account balance is below 1000');

-- 抛出系统预定义的 VALUE_ERROR 异常

RAISE VALUE_ERROR;

END;

以上的例子可以看出 PL./SQL 的结构和功能。代码简单,逻辑清楚,是不是觉得就好像写出了一篇很有成就感的作文。但是我负责任的说,PL/SQL 是一种易学难精的语言,越往后,你就觉得自己脑子不够用。但是对于我来说,是一种享受。

相关推荐

SpringBoot 各种分页查询方式详解(全网最全)

一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...

《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略

《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...

LoadRunner(loadrunner录制不到脚本)

一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...

Redis数据类型介绍(redis 数据类型)

介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...

RMAN备份监控及优化总结(rman备份原理)

今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...

备份软件调用rman接口备份报错RMAN-06820 ORA-17629 ORA-17627

一、报错描述:备份归档报错无法连接主库进行归档,监听问题12541RMAN-06820:WARNING:failedtoarchivecurrentlogatprimarydatab...

增量备份修复物理备库gap(增量备份恢复数据库步骤)

适用场景:主备不同步,主库归档日志已删除且无备份.解决方案:主库增量备份修复dg备库中的gap.具体步骤:1、停止同步>alterdatabaserecovermanagedstand...

一分钟看懂,如何白嫖sql工具(白嫖数据库)

如何白嫖sql工具?1分钟看懂。今天分享一个免费的sql工具,毕竟现在比较火的NavicatDbeaverDatagrip都需要付费才能使用完整功能。幸亏今天有了这款SQLynx,它不仅支持国内外...

「开源资讯」数据管理与可视化分析平台,DataGear 1.6.1 发布

前言数据齿轮(DataGear)是一款数据库管理系统,使用Java语言开发,采用浏览器/服务器架构,以数据管理为核心功能,支持多种数据库。它的数据模型并不是原始的数据库表,而是融合了数据库表及表间关系...

您还在手工打造增删改查代码么,该神器带你脱离苦海

作为Java开发程序,日常开发中,都会使用Spring框架,完成日常的功能开发;在相关业务系统中,难免存在各种增删改查的接口需求开发。通常来说,实现增删改查有如下几个方式:纯手工打造,编写各种Cont...

Linux基础知识(linux基础知识点及答案)

系统目录结构/bin:命令和应用程序。/boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。/dev:dev是Device(设备)的缩写,该目录...

PL/SQL 杂谈(二)(pl/sql developer使用)

承接(一)部分。我们从结构和功能这两个方面展示PL/SQL的关键要素。可以看看PL/SQL的优雅的代码。写出一个好的代码,就和文科生写出一篇优秀的作文一样,那么赏心悦目。1、与SQL的集成PL/S...

电商ERP系统哪个好用?(电商erp哪个好一点)

电商ERP系统哪个好用?做电商的,谁还没被ERP折腾过?有老板说:“我们早就上了ERP,订单、库存、财务全搞定,系统用得飞起。”也有运营吐槽:“系统是上了,可库存老不准,订单漏单错单天天有,财务对账还...

汽车检测线系统实例,看集中控制与PLC分布控制

PLC可编程控制器,上个世纪70年代初,为取代早期继电器控制线路,开始采取存储指令方式,完成顺序控制而设计的。开始仅有逻辑运算、计时、计数等简单功能。随着微处理的发展,PLC可编程能力日益提高,已经能...

苹果五件套成公司年会奖品主角,几大小技巧教你玩转苹果新品

钱江晚报·小时新闻记者张云山随着春节的临近,各家大公司的年会又将陆续上演。上周,各大游戏公司的年会大奖,苹果五件套又成了标配。在上海的游戏公司中,莉莉丝奖品列表拉得相当长,从特等奖到九等奖还包含了特...

取消回复欢迎 发表评论: