declare --可选 --(声明部分) --变量名 变量类型 可选空值约束 可选默认值 | 可选赋值 分号结尾 value1 NUMBER(2) not null default 0; v_ename emp.ename%TYPE;--> %TYPE 先前已经声明的变量 | 表中字段 v_row emp%ROWTYPE;--> table | cursor %ROWTYPE 与 数据库表 或 游标 的行具有相同类型的记录变量 --自定义一个复合数据类型 TYPE many_value IS RECORD (name v_ename%TYPE:='chen',eno number(2),job varchar2(20));-->括号内部定义和普通类型定义一致 TYPE ps_table IS TABLE OF DATE INDEX BY BINARY_INTEGER;-->定义的是一个PL/SQL表 v_many many_value; v_ps_table ps_table; begin --必选 --(执行部分) --控制结构 --IF 逻辑结构:IF-THEN-END IF IF-THEN-ELSE-END IF IF-THEN-ELSEIF-THEN-END IF --对复合数据类型进行赋值 v_many.eno:=10; v_many.job:='programmer'; --对PL/SQL表进行赋值 v_ps_table(1) := SYSDATE; -->对于PL/SQL表有 EXISTS(n) 判断PL/SQL表中指定元素是否存在 --> COUNT返回PL/SQL表当前包含元素的个数 --> FIRST | LAST 在PL/SQL中返回第一个 | 最后一个索引数字 --> DELETE | DELETE(n) | DELETE(n,m) 删除PL/SQL表中元素 | 删除第n个元素 | 删除第n到m个元素 --连接变量 连接变量在sql plus中定义--> SQL>VARIABLE ret_val NUMBER --:ret_val:=1; ->在PL/SQL中引用连接变量,前面加一个冒号: , 赋值之后可以在SQL PLUS中显示连接变量的值:SQL>PRINT ret_val; value1:=10; IF value1>0 THEN DBMS_OUTPUT.PUT_LINE('value is greater than 0'); ELSE IF value1=0 THEN DBMS_OUTPUT.PUT_LINE('value is 0'); ELSE DBMS_OUTPUT.PUT_LINE('value is less than 0'); END IF; END IF; --CASE 逻辑结构:CASE-WHEN-THEN-;WHEN-THEN-.... CASE value1 WHEN -1 THEN DBMS_OUTPUT.PUT_LINE('value is less than 0'); WHEN 0 THEN DBMS_OUTPUT.PUT_LINE('value is 0'); WHEN 1 THEN DBMS_OUTPUT.PUT_LINE('value is greater than 0'); ELSE DBMS_OUTPUT.PUT_LINE('value is '||value1); END CASE; --循环控制语句 LOOP 3种: BASIC LOOP | FOR LOOP | WHILE LOOP --BASIC LOOP LOOP value1:=value1+1; EXIT WHEN value1>0; END LOOP; --FOR LOOP FOR i IN 1..value1 LOOP DBMS_OUTPUT.PUT_LINE('for ' || i); END LOOP; --WHILE LOOP WHILE value1>20 LOOP value1:=value1+1; END LOOP; --在PL/SQL中允许使用的SQL语句只有DML,事务控制语句,直接使用DDL是非法的 --SELECT 只能返回一行数据 INTO子句必须有 -->将查询到的ename存放到v_ename中 SELECT ename INTO v_ename FROM emp WHERE empno=7527; DBMS_OUTPUT.PUT_LINE('ename is '||v_ename); exception --可选 --(异常处理部分) WHEN OTHERS THEN --必须是最后一个错误处理语句 DBMS_OUTPUT.PUT_LINE('something error!'); END;
declare --可选
--(声明部分)
--变量名 变量类型 可选空值约束 可选默认值 | 可选赋值 分号结尾
value1 NUMBER(2) not null default 0 | :=13 ;
v_ename value1%TYPE | emp.ename%TYPE --> %TYPE 先前已经声明的变量 | 表中字段
v_row emp%ROWTYPE -> table | cursor %ROWTYPE 与 数据库表 或 游标 的行具有相同类型的记录变量
--自定义一个复合数据类型
TYPE many_value IS RECORD (ename value1%TYPE , eno number(2) , job varcahr2(10) ); -->括号内部定义和普通类型定义一致
TYPE ps_table IS TABLE OF DATE /*或者 value1%TYPE 都行*/ INDEX BY BINARY_INTEGER;-->定义的是一个PL/SQL表
v_many many_value ;
v_ps_table ps_table;
--对复合数据类型进行赋值
v_many.ename := 'chen'; v_many.eno:=10; v_many.job:='programmer';
--对PL/SQL表进行赋值
v_ps_table(1) := SYSDATE; -->对于PL/SQL表有 EXISTS(n) 判断PL/SQL表中指定元素是否存在
--> COUNT返回PL/SQL表当前包含元素的个数
--> FIRST | LAST 在PL/SQL中返回第一个 | 最后一个索引数字
--> DELETE | DELETE(n) | DELETE(n,m) 删除PL/SQL表中元素 | 删除第n个元素 | 删除第n到m个元素
--连接变量 连接变量在sql plus中定义--> SQL>VARIABLE ret_val NUMBER
:ret_val:=1; ->在PL/SQL中引用连接变量,前面加一个冒号: , 赋值之后可以在SQL PLUS中显示连接变量的值:SQL>PRINT ret_val;
begin --必选
--(执行部分)
--控制结构
--IF 逻辑结构:IF-THEN-END IF IF-THEN-ELSE-END IF IF-THEN-ELSEIF-THEN-END IF
IF value1 > 0 THEN
DBMS_OUTPUT.PUT_LINE('value is greater than 0');
ELSE IF value1=0 THEN
DBMS_OUTPUT.PUT_LINE('value is 0');
ELSE
DBMS_OUTPUT.PUT_LINE('value is less than 0');
--CASE 逻辑结构:CASE-WHEN-THEN-;WHEN-THEN-....
CASE value1
WHEN -1 THEN DBMS_OUTPUT.PUT_LINE('value is less than 0');
WHEN 0 THEN DBMS_OUTPUT.PUT_LINE('value is 0');
WHEN 1 THEN DBMS_OUTPUT.PUT_LINE('value is greater than 0');
--最好加个ELSE
END CASE;
--循环控制语句 LOOP 3种: BASIC LOOP | FOR LOOP | WHILE LOOP
--BASIC LOOP
LOOP
value1:=value1+1;
EXIT WHEN value1>0;
END LOOP;
--FOR LOOP
FOR i IN 1..value1 LOOP
DBMS_OUTPUT.PUT_LINE('for ' || i);
END LOOP;
--WHILE LOOP
WHILE value1>10 LOOP
value1:=value1+1
END LOOP;
--在PL/SQL中允许使用的SQL语句只有DML,事务控制语句,直接使用DDL是非法的
--SELECT 只能返回一行数据 INTO子句必须有 -->将查询到的ename存放到v_ename中
SELECT ename INTO v_ename FROM emp WHERE no=1;
exception --可选
--(异常处理部分)
WHEN exception1 THEN
WHEN OTHERS THEN --必须是最后一个错误处理语句
end --必选
注:
在处理潜在的二义性SQL语句时:
--局部变量和形式参数优先于数据库表名
--数据库的列名优先于局部变量和形式参数名字
控制语句IF中的ELSEIF没有匹配的END IF;
处理NULL值:
--使用is null 来处理null值的表达式
--任何包含null值的逻辑表达式,其值为null,不为true或false
--用null值来进行字符串连接时,null被当成空字符串来处理
循环可以嵌套:
--循环允许多层嵌套
--标签用于区别PL/SQL块和循环
--使用exit语句退出到循环的外层
oracle服务预定义异常:
--CASE_NOT_FOUND (ORA-06592)
--NO_DATA_FOUND (ORA-1403)
--TOO_MANY_ROWS (ORA-1422)
--DUP_VAL_ON_INDEX (ORA-0001)
--ZERO_DIVIDE (ORA-1476)
--INVALID_CURSOR (ORA-1001)
--VALUE_ERROR (ORA-6502)
相关推荐
以下是对PL/SQL的学习笔记的详细解析: 1. **什么是PL/SQL语言** PL/SQL是Oracle数据库为数据库管理员和开发人员设计的一种编程语言。它扩展了SQL的功能,允许编写包含控制结构、变量、过程和函数的程序段,这些...
### PL/SQL学习笔记4 —— 集合与成员函数 #### 一、PL/SQL 表(索引表) 在PL/SQL中,**索引表**(也称为**PL/SQL表**)是一种非常有用的结构,它类似于数组但具有更多的灵活性。这种表是非持久化的,即它们不会...
在这个“我的PL/SQL学习笔记(一)”中,我们将探讨PL/SQL的基础知识,包括其语法结构、变量声明、流程控制以及如何与Oracle数据库中的数据进行交互。 首先,PL/SQL的基本结构分为声明部分、执行部分和异常处理部分...
在PL/SQL编程中,游标是处理查询结果集的重要工具。它们允许程序逐行处理结果,而不是一次性加载所有数据,这对于大型数据集尤其有用,因为它可以节省内存并提高性能。下面将详细解释游标的基本概念、分类以及如何在...
本文将深入探讨从"SQL,PL/SQL学习笔记"中提取的关键知识点,帮助编程人员更好地理解和运用这两种语言。 首先,我们关注SQL并行查询。通过`ALTER SESSION ENABLE PARALLEL DMl`,我们可以开启会话的并行DML操作,这...
在PL/SQL编程中,存储过程和函数是关键的组件,它们允许我们将可重用的代码逻辑存储在数据库中,以便于管理和调用。本文主要探讨了存储过程、函数以及程序包的概念,特点,创建方法,执行方式,权限管理以及参数处理...
PL/SQL数据库学习笔记 PL/SQL是一种高级的程序语言,主要用于Oracle数据库管理系统中。下面是PL/SQL数据库学习笔记的知识点总结。 一、基本原则 *瀑布模型:需求分析→设计(概要设计,详细设计:SQL语句,变量...
在学习PL/SQL的过程中,理解这些基本概念和结构是至关重要的。通过实践编写存储过程、函数和触发器,你可以逐渐掌握PL/SQL的强大功能,并利用它来解决实际的数据库编程问题。对于初学者来说,循序渐进、结合实例学习...
在PL/SQL的学习中,分区是数据库管理大型数据集的一种高效方法,特别是在处理大数据量时。本篇笔记主要探讨了何时应该使用分区以及Oracle支持的分区类型。 首先,当面对超过2GB的大数据表时,分区是十分必要的。这...
ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括...这本书籍将为读者提供一个全面、系统的学习路径,帮助数据库管理员、开发人员深入理解并掌握ORACLE PL/SQL的强大功能和应用技巧。
总的来说,“PL/SQL超级笔记”应该涵盖了从基本语法到高级特性的全面教程,通过学习,新手可以逐步掌握如何使用PL/SQL进行数据库编程,从而更好地管理和操作Oracle数据库。配合"oracle_ppt"中的PPT材料,学习效果会...
### PL/SQL听课笔记 #### 一、PL/SQL简介 **PL/SQL**(Procedural Language for SQL)是一种专门为Oracle数据库设计的过程化语言扩展。它是在标准SQL基础上增加了一系列高级编程特性,如变量、控制结构、函数、...
### PL/SQL 学习笔记知识点详解 #### 1. PL/SQL 基本结构 - **DECLARE**: 在此部分声明变量、常量、数据类型及游标。 - **BEGIN**: 主程序体开始,可以包含任何合法的PL/SQL语句。 - **EXCEPTION**: 异常处理部分,...
这篇课堂笔记主要涵盖了基础的SQL查询语法和部分PL/SQL概念。 首先,SQL查询的基础是从数据库中选择数据。`SELECT`语句用于指定需要选取的列,如`SELECT ename, sal, job FROM emp;`。字段顺序可以自由调整,例如`...