PL/SQL 是甲骨文公司为 Oracle 数据库设计的过程化编程语言,在 SQL 之上增加了变量、流程控制、异常处理等能力,用于编写存储过程、函数、触发器和包。它让业务逻辑贴近数据执行,是 Oracle 生态的核心开发语言。

| 开发者 | 甲骨文公司 |
| 首次推出 | 随 Oracle 6(1988年前后) |
| 语言类型 | 过程化数据库语言 |
| 语法蓝本 | Ada |
| 典型载体 | 存储过程、触发器、包 |
| 同类方言 | T-SQL、PL-pgSQL |
PL/SQL(Procedural Language/Structured Query Language)是甲骨文(Oracle)公司为其数据库开发的过程化扩展语言,于20世纪80年代末随 Oracle 6 首次推出。它把过程化编程能力嫁接到 SQL 之上,使开发者可以在数据库内部编写完整的业务逻辑。
SQL 是声明式语言,擅长描述取什么数据,却不便表达先做什么再做什么的流程。PL/SQL 弥补了这一空白:它以 Ada 语言的语法风格为蓝本,提供变量、条件、循环、异常等结构,并允许在其中无缝嵌入 SQL 语句。代码以存储过程、函数、触发器、包(Package)的形式保存在数据库中,由数据库服务器直接执行。银行、电信、政务等行业的大量核心系统,其账务处理与批量作业至今仍运行在 PL/SQL 之上。
典型用途包括:日终批处理与账务结转、复杂报表的数据加工、数据仓库 ETL、用触发器实现审计与数据校验、通过存储过程向应用层暴露受控的数据接口等。Oracle 自带的大量管理功能(DBMS_SCHEDULER、DBMS_STATS 等)本身也以 PL/SQL 包的形式提供。
问:PL/SQL 与标准 SQL 有什么区别?答:SQL 负责数据的增删改查,是声明式的;PL/SQL 在其外层提供流程控制与程序组织能力,两者配合使用,PL/SQL 也仅存在于 Oracle 体系(其他数据库有各自方言,如 SQL Server 的 T-SQL、PostgreSQL 的 PL/pgSQL)。
问:业务逻辑写在数据库里是好实践吗?答:各有取舍。优点是批量处理快、数据一致性易保证;缺点是与特定数据库绑定、版本管理与横向扩展较难。现代系统多把重数据逻辑留在库内,而把业务流程放在应用层。
问:去 Oracle 化后 PL/SQL 代码怎么办?答:通常需改写为目标库方言(如 PL/pgSQL)或上移到应用层,这是国内信创迁移项目中工作量最大的环节之一。

| 开发者 | 甲骨文公司 |
| 首次推出 | 随 Oracle 6(1988年前后) |
| 语言类型 | 过程化数据库语言 |
| 语法蓝本 | Ada |
| 典型载体 | 存储过程、触发器、包 |
| 同类方言 | T-SQL、PL-pgSQL |
登录 后参与讨论
暂无讨论,来发表第一条评论吧