PL SQL基础

合集下载

PL_SQL基础

PL_SQL基础

ORACLE 10g
PLSQL基础 2.根据表的字段定义变量
WEPULL ORACLE 10g
变量的声明还可以根据数据库表的字段进行定义或根据已经定义 的变量进行定义。方法是在表的字段名或已经定义的变量名后加 %TYPE,将其当作数据类型。定义字段变量的方法如下: 变量名 表名.字段名%TYPE; 【训练2】 根据表的字段定义变量。
ORACLE 10g
PLSQL基础 【训练1】 变量的定义和初始化。 输入和运行以下程序: SET SERVEROUTPUT ON
WEPULL ORACLE 10g
DECLARE
v_job
--声明部分标识
VARCHAR2(9);
v_count BINARY_INTEGER DEFAULT 0;
v_total_sal
4. 不能使用Oracle的保留字作为变量名。
5. 变量名不要和在程序中引用的字段名相重,如果相重,变量 名会当作列名来使用。
ORACLE 10g
PLSQL基础
WEPULL ORACLE 10g
变量的作用范围是在定义此变量的程序范围内,如果程序中
包含子块,则变量在子块中也有效。但在子块中定义的变量,仅 在定义变量的子块中有效,在主程序中无效。 变量定义的方法是: 变 量 名 [CONSTANT] 类 型 标 识 符 [NOT NULL][:= 值 |DEFAULT 值];
ORACLE 10g
PLSQL基础 2 块结构和基本语法要求
WEPULL ORACLE 10g
PL/SQL程序的基本单元是块(BLOCK),块就是实现一定功能的 逻辑模块。一个PL/SQL程序由一个或多个块组成。块有固定的结构,
也可以嵌套。一个块可以包括三个部分,每个部分由一个关键字标识。

PLSQL循序渐进全面学习教程(全)

PLSQL循序渐进全面学习教程(全)

PLSQL循序渐进全面学习教程(全)PL/SQL是用于Oracle数据库的编程语言,它结合了SQL语句的数据操作能力和一般编程语言的逻辑控制能力。

PL/SQL循序渐进的全面学习教程将帮助你逐步学习和掌握PL/SQL的各个方面。

1.简介和基础知识:-PL/SQL的概念和背景-PL/SQL的开发工具和环境-PL/SQL和SQL的关系-PL/SQL的基本语法和数据类型2.变量和常量:-PL/SQL变量的声明和使用-不同类型的变量和数据类型-常量的定义和使用3.控制结构:-IF-THEN语句和IF-THEN-ELSE语句-CASE语句的使用-循环语句(FOR循环、WHILE循环)4.异常处理:-异常的概念和分类-异常处理的方法和语句-自定义异常和错误处理5.子程序和函数:-PL/SQL子程序和函数的概念和用途-创建和调用子程序和函数-参数传递和返回值6.游标和结果集:-游标的概念和使用场景-游标的声明、打开、关闭和绑定-使用游标处理结果集和数据集7.触发器:-触发器的概念和作用-创建和使用触发器-触发器的触发事件和触发时机8.包和包体:-包和包体的定义和特点-创建和使用包和包体-包的封装和共享9.过程和函数:-过程和函数的概念和区别-创建和使用过程和函数-过程和函数的编写和调用10.使用PL/SQL开发应用程序:-使用PL/SQL编写数据库操作代码-使用PL/SQL开发业务逻辑-PL/SQL和其他编程语言的集成以上是PL/SQL循序渐进全面学习教程的大纲,你可以根据自己的学习进度逐步深入学习每个主题。

希望这个教程对你学习和掌握PL/SQL编程语言有所帮助!。

PLSQL基本语法

PLSQL基本语法

PLSQL基本语法作者:gqk:1,什么是plsql: 是专⽤于Oracle服务器,在SQL基础之上,添加了⼀些过程化控制语句,叫PLSQL过程化包括有:类型定义,判断,循环,游标,异常或例外处理。

PLSQL强调过程2,Plsql语句块: PL/SQL程序都是以块(block)为基本单位,整个PL/SQL块分三部分:声明部分(⽤declare开头)执⾏部分(以 begin开头)其中执⾏部分是必须的,其他两个部分可选部分(以exception开头)结束:end--基本输出语句:BEGINdbms_output.put_line('hello,world');END;--基本输出语句BEGINdbms_output.put_line('hello,world');dbms_output.put_line(157);dbms_output.put_line(sysdate);dbms_output.put_line(true);--不能传⼊布尔值END;3,Plsql语句块分类: 匿名块:动态构造只执⾏⼀次(main)⼦程序:存储在数据库中的存储过程,函数及包等。

当在数据库建⽴好后可以在其他⼦程序中调⽤触发器:当数据库发⽣操作时,会触发⼀些事件,从⽽⾃动执⾏相应的程序4,Plsql中的变量类型:5,变量的使⽤: plsql中声明和执⾏部分要严格分开,在java中时先声明后写变量plsql中相反先声明在写数据类型: 变量在声明后没有赋值输出结果为空: 变量的声明和初始化:(boolean中只能声明不能输出)DECLAREi NUMBER(4) := 157;j NUMBER(6);c VARCHAR2(200) := 'HELLO,WORLD';d DATE := sysdate;b BOOLEAN := TRUE;BEGINj := 1000;--只能写在执⾏部分dbms_output.put_line('i=' || i);dbms_output.put_line('j=' || j);dbms_output.put_line('c=' || c);dbms_output.put_line('d=' || d);END;在声明快中对常量的声明: 变量名称【constant】 type 【not null】【:value】DECLAREc CONSTANT NUMBER(4) := 100;c2 NUMBER(4) NOT NULL := 101;BEGIN--c := 101; --常量不能重复赋值dbms_output.put_line('c=' || c);dbms_output.put_line('c2=' || c2);END; --空语句 NULL 执⾏语句中必须写东西DECLAREc CONSTANT NUMBER(4) := 100;c2 NUMBER(4) NOT NULL := 101;BEGINNULL;--空语句,作为占位符使⽤END; 6,PLSQL中使⽤sql: --更新100员⼯,⼯资增加1块钱 :(不能再执⾏块中直接输出select语句)声明变量:员⼯的编号声明变量:⼯资追加的钱数DECLAREv_empid BINARY_INTEGER := 100;v_money BINARY_INTEGER := 1;BEGINUPDATE employees SET salary=salary+v_moneyWHERE employee_id=v_empid;COMMIT;END;PLSQL中使⽤SQL语句的⼏种情况:DML或DCL语句:直接执⾏ 查询语句:SELECT...INTO 或者游标DDL语句:动态SQL执⾏  7,SELECT...INTO...的使⽤:语法:SELECT 列1,列2,…… INTO 变量1,变量2,……--查询某个员⼯编号的姓名和⼯资:员⼯编号姓名⼯资 列和变量的顺序,个数必须保持⼀致(如果没有数据则会抛出异常,返回的结果超过⼀⾏也会有异常)DECLAREv_empid BINARY_INTEGER := 101;v_name VARCHAR2(50);v_salary NUMBER(8,2);BEGINSELECT last_name,salaryINTO v_name,v_salaryFROM employeesWHERE employee_id=v_empid;dbms_output.put_line(v_empid || ',' || v_name || ',' || v_salary);END;--查询某个员⼯编号的姓名,⼯资,⼊职⽇期,部门编号:(以上思路我们需要声明多个变量) DECLAREv_empid BINARY_INTEGER := 101;v_name VARCHAR2(50);v_salary NUMBER(8,2);v_hiredate DATE;v_deptid BINARY_INTEGER;BEGINSELECT last_name,salary,hire_date,department_idINTO v_name,v_salary,v_hiredate,v_deptidFROM employeesWHERE employee_id=v_empid;dbms_output.put_line(v_empid || ',' || v_name || ','|| v_salary || ',' || v_hiredate || ',' || v_deptid);END;java中处理多个数据我们可以封装为对象:plsql中可以声明记录类型:时把逻辑相关的数据作为⼀个单元存储起来:--记录类型record--查询某个员⼯编号的姓名,⼯资,⼊职⽇期,部门编号DECLARETYPE emp_record_type IS RECORD (empid BINARY_INTEGER := 102,ename VARCHAR2(50),salary NUMBER(8,2),hiredate DATE,deptid BINARY_INTEGER);e emp_record_type;BEGINSELECT employee_id,last_name,salary,hire_date,department_idINTO eFROM employeesWHERE employee_id=e.empid;dbms_output.put_line(e.empid);dbms_output.put_line(e.ename);dbms_output.put_line(e.salary);dbms_output.put_line(e.hiredate);dbms_output.put_line(e.deptid);END; --参照引⽤类型:参照已有的数据类型--参照引⽤类型--参照引⽤变量类型:变量名称%TYPE--参照引⽤表中的列类型:表名.列名%TYPE--参照引⽤表的记录类型:表名%ROWTYPE demo:DECLAREi NUMBER(4);j i%TYPE := 100;--参照i的类型k employees.employee_id%TYPE := 101;--参照员⼯表中员⼯编号的数据类型BEGINdbms_output.put_line('j=' || j);dbms_output.put_line('k=' || k);END;--查询某个员⼯编号的姓名,⼯资,⼊职⽇期,部门编号(参照类型)DECLARETYPE emp_record_type IS RECORD (empid employees.employee_id%TYPE := 102,ename st_name%TYPE,salary employees.salary%TYPE,hiredate employees.hire_date%TYPE,deptid employees.department_id%TYPE);e emp_record_type;BEGINSELECT employee_id,last_name,salary,hire_date,department_idINTO eFROM employeesWHERE employee_id=e.empid;dbms_output.put_line(e.empid);dbms_output.put_line(e.ename);dbms_output.put_line(e.salary);dbms_output.put_line(e.hiredate);dbms_output.put_line(e.deptid);END; --查询某个员⼯编号的姓名,⼯资,⼊职⽇期,部门编号(参照引⽤表的记录类型)DECLAREe employees%ROWTYPE;BEGINe.employee_id := 103;SELECT *INTO eFROM employeesWHERE employee_id=e.employee_id;dbms_output.put_line(e.employee_id);dbms_output.put_line(st_name);dbms_output.put_line(e.salary);dbms_output.put_line(to_char(e.hire_date,'yyyy-mm-dd'));dbms_output.put_line(e.department_id);END;--PLSQL表类型 /*TYPE ⾃定义类型名称 IS TABLE OF 元素类型INDEX BY BINARY_INTEGER;*/DECLARETYPE name_table_type IS TABLE OF VARCHAR2(50)INDEX BY BINARY_INTEGER;n name_table_type;BEGINn(-7) := 'tom';n(4) := 'jack';n(9) := 'rose';dbms_output.put_line('元素的长度:' || n.count);dbms_output.put_line(n(4));END; --表类型的常⽤属性DECLARETYPE name_table_type IS TABLE OF VARCHAR2(50)INDEX BY BINARY_INTEGER;n name_table_type;BEGIN--设置元素n(-5) := 'tom';n(3) := 'jack';n(17) := 'rose';n(23) := 'zhang';n(24) := 'wangwu';--删除指定下标的元素--n.delete(17);--删除⼀个范围的元素--n.delete(10,24);--删除所有元素--n.delete;--返回元素长度dbms_output.put_line('元素个数:' || n.count);--判断下标是否存在IF n.exists(17) THENdbms_output.put_line('true');ELSEdbms_output.put_line('false');END IF;--输出最⼩下标dbms_output.put_line(n.first);--输出最⼤下标dbms_output.put_line(st);--返回指定下标的元素dbms_output.put_line(n(3));--返回上⼀个或下⼀个存在的下标,如果没有,返回NULLdbms_output.put_line(n.next(10));dbms_output.put_line(n.prior(10));END;--BULK COLLECT INTO:把查询结果⼀次性赋给⼀个表类型的变量,下标⾃动从1开始递增 --查询所有的员⼯姓名,存储到⼀个表类型的变量中DECLARETYPE name_table_type IS TABLE OF VARCHAR2(50)INDEX BY BINARY_INTEGER;n name_table_type;BEGINSELECT last_name BULK COLLECT INTO nFROM employees;dbms_output.put_line('元素长度:' || n.count);dbms_output.put_line(n(2));END;--查询所有的员⼯信息,存储到⼀个表类型的变量中DECLARETYPE emp_table_type IS TABLE OF employees%ROWTYPEINDEX BY BINARY_INTEGER;e emp_table_type;BEGINSELECT * BULK COLLECT INTO eFROM employees;dbms_output.put_line('元素长度:' || e.count);dbms_output.put_line(e(2).last_name);dbms_output.put_line(e(3).salary);END; 8,DML语句返回值:--RETURNING语句:DML操作返回值赋给变量RETURN 列1,列2,... INTO 变量1,变量2,...--更新某个员⼯的⼯资,输出这个员⼯姓名,新⼯资DECLAREv_empid employees.employee_id%TYPE := 100;v_name st_name%TYPE;v_money employees.salary%TYPE := 1;v_salary employees.salary%TYPE;BEGINUPDATE employeesSET salary=salary+v_moneyWHERE employee_id=v_empidRETURNING last_name,salaryINTO v_name,v_salary;dbms_output.put_line('姓名:' || v_name);dbms_output.put_line('新⼯资:' || v_salary);END; --插⼊语句中使⽤RETURNING语句:DECLAREd dept%ROWTYPE;BEGININSERT INTO dept VALUES (50,'AA','BB')RETURN deptno,dname,loc INTO d;dbms_output.put_line(d.deptno);dbms_output.put_line(d.dname);dbms_output.put_line(d.loc);END; --删除语句中使⽤RETURNING语句DECLAREd dept%ROWTYPE;BEGINDELETE FROM deptWHERE deptno=50RETURN deptno,dname,loc INTO d;dbms_output.put_line(d.deptno);dbms_output.put_line(d.dname);dbms_output.put_line(d.loc);END; --DML操作返回多⾏数据--更新某个部门的员⼯的⼯资,返回被更新的员⼯姓名,新⼯资DECLARETYPE emp_record_type IS RECORD (ename st_name%TYPE,salary employees.salary%TYPE);TYPE emp_table_type IS TABLE OF emp_record_typeINDEX BY BINARY_INTEGER;e emp_table_type;BEGINUPDATE employeesSET salary=salary+1WHERE department_id=50RETURN last_name,salary BULK COLLECT INTO e; dbms_output.put_line('更新了' || e.count || '个员⼯'); dbms_output.put_line(e(1).ename || ',' || e(1).salary); END;。

plsql用法,操作介绍

plsql用法,操作介绍

plsql用法,操作介绍PL/SQL是Oracle数据库中一种重要的编程语言,它提供了强大的数据处理和数据库操作能力。

本文将向大家介绍PL/SQL的用法和操作。

一、PL/SQL基础PL/SQL是一种过程化的编程语言,它可以在Oracle数据库中执行存储过程、函数、触发器和包等对象。

这些对象可以由用户自定义,并在数据库中存储,以供其他用户调用。

PL/SQL提供了丰富的数据类型、控制结构、函数和过程,使得开发者可以方便地编写复杂的数据库操作程序。

二、PL/SQL语法1. 声明语句:在PL/SQL中,需要先声明变量和常量,常见的声明语句有:变量声明(如:变量类型数据类型;),常量声明(如:CONST 常量名数据类型 = 值)。

2. 条件语句:PL/SQL支持多种条件语句,如IF-THEN-ELSE,CASE表达式等。

3. 循环语句:PL/SQL支持FOR循环、WHILE循环和LOOP循环等。

4. 异常处理:PL/SQL提供了异常处理机制,可以捕获和处理运行时出现的错误。

5. 函数和过程:PL/SQL支持定义函数和过程,可以对数据进行操作并返回结果。

三、PL/SQL操作1. 创建存储过程:可以使用CREATE PROCEDURE语句创建存储过程,指定过程的名称、参数和执行逻辑。

2. 调用存储过程:可以使用CALL语句调用存储过程,并传递参数。

3. 创建函数:可以使用CREATE FUNCTION语句创建函数,指定函数的名称、参数和返回值类型。

4. 调用函数:可以使用直接调用函数的方式或通过存储过程调用函数。

5. 创建触发器:可以使用CREATE TRIGGER语句创建触发器,用于在数据插入、更新或删除时触发特定的操作。

6. 修改和删除对象:可以使用ALTER PROCEDURE、DROP PROCEDURE、DROP FUNCTION等语句修改或删除已存在的PL/SQL对象。

四、示例以下是一个简单的PL/SQL程序示例,用于将输入的字符串转换为大写并输出:```plsqlDECLAREv_str VARCHAR2(100);v_upper VARCHAR2(100);BEGIN-- 获取输入字符串:in_str := 'hello world';v_str := :in_str;-- 将字符串转换为大写并输出v_upper := UPPER(v_str);DBMS_OUTPUT.PUT_LINE('转换后的字符串为: ' || v_upper);END;```在上述示例中,我们使用了DECLARE语句声明了两个变量v_str 和v_upper,分别用于存储输入的字符串和转换后的结果。

PLSQL入门教程

PLSQL入门教程

PL/SQL入门教程1.1 PL/SQL简介PL/SQL是ORACLE的过程化语言,包括一整套的数据类型、条件结构、循环结构和异常处理结构,PL/SQL可以执行SQL语句,SQL语句中也可以使用PL/SQL函数。

1.2 创建PL/SQL程序块DECLARE…BEGIN…EXCEPTIONEND;1.3 PL/SQL数据类型例子:DECLAREORDER_NO NUMBER(3);CUST_NAME VARCHAR2(20);ORDER_DATE DATE;EMP_NO INTEGER:=25;PI CONSTANT NUMBER:=3.1416;BEGINNULL;END;1.4 处理PL/SQL的异常1.4.1 PL/SQL的异常例如:DECLAREX NUMBER;BEGINX:= 'yyyy';--Error HereEXCEPTION WHEN V ALUE_ERROR THENDBMS_OUTPUT.PUT_LINE('EXCEPTION HANDED');END;实现技术:EXCEPTION WHEN first_exception THEN…WHEN second_exception THEN…WHEN OTHERS THEN/*THERS异常处理器必须排在最后,它处理所有没有明确列出的异常。

*/ …END;1.4.2 预定义异常1.4.3 自定义异常处理DECLAREBAD_ROWID EXCEPTION;X ROWID;PRAGMA EXCEPTION_INIT(BAD_ROWID,-01445);BEGINSELECT ROWID INTO X FROM TABWHERE ROWNUM=1;EXCEPTION WHEN BAD_ROWID THENDBMS_OUTPUT.PUT_LINE('CANNOT QUERY ROWID FROM THIS VIEW');END;注意:-01445 因为PRAGMA EXCEPTION_INIT命令把这个变量(-01455)连接到这个ORACLE错误,该语句的语法如下:PRAGMA EXCEPTION_INIT(exception_name, error_number);其中error_number是负数,因为错误号被认为负数,当定义错误时记住使用负号1.4.4 自定义异常异常不一定必须是oracle返回的系统错误,用户可以在自己的应用程序中创建可触发及可处理的自定义异常DECLARESALARY_CODE V ARCHAR2(1);INV ALID_SALARY_CODE EXCEPTION;BEGINSALARY_CODE:='X';IF SALARY_CODE NOT IN('A', 'B', 'C') THENRAISE INV ALID_SALARY_CODE;END IF;EXCEPTION WHEN INV ALID_SALARY_CODE THENDBMS_OUTPUT.PUT_LINE('INV ALID SALARY CODE');END;1.5 在PL/SQL中单条记录的查询在PL/SQL内,有时在没有定义显式光标的情况下需要查询单条记录,并把记录的数据赋给变量。

PLSQL基础语句

PLSQL基础语句

PLSQL基础语句 DML:数据操作语⾔ DML⽤于查询与修改数据记录,包括以下SQL语句: *INSERT:添加数据到数据库中 *UPDATE:修改数据库中的数据 *DELETE:删除数据库中的数据 *SELECT:选择(查询)数据 >SELECT 是SQL语⾔的基础,最为重要 例⼦:查询⼀个表的信息 SELECT *FROM 表名 DDL:数据定义语⾔ DDL⽤于定义数据库的结构,⽐如创建⼂修改或删除数据库对象,包括以下SQL语句: *CREATE TABLE:创建数据库表 *ALTER TABLE:更改表结构⼂添加⼂删除⼂修改列长度 *DROP TABLE:删除表 *CREATTE INDEX:在表⽰建⽴索引 *DROP INDEX:删除索引 DCL:数据控制语⾔ DCL⽤来控制数据库的访问,包括以下SQL语句: *GRANT:授予访问权限 *REVOKE:撤销访问权限 事务:代表⼀个业务边界 组成业务逻辑的多条语句组成 事务的特性ACID 原⼦性 (Atomicity):事务不可再分,作为⼀个整体,要么全部成功,要么全部失败 ⼀致性(Consistency):事务中数据是⼀个⼀致的状态,如果事务成功,那么所有的数据应该是保持⼀致的状态 如果事务失败,数据应该全部回滚到事务开始前的状态 隔离性(Isolation):事务与事务之间是相互隔离的(A事务不能读取B事务) 持久性(Durability):事务成功后,对数据库的影响是持久性的 *COMMIT:提交事务处理 *ROLLBACK:事务处理回滚 *SAVEEPOINT:设置保存点 *LOCK:对数据库的特定部分进⾏锁定。

PLSQL学习(一) 基础知识

PLSQL学习(一) 基础知识

PLSQL学习(一) 基础知识很久以前自己整理的PLSQL一些基础知识,翻出来看看都是比较基础的内容,还是放上来好了。

参考的资料是《PL/SQL用户指南与参考》中译版,觉得这是一部很不错的入门书,感谢把这本书翻译出来的网友。

1、乘方的不同应用:在SQL中乘方只能使用函数Power(a,b)来计算但在PLSQL中可直接使用a**b表示2、赋值语句Returning:insert into t1 values(90,'SERVICE','BEIJING')Returning rowid,name into row_id,info;注:只限insert、update、delete一条记录时进行赋值3、自定义参数——&:可SQL和PLSQL中均可使用自定义参数,即需要自己输入值的参数select * from ldcom where comcode=&a andname=&b;PLSQL:declare i int := &a; n int := &b;4、绑定变量的使用:可使用绑定变量的办法提高SQL效率SQL> variable x number ;SQL> exec :x := 8600 ;SQL> select * from ldcom where comcode= :x ;注:PLSQL中的declare即隐士绑定,无需再申明可用Print查看绑定变量 SQL> print x;也可使用查询SQL> select :x from dual;实际的简单应用:variable x number;declarev_date date;beginfor i in1.. 10loop:x := i;select sysdate+:x into v_date from dual;dbms_output.put_line(v_date);end loop;end;/在execute immediate中的应用:declarev_x t1.num%type;beginexecute immediate'update t1 set num=8888 where id=:a returning num into :b'using2returning into v_x;dbms_output.put_line(v_x);end;注意returning的返回值在动态SQL中的操作格式5、%TYPE和%ROWTYPE的区别:%TYPE针对某一字段类型(数组也是单一的类型)%ROWTYPE针对某一整表的类型(游标也是整表)6、计数循环的逆序法:for i in reverse10.. 100loop注意reverse的位置不要记错7、一般的游标使用法:1、游标的正常使用需要四步①定义游标cursor c2(dept_no number default10) is----注意定义dept_no的方法select name,agentcode from laagent where rownum <= dept_no;②打开游标open c3(dept_no =>20); ----可以重新定义dept_no③提取游标数据fetch c2 into dept_name,dept_loc;----字符类型、个数相等fetch c3 into deptrec;----deptrec为rowtypeexit when c3%notfound;④关闭游标CLOSE c3;⑤游标属性%FOUND--布尔型属性,当最近一次读记录时成功返回,则值为TRUE;%NOTFOUND--布尔型属性,与%FOUND相反;%ISOPEN--布尔型属性,当游标已打开时返回TRUE;%ROWCOUNT--数字型属性,返回已从游标中读取的记录数。

第7章 PLSQL编程基础

第7章 PLSQL编程基础

域。
7.2 变量与常量
标识符定义必须要满足以下规则:
必须以字母开头,长度不能超过30个字符。 标识符中不能包含减号“-”和空格。 Oracle标识符不区分大小写。 标识符不能是SQL保留字。
7.2.2 PL/SQL中的数据类型
1.标量数据类型
数值类型:存储的数据为数字,用此数据类型 存储的数据可用于计算。包括: BINARY_INTEGER、NUMBER、 PLS_INTEGER。
例7.9 使用scott方案下的emp和dept表查询职工编 号是7902的员工的姓名、工作和所在部门。 DECLARE e_name VARCHAR2(10); e_job VARCHAR2(9); e_dname VARCHAR2(14); BEGIN SELECT ename,job,dname INTO e_name,e_job,e_dname FROM scott.emp e INNER JOIN scott.dept d ON e.deptno=d.deptno WHERE empno=7902; dbms_output.put_line('该职工的姓名、工作、部门分 别是:'||e_name||' '||e_job||' '||e_dname); END;
• NUMBER(p,s)用来存储正负整数、分数和浮点型数 据,有38位的精确度,p表示精度,用于指定数字的 总位数;s用于指定小数点后的数字位数。
字符类型:用于存储字符串或字符数据。包括 :CHAR、VARCHAR2、LONG、RAW、 LONG RAW。
• PL/SQL的数据类型与SQL数据类型的长度有所不同 ,如表7-1所示。
若定义变量时指定了NOT NULL属性,那 么表示该变量在任何时刻都不允许为空, 因此在定义变量的同时也必须为变量赋值 ,否则发生错误,如下面的代码所示。 DECLARE varOne NUMBER NOT NULL; BEGIN varOne :=10; END;

plsql 使用手册

plsql 使用手册

plsql 使用手册(最新版)目录1.PL/SQL简介2.PL/SQL的基本语法3.数据类型与变量4.控制结构5.函数与过程6.触发器与存储过程7.异常处理8.PL/SQL与SQL的交互9.PL/SQL的应用实例10.PL/SQL的优缺点及发展前景正文【PL/SQL 简介】PL/SQL(Procedural Language/Structured Query Language)是一种过程式编程语言,它是为了与 SQL(结构化查询语言)协同工作而设计的。

PL/SQL 通常用于 Oracle 数据库中,用于编写存储过程、触发器、函数等,从而实现对数据库的高级操作和控制。

【PL/SQL 的基本语法】PL/SQL的基本语法包括变量声明、数据类型、控制结构(条件语句、循环语句等)、函数与过程、触发器与存储过程等。

【数据类型与变量】PL/SQL的数据类型与SQL的数据类型基本一致,包括数字类型、字符串类型、日期类型等。

在PL/SQL中,需要先声明变量,再进行使用。

【控制结构】PL/SQL的控制结构包括条件语句(IF-THEN、IF-THEN-ELSE)、循环语句(WHILE、FOR)等,用于实现复杂的逻辑控制。

【函数与过程】函数是一种返回某个值的过程,过程则是一种不返回值的操作。

在PL/SQL 中,函数与过程可以通过参数传递数据,并返回结果。

【触发器与存储过程】触发器是一种在对表执行 INSERT、UPDATE 或 DELETE 操作时自动执行的存储过程。

存储过程是一组预先编译的 SQL 语句,可以实现复杂的业务逻辑。

【异常处理】PL/SQL中可以处理异常,通过EXCEPTION和WHEN子句可以捕获和处理异常情况。

【PL/SQL 与 SQL 的交互】PL/SQL可以与SQL进行交互,例如在PL/SQL过程中调用SQL语句,或者在SQL语句中调用PL/SQL过程。

【PL/SQL 的应用实例】一个典型的PL/SQL应用实例是编写一个存储过程,用于实现数据的增、删、改、查等操作。

plsql 使用手册

plsql 使用手册

plsql 使用手册摘要:1.简介- Oracle PL/SQL简介- 为什么使用PL/SQL2.PL/SQL基础- 创建PL/SQL块- 声明变量- 数据类型- 控制结构- IF-ELSE 条件语句- CASE 选择语句- LOOP 循环语句- GOTO 跳转语句- 异常处理3.过程和函数- 创建过程和函数- 参数传递- 返回值- 过程和函数的调用4.游标- 游标的概念和类型- 打开游标- 获取数据- 关闭游标- 游标的更新和删除操作5.存储过程- 存储过程的概念和优点- 创建存储过程- 调用存储过程- 参数传递和返回值6.触发器- 触发器的概念和类型- 创建触发器- 触发器的执行时机- 触发器的应用场景7.包- 包的概念和优点- 创建包- 调用包中的过程和函数- 包的维护8.数据库交互- 连接数据库- 查询数据- 更新数据- 删除数据- 事务处理9.高级主题- 安全性和权限控制- 性能调优- 全球化支持正文:PL/SQL(Procedural Language/Structured Query Language)是一种过程式编程语言,用于Oracle 数据库管理系统。

它允许开发人员编写可重用的组件,如存储过程、触发器和包,从而简化了数据库应用程序的开发和维护。

在本使用手册中,我们将介绍PL/SQL 的基本概念和特性,以及如何使用它来创建高效、可靠的数据库应用程序。

1.简介Oracle PL/SQL是一种强大的编程语言,它允许开发人员在SQL语句中嵌入PL/SQL块,以实现更高级别的功能。

使用PL/SQL可以提高代码的重用性、模块化和安全性,降低应用程序的开发和维护成本。

1.1 为什么使用PL/SQLPL/SQL具有以下优点:- 代码可重用:PL/SQL 允许开发人员创建可重用的存储过程、触发器和包,从而减少代码量,提高开发效率。

- 模块化:PL/SQL 块可以嵌套,使代码结构更清晰,易于理解和维护。

plsql基础知识—定义并使用变量

plsql基础知识—定义并使用变量

plsql基础知识—定义并使⽤变量n 介绍在编写pl/sql程序是,可以定义变量和常量;在pl/sql程序中包括有:①标量类型(scalar)②复合类型(composite)③参照类型(reference)④lob(large object)标量(scalar)⼀常⽤类型在编写pl/sql块时,如果要使⽤变量,需在定义部分定义变量。

n pl/sql中定义变量和常量的语法如下:identifier [constant] datatype [not null][:=|default expr]identifier:名称constant:指定常量,需要指定它的初始值,且其值是不能改变的datatype:数据类型not null:指定变量值不能为null:= :给变量或是常量指定初始值default:⽤于指定初始值expr:指定初始值的pl/sql表达式,可以是⽂本值、其它变量、函数等n 标量定义的案例①定义⼀个变长字符串v_ename varchar2(10)②定义⼀个⼩数范围-9999.99~9999.99v_sal number(6,2);③定义⼀个⼩数并给⼀个初始值为5.4:=是pl/sql的赋值号v_sal2number(6,2):=5.4④定义⼀个⽇期类型的数据v_hiredate date;⑤定义⼀个布尔变量,不能为空,初始值为falsev_valid boolean:=false;n 标量(scalar)⼀使⽤标量在定义好变量后,就可以使⽤这些变量。

这⾥需要说明的是pl/sql块为变量赋值不同于其它编程语⾔,需要在等号前加冒号(:=)案例:以输⼊⼯号,显⽰雇员姓名、⼯资、个⼈所得税(税率为0.03)为例,说明变量的使⽤,看看如何编写。

create or replace procedure pro1(v_in_empno in number) isv_tax_rate number(3,2):=0.03;v_sal number;v_ename varchar2(32);v_tax number;beginselect ename,sal into v_ename,v_sal from emp where empno=v_in_empno;v_tax:=v_sal*v_tax_rate;dbms_output.put_line(v_ename||'⼯资是 '||v_sal||' 个⼈所得税是 '||v_tax);end;n 标量(scalar)⼀使⽤%type类型对于上⾯的pl/sql块有⼀个问题:就是如果员⼯的姓名超过了5个字符的话,就会有错误,为了降低pl/sql程序的维护⼯作量,可以使⽤%type属性定义变量,这样它会按照数据库列来确定你定义的变量的类型和长度。

PLSQL基础语法

PLSQL基础语法

PLSQL基础语法有时候我们需要对数据库中的数据进⾏⼀些稍微复杂的操作,⽽且这些操作都是⼀次性的,⽤完之后就不再⽤了。

⽤存储过程的话就太⿇烦,⽽且浪费,⽤完了还要去删除。

⽽单个SQL⽆法满⾜需求。

这时候⽤⼀下SQL的语句块就可以了。

如果你⽤的是Oracle数据库,那么你就可以⽤PL/SQL(Procedure Language/SQL),即过程化查询语⾔。

这是第三代语⾔。

⽽我们⽤的SQL是结构化查询语⾔,属于第四代语⾔。

PL/SQL能够实现更加复杂的逻辑操作,像我们使⽤Java,C等⾼级语⾔⼀样。

但如果是在MYSQL/SQLSERVER数据库中,那PL/SQL 就⽆法使⽤(PL/SQL是属于Oracle的过程查询语⾔)。

如果你要在MYSQL/SQLSERVER实现复杂的逻辑查询,那你只能通过编写存储过程实现。

下⾯对PL/SQL常⽤的⼀些基础知识进⾏讲解。

在讲解之前,先创建⼀个⽤于测试的表:--创建测试表create table t_plsql_test(id varchar(10),name varchar(100),mDate date);--插⼊测试数据insert into t_plsql_test values(1, 'one', to_date('1992/03/08', 'YYYY/MM/DD'));insert into t_plsql_test values(2, 'one', to_date('1993/03/08', 'YYYY/MM/DD'));insert into t_plsql_test values(3, 'one', to_date('1994/03/08', 'YYYY/MM/DD'));commit;--查看select * from t_plsql_test;⼀、PL/SQL的结构[declare] --变量声明(可以省略) --如:my_var varchar(200);begin --SQL语句[exception] --异常声明(可以省略) end;例如:declarenowDate date:= sysdate;BEGINupdate t_plsql_testset mdate = nowDatewhere id = 3;commit;END;--查看select * from t_plsql_test;⼆、PL/SQL的基本规则1、标识符不区分⼤⼩写,所有的名称在存储时⾃动改成⼤写。

plsql基本语法

plsql基本语法

plsql基本语法PL/SQL基本语法PL/SQL是一种结构化查询语言,用于编写存储过程、触发器、函数和包等数据库对象。

本文将介绍PL/SQL的基本语法,包括变量声明、控制结构、异常处理等。

1. 变量声明在PL/SQL中,可以使用关键字DECLARE来声明变量。

变量可以有不同的数据类型,如整型、浮点型、字符型等。

以下是一个示例:DECLAREnum1 NUMBER := 10;num2 NUMBER := 20;total NUMBER;2. 控制结构PL/SQL支持多种控制结构,如条件语句和循环语句。

条件语句包括IF-THEN-ELSE和CASE语句。

IF-THEN-ELSE用于根据条件执行不同的代码块,示例如下:IF num1 > num2 THENtotal := num1 + num2;ELSEtotal := num1 - num2;END IF;CASE语句用于根据不同的值执行不同的代码块,示例如下:CASE num1WHEN 1 THEN total := num2 + 10;WHEN 2 THEN total := num2 - 10;ELSE total := num2;END CASE;循环语句包括FOR循环和WHILE循环。

FOR循环用于指定循环次数,示例如下:FOR i IN 1..10 LOOPtotal := total + i;END LOOP;WHILE循环用于在满足条件的情况下循环执行代码块,示例如下:WHILE num1 > 0 LOOPtotal := total + num1;num1 := num1 - 1;END LOOP;3. 异常处理PL/SQL提供了异常处理机制,用于捕获和处理运行时错误。

可以使用关键字EXCEPTION来定义异常处理块。

以下是一个示例:BEGINtotal := num1 / num2;EXCEPTIONWHEN ZERO_DIVIDE THENtotal := NULL;END;上述代码中,如果num2为0,则会抛出ZERO_DIVIDE异常,异常处理块会将total赋值为NULL。

PLSQL学习简易快速入门

PLSQL学习简易快速入门

PLSQL学习简易快速入门课程一 PL/SQL 基本查询与排序本课重点:1、写SELECT语句进行数据库查询2、进行数学运算3、处理空值4、使用别名ALIASES5、连接列6、在SQL PLUS中编辑缓冲,修改SQL SCRIPTS7、ORDER BY进行排序输出。

8、使用WHERE 字段。

一、写SQL 命令:不区分大小写。

SQL 语句用数字分行,在SQL PLUS中被称为缓冲区。

最后以;或 / 结束语句。

也可以用RUN来执行语句二、例1:SQL> SELECT dept_id, last_name, manager_id FROM s_emp;2:SQL> SELECT last_name, salary * 12, commission_pct FROM s_emp;对于数值或日期型的字段,可以进行相应的四则运算,优先级与标准的高级语言相同。

SQL> SELECT last_name, salary, 12 * (salary + 100) FROM s_emp;三、列的别名ALIASES:计算的时候特别有用;紧跟着列名,或在列名与别名之间加“AS”;如果别名中含有SPACE,特殊字符,或大小写,要用双引号引起。

例(因字体原因,读者请记住:引号为英文双引号Double Quotation):SQL> SELECT last_name, salary, 12 * (salary + 100) ”Annual Salary” FROM s_emp;四、连接符号:||连接不同的列或连接字符串使结果成为一个有意义的短语:SQL> SELECT first_name || ’’ || last_name || ’, ’|| title ”Employees” FROM s_emp SQL> select divid ||' '|| divname from pub_t_division_test wheresuperid='001'效果如下图:五、管理NULL值:SQL> SELECT last_name, title, salary * NVL(commission_pct,0)/100 COMM FROMs_emp;此函数使NULL转化为有意义的一个值,相当于替换NULL。

PLSQL基础入门教程-必看

PLSQL基础入门教程-必看

PL/SQL程序设计目录第一章PL/SQL 程序设计简介 (4)§1.2SQL与PL/SQL (4)§1.2.1 什么是PL/SQL? (4)§1.2.1 PL/SQL的好处 (4)§1.2.2 PL/SQL 可用的SQL语句 (5)§1.3运行PL/SQL程序 (5)第二章PL/SQL块结构和组成元素 (6)§2.1PL/SQL块 (6)§2.2PL/SQL结构 (6)§2.3标识符 (6)§2.4PL/SQL变量类型 (7)§2.4.1 变量类型 (7)§2.4.2 复合类型 (9)§2.4.3 使用%ROWTYPE (11)§2.4.4 LOB类型* (11)§2.4.5 Bind 变量 (11)§2.4.6 INDEX BY TABLES (12)§2.4.7 数据类型的转换* (13)§2.5运算符和表达式(数据定义) (13)§2.5.1 关系运算符 (13)§2.5.2 一般运算符 (13)§2.5.3 逻辑运算符 (14)§2.6变量赋值 (14)§2.6.1 字符及数字运算特点 (14)§2.6.2 BOOLEAN 赋值 (14)§2.6.3 数据库赋值 (14)§2.6.4 可转换的类型赋值 (15)§2.7变量作用范围及可见性 (15)§2.8注释 (16)§2.9简单例子 (17)§2.9.1 简单数据插入例子 (17)§2.9.2 简单数据删除例子 (17)第三章PL/SQL流程控制语句 (18)§3.1条件语句 (18)§3.2CASE表达式 (19)§3.3循环 (19)§3.3标号和GOTO (21)§3.4NULL语句 (21)第四章游标的使用 (23)§4.1游标概念 (23)§4.1.1 处理显式游标 (23)§4.1.2 处理隐式游标 (26)§4.1.3 游标修改和删除操作 (27)第五章异常错误处理 (29)§5.1异常处理概念 (29)§5.1.1 预定义的异常处理 (29)§5.1.2 非预定义的异常处理 (30)§5.1.3 用户自定义的异常处理 (31)§5.1.4 用户定义的异常处理 (32)§5.2异常错误传播 (33)§5.2.1 在执行部分引发异常错误 (33)§5.2.2 在声明部分引发异常错误 (34)§5.3异常错误处理编程 (34)§5.4在PL/SQL中使用SQLCODE,SQLERRM (35)第六章存储函数和过程 (36)§6.1引言 (36)§6.2创建函数 (36)§6.3存储过程 (39)§6.3.1 创建过程 (39)§6.3.2 调用存储过程 (40)§6.3.3 开发存储过程步骤 (42)§6.3.4 与过程相关数据字典 (43)第七章包的创建和应用 (44)§7.1引言 (44)§7.2包的定义 (44)§7.3包的开发步骤 (45)§7.4包定义的说明 (45)§7.5子程序重载 (48)§7.6删除过程、函数和包 (50)§7.7包的管理 (50)第八章触发器 (51)§8.1触发器类型 (51)§8.1.1 DML触发器 (51)§8.1.2 替代触发器 (51)§8.1.3 系统触发器 (51)§8.2创建触发器 (51)§8.2.1 触发器触发次序 (53)§8.2.2 创建DML触发器 (53)§8.2.3 创建替代(Instead_of)触发器 (54)§8.2.3 创建系统事件触发器 (54)§8.2.4 系统触发器事件属性 (55)§8.2.5 使用触发器谓词 (56)§8.2.6 重新编译触发器 (56)§8.3删除和使能触发器 (56)§8.4触发器和数据字典 (57)§8.5数据库触发器的应用举例 (57)第一章PL/SQL 程序设计简介PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。

PLSQL基础培训PPT课件

PLSQL基础培训PPT课件
PL_SQL基础培训
PL/SQL 语言
SQL中操作符的使用
定义:操作符是保留的字或字符,主要用于比 较和算术运算。
分类:比较操作符,逻辑操作符和算术运算符。 1、比较操作符
包括:=,<>, >, <, <=, >=。 注意比较双方的数据类型。 2、算术运算符 包括:+,-,*,/等。 与数学运算规则一致。
PL/SQL 语言
PL_SQL基础培训
通过本章的学习应该掌握:
PL/SQL语言的编程规范 Oracle数据库的基本数据类型和函数 应用PL/SQL语言编写基本的sql
PL_SQL基础培训
一、PL/SQL语言编程规范 1)命名
语言---命名使用能表述对象意义的单词或者约定俗成的符号,不允 许使用中文或者特殊符号。
单词分隔---命名的各单词使用下划线进行分隔。 保留字----命名禁止使用sql保留字(可以在v$reserved_words视
图中查找所有的保留字)。 命名长度---限制在30个字符内(含前缀)。
PL_SQL基础培训
2)命名规范
普通变量---前缀为v_,存放字符、数字、日期型变量。 游标变量---前缀为cur_,存放游标记录集。 存储过程---前缀为p_,按照业务操作命名。 函数---前缀为f_,按照业务操作命名。 包---前缀为pkg_,按照业务操作集合命名。 触发器---前缀为trig_,触发器名是前缀+表名+触发器名 索引---前缀为IDX_,索引名是前缀+表名+索引字段
Sequence_of_statement1; ELSE
Sequence_of_statement2; END IF;
PL_SQL基础培训

pssql基础

pssql基础

6第六讲 PL/SQL基础西南林业大学计算机与信息学院——鲁 宁教学目标•PL/SQL 简介•PL/SQL 功能•变量和常量•PL/SQL 结构•逻辑比较•控制结构•异常简介西南林业大学计算机与信息学院——鲁 宁PL/SQL 简介•SQL 是当今最为强大的数据检索机制之一•SQL 并不能完成一个过程语言所能完成的所有任务•PL/SQL 代表Procedural Language/SQL(Procedural Language:过程语言)•PL/SQL 将SQL 的强大功能和过程语言的灵活性结合在一起•PL/SQL 是SQL 的扩展,是一种包含了过程语句和命令以及SQL 命令的应用程序开发语言•允许使用循环和条件分支等流控制语句来处理数据西南林业大学计算机与信息学院——鲁 宁PL/SQL 功能•消除了数据库技术和过程编程语言之间的障碍•植根于SQL,扩展了标准的SQL 数据库语言•使用控制、循环和分支等过程技术•支持游标操作、异常、函数和事务命令的SQL•支持变量和常量、强大的错误处理、函数、对象类型和集合•减少了客户机/服务器环境中的网络流量•减少了应用程序与RDBMS 之间的通信•可移植性好,灵活、强大、简单易学西南林业大学计算机与信息学院——鲁 宁西南林业大学计算机与信息学院——鲁 宁PL/SQL 的体系结构SQL 语句执行器主程序或ORACLE 工具匿名 PL/SQL 块匿名PL/SQL 块过程语句执行器ORACLE 服务器PL/SQL 引擎过程语句SQL 语句PL/SQL 结构•一个标准PL/SQL 代码段称作程序块•一个程序块是由三个部分或节构成的–定义部分–表示程序块声明部分的开始–声明对于程序块而言是局部的–执行部分–异常处理部分西南林业大学计算机与信息学院——鲁 宁PL/SQL 结构DECLARE/**定义部分(可选)——定义常量、变量、复杂数据类型、游标、例解*/BEGIN/*PL/SQL语句和SQL语句*执行部分(必须)————PL/SQL*/EXCEPTION/**异常处理部分(可选)——处理运行错误*/END; / /**块结束标记*/西南林业大学计算机与信息学院——鲁 宁西南林业大学计算机与信息学院——鲁 宁一个简单的PL/SQL 块•set set serveroutput serveroutput serveroutput on on •begin •dbms_output.put_line('Hello,World dbms_output.put_line('Hello,World dbms_output.put_line('Hello,World!');!');•end;•/•/*可以用任何编辑器编写 PL/SQL 程序,并将其保存为具有 .sql sql 扩展名的文件•使用 “@ <filename>”命令执行PL/SQL 程序文件*/PL/SQL 块分类•匿名块•命名块•子程序–过程–函数•包•触发器西南林业大学计算机与信息学院——鲁 宁西南林业大学计算机与信息学院——鲁 宁匿名块•匿名块:没有名称的PL/SQL 块•示例:begindbms_output.put_line('Hello,World dbms_output.put_line('Hello,World dbms_output.put_line('Hello,World!');!'); begindbms_output.put_line('Good dbms_output.put_line('Good dbms_output.put_line('Good');'); end;end;/西南林业大学计算机与信息学院——鲁 宁命名块•命名块:指具有特定名称标识的PL/SQL 块,在PL/SQL 块前使用<<>>加以标记•目的:使多级嵌套层次清楚•示例:<<outer>>begindbms_output.put_line('Hello,World dbms_output.put_line('Hello,World dbms_output.put_line('Hello,World!');!'); <<inner>>begindbms_output.put_line('Good dbms_output.put_line('Good dbms_output.put_line('Good');'); end; --<<inner>>end;--<<outer>>/PL/SQL变量•变量:数据的临时存储–在声明部分中声明–可以在 SQL 语句和过程语句中使用–在可执行部分中赋予新值•使用变量的优点–可重用性–易于维护•PL/SQL变量用于SQL 或PL/SQL语句中表达式的任何位置•PL/SQL变量必须先声明,再引用西南林业大学计算机与信息学院——鲁 宁定义变量•语法–变量名数据类型•注:数据类型为任何Oracle 内部数据类型•示例NUMBER(5,2);StudScoreStudScore NUMBER(5,2);VARCHAR(20);StudName VARCHAR(20);StudNameBOOLEAN; --是否团员StudMemberStudMember BOOLEAN; --西南林业大学计算机与信息学院——鲁 宁PL/SQL常量•除了必须添加关键字CONSTANT 并赋值外,常量的声明方式与变量非常相似•示例PI CONSTANT NUMBER(8,7):=3.1415926;西南林业大学计算机与信息学院——鲁 宁使用属性声明•PL/SQL 对象(如变量和常量)和数据库对象(如列和表)与某些属性关联•属性–引用数据库中的数据类型和对象–PL/SQL 变量和常量可以具有属性•属性的类型–%TYPE——引用数据库列%TYPE——–%ROWTYPE——代表表中的行%ROWTYPE——•使用属性声明可以用于简化变量和常量声明西南林业大学计算机与信息学院——鲁 宁西南林业大学计算机与信息学院——鲁 宁%TYPE 属性•提供变量或列的数据类型 •在对引用到数据库中的列的变量进行声明时有用 –需要知道列的确切数据类型–如果列定义发生变化,则变量的数据类型在运行时也将随之更改•示例SName SName StudInfo.StudName%Type StudInfo.StudName%Type StudInfo.StudName%Type;;NewName NewName SName%TYPESName%TYPE ;%ROWTYPE属性•当记录变量具有与表或视图中的行或从游标获取的行相同的结构时有用•记录中的字段具有与表/视图中的列相同的名称和数据类型•示例Stud_RecStudInfo%ROWTYPE;;Stud_Rec StudInfo%ROWTYPE•可以使用下列属性引用特定字段Stud_Rec.StudNameStud_Rec.StudName;;西南林业大学计算机与信息学院——鲁 宁西南林业大学计算机与信息学院——鲁 宁使用赋值操作符进行赋值 •赋值操作符“:=:=””•赋值语句:变量名:=值•值可以是数据量、变量、算术操作符或 PL/SQL 函数调用的表达式•示例declareSName SName SName StudInfo.StudName%Type StudInfo.StudName%Type;; StudScore StudScore StudScore Number(5,2);Number(5,2);beginSName SName SName:=':='李明'; StudScore StudScore StudScore:=:=:=Length('ABC Length('ABC Length('ABC')')')**3;end;/西南林业大学计算机与信息学院——鲁 宁使用 SELECT INTO 进行赋值 •语法SELECT <列名> INTO <变量名>FROM <表名> WHERE <条件>;•示例declareSName SName SName StudInfo.StudName%Type StudInfo.StudName%Type;; beginSELECT SELECT StudName StudName StudName INTO INTO INTO SNameSName FROM FROM StudInfo StudInfo StudInfo WHERE WHERE WHERE StudNo StudNo StudNo='20010505001';='20010505001'; dbms_output.put_line(SName dbms_output.put_line(SName dbms_output.put_line(SName);); end;使用SELECT INTO 进行赋值(续)•SELECT 语句执行后,将出现下列情况之一–只检索了一行–检索了多行–不检索任何行•仅当它检索一行时,SELECT 才成功操作•其他两种情况将导致错误并产生异常处理程序西南林业大学计算机与信息学院——鲁 宁西南林业大学计算机与信息学院——鲁 宁接受用户输入的值•使用“&”操作符及赋值操作符可以接受用户输入的值 •示例declareSName SName SName varchar2(20);varchar2(20); SScore SScore SScore Number(5,1);Number(5,1); beginSName SName SName:='&:='&:='&StudName StudName StudName';'; SScore SScore SScore:=&:=&:=&StudScore StudScore StudScore;; end;•注:“StudName ”是绑定变量,不应该声明,但是需要声明 SName条件控制•选择结构测试某个条件,然后根据条件在两序列语句中选择一列执行•有三种语句形式–IF-THEN–IF-THEN-ELSE–IF-THEN-ELSIF西南林业大学计算机与信息学院——鲁 宁IF-THEN 结构•仅当条件值为TRUE 时,才执行语句序列•如果条件判定为FALSE 或NULL,则不执行任何操作•语法IF <条件> THEN语句;END IF;西南林业大学计算机与信息学院——鲁 宁西南林业大学计算机与信息学院——鲁 宁IF-THEN 示例declarei i int int int;;begini:=5;if i=5 then dbms_output.put_line(i+5);end if;end;/IF-THEN-ELSE 结构•仅当条件值为FALSE 或NULL 时,才执行ELSE 子句中的语句序列IF <条件> THEN语句;ELSE语句;END IF;西南林业大学计算机与信息学院——鲁 宁西南林业大学计算机与信息学院——鲁 宁IF-THEN-ELSE 示例declarei i int int int;;begini:=5;if i<5 thendbms_output.put_line('i dbms_output.put_line('i dbms_output.put_line('i<5');<5'); elsedbms_output.put_line('i dbms_output.put_line('i dbms_output.put_line('i>=5');>=5'); end if;end;IF-THEN-ELSIF 结构IF <条件1> THEN语句;ELSIF <条件2> THEN语句;ELSIF <条件3> THEN语句;ELSE语句;END IF;西南林业大学计算机与信息学院——鲁 宁西南林业大学计算机与信息学院——鲁 宁IF-THEN-ELSIF 示例 declarei i int int int;; begini:=5;if i<5 thendbms_output.put_line('i dbms_output.put_line('i dbms_output.put_line('i<5');<5'); elsif elsif elsif i=5 theni=5 then dbms_output.put_line('i dbms_output.put_line('i dbms_output.put_line('i=5');=5'); elsedbms_output.put_line('i dbms_output.put_line('i dbms_output.put_line('i>5');>5'); end if;end;CASE语句单一选择等值比较CASE <变量>WHEN <值1> THEN语句;WHEN <值2> THEN语句;……WHEN <值N> THEN语句;[Else]语句;End Case;西南林业大学计算机与信息学院——鲁 宁西南林业大学计算机与信息学院——鲁 宁CASE 语句单一选择等值比较示例declareN N int int int ;;beginN:=&N;Case NWhen 1 Thendbms_output.put_line('N dbms_output.put_line('N dbms_output.put_line('N=1');=1'); When 2 thendbms_output.put_line('N dbms_output.put_line('N dbms_output.put_line('N=2');=2'); When 3 thendbms_output.put_line('N dbms_output.put_line('N dbms_output.put_line('N=3');=3'); elsedbms_output.put_line('N dbms_output.put_line('N dbms_output.put_line('N='||='||='||TO_Char(N TO_Char(N TO_Char(N));)); end Case;end;CASE语句多条件比较CASEWHEN <逻辑表达式1> THEN语句;WHEN <逻辑表达式2> THEN语句;……WHEN <逻辑表达式N> THEN语句;[Else]语句;End Case;西南林业大学计算机与信息学院——鲁 宁西南林业大学计算机与信息学院——鲁 宁CASE 语句多条件比较示例declareN N int int int;;beginN:=&N;CaseWhen N<5 Thendbms_output.put_line('N dbms_output.put_line('N dbms_output.put_line('N<5');<5'); When N>5 Thendbms_output.put_line('N dbms_output.put_line('N dbms_output.put_line('N>5');>5'); elsedbms_output.put_line('N dbms_output.put_line('N dbms_output.put_line('N=5');=5'); end Case;end;循环控制•使用LOOP 或GOTO 语句可以重复或跳过程序块的选取部分•有三种形式的LOOP 语句–LOOP–WHILE-LOOP–FOR-LOOP西南林业大学计算机与信息学院——鲁 宁LOOP 语句•语法LOOP语句;[EXIT][EXIT-WHEN]END LOOP;•被重复的语句位于关键词 LOOPLOOP 和END LOOP 之间•每执行一次循环迭代过程,就执行一次语句序列,然后控制又回到循环的开始位置西南林业大学计算机与信息学院——鲁 宁EXIT 语句•如果不需要或不可能让循环进一步处理,用于完成循环•有两种形式的EXIT 语句–EXIT–EXIT-WHEN西南林业大学计算机与信息学院——鲁 宁EXIT 语句(续)•强制循环无条件完成•必须放在循环内LOOP语句;IF <条件> THENEXIT; --立即退出循环END IF;END LOOP;--控制到此处恢复西南林业大学计算机与信息学院——鲁 宁西南林业大学计算机与信息学院——鲁 宁计算S=1+3+5+S=1+3+5+……+99 declarei i int int int:=1;:=1; S S int int int:=0;:=0; beginloopS:= S:=S+i S+i S+i;; i:=i+2;if i>99 thenexit;end if;end loop;dbms_output.put_line(s dbms_output.put_line(s dbms_output.put_line(s);); end;EXIT-WHEN 语句•允许循环有条件完成•在遇到EXIT 语句时对WHEN 子句中的条件进行判断•如果判定条件为TRUE,则循环完成LOOPLOOP语句;EXIT WHEN <条件>;END LOOP;西南林业大学计算机与信息学院——鲁 宁西南林业大学计算机与信息学院——鲁 宁计算S=5!declarei i int int int:=1;:=1; S S int int int:=1;:=1;beginloopS:=S S:=S**i; i:=i+1;exit when i>5;end loop;dbms_output.put_line('5!='|| dbms_output.put_line('5!='||to_char(s to_char(s to_char(s));));end;WHILE-LOOP 语句•语法WHILE <条件>LOOP语句;END LOOP;•将条件与LOOP-END LOOP 中的语句序列相关联•循环执行的次数取决于条件且只有完成循环后才可知西南林业大学计算机与信息学院——鲁 宁西南林业大学计算机与信息学院——鲁 宁WHILE-LOOP 示例:计算N!declarei i int int int:=1;:=1; N N int int int;; k number:=1;beginN:=&N;While i<=Nloopk:=k k:=k**i; i:=i+1;end loop;dbms_output.put_line('5!='|| dbms_output.put_line('5!='||to_char(k to_char(k to_char(k));));end;西南林业大学计算机与信息学院——鲁 宁FOR-LOOP 语句•语法FOR <计数器> IN [Reverse] > IN [Reverse] lower_bound lower_bound lower_bound .. .. .. higher_bound higher_bound higher_boundLOOP语句;END LOOP;•循环在指定的整数范围内进行 •不能为循环计数器赋值 •在运行时可以动态分配循环范围 •对于一定范围内的每个整数,都执行一次该语句•每执行一次循环,循环计数器就会增加西南林业大学计算机与信息学院——鲁 宁FOR-LOOP 示例:计算N!declarei i int int int;; N N int int int;; k number:=1;beginN:=&N;for i in 1..Nloopk:=k k:=k**i; end loop;dbms_output.put_line('5!='|| dbms_output.put_line('5!='||to_char(k to_char(k to_char(k));));end;西南林业大学计算机与信息学院——鲁 宁S=1!+2!+3!+S=1!+2!+3!+……+N!declareM M int int int;; S number:=0;k number:=1;beginM:=&N;for i in 1..Mloopk:=k k:=k**i; S:= S:=S+k S+k S+k;; end loop;dbms_output.put_line('1!+2!+3!+ dbms_output.put_line('1!+2!+3!+……+N!='||+N!='||to_char(S to_char(S to_char(S));));end;GOTO 语句•无条件跳转到一个标签•执行时,语句将更改PL/SQL 程序块的控制流•编制GOTO 语句代码需要有两个部分–定义标签名称–使用GOTO 语句将控制转到标签•在下列位置可以使用GOTO 语句来转移控制–从程序块到可执行语句–从异常处理程序分支到封闭的程序块西南林业大学计算机与信息学院——鲁 宁GOTO 语句(续)•标签名称–可以选择将其用于命名PL/SQL程序块或程序块中的语句–使用尖括号进行定义(<< >>)<<if_fare_label>>IF 条件THEN语句;END IF;语句;GOTO if_fare_label;西南林业大学计算机与信息学院——鲁 宁GOTO 语句•不允许在下列位置使用GOTO 语句来转移控制–从某个IF 语句或循环子句内转到其他语句–从封闭程序块转到某个子程序块–从异常处理程序转到当前程序块–子程序之外–转到关键字西南林业大学计算机与信息学院——鲁 宁西南林业大学计算机与信息学院——鲁 宁NULL 语句•明确指定不进行操作(例如,除了将控制转移到下一个语句而不进行任何操作) •它提高了可读性IF IF newfare newfare newfare > 90 THEN> 90 THEN 语句;ELSENULL;END IF;注释的使用•添加注释可以提高程序的可读性并帮助理解•PL/SQL 支持两种注释样式–单行注释–可以在行中的任何地方以双分号(--) 开始–可以扩展到行尾–多行注释–这些注释以/*开始并以*/结束–可以跨越多行西南林业大学计算机与信息学院——鲁 宁异常简介•错误条件称为异常•错误发生时,产生异常,这些异常包括常规执行停止并PL/SQL 程序块或子程序的异常处理且控制转移到了 PL/SQL部分•要处理产生的异常,需要编写单独的称作异常处理程序的例程•有两类异常–预定义异常(内部异常)–用户定义的异常西南林业大学计算机与信息学院——鲁 宁。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ORACLE 9i
Linux公社() 是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。

第6章 SQL基础 步骤3:按执行按钮或F5快捷键执行程序。 输出的结果是: 7788号雇员是:SCOTT,工资为:3000 PL/SQL 过程已成功完成。 以上程序的作用是,查询雇员编号为7788的雇员姓名和工资, 然后显示输出。这种方法同直接在SQL环境下执行SELECT语句显示 雇员的姓名和工资比较,程序变得更复杂。那么两者究竟有什么区别 呢?SQL查询的方法,只限于SQL环境,并且输出的格式基本上是固 定的。而程序通过把数据取到变量中,可以进行复杂的处理,完成 SQL语句不能实现的功能,并通过多种方式输出。 ORACLE 9i

第6章 SQL基础 ORACLE 9i
表6-2 数据类型说明
类型标识符 NUMBER INT BINARY_INTEGER CHAR V ARCHAR2 LONG DA TE BOOLEAN LOB 说 数值型 整数型 整数型,带符号 定长字符型,最大 32 767 个字符 变长字符型,最大 32 767 个字符 变长字符型,最长 2 GB 日期型,用于存储日期和时间 布尔型,用于存储逻辑值 TRUE 和 FALSE 大对象类型,用来存储非结构化数据,长度可达 4 GB 明
ORACLE 9i
Linux公社() 是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。

第6章 SQL基础 ORACLE 9i
SELECT FROM emp
ename,sal
INTO v_name,v_sal WHERE empno=7788; --在程序中插入的SQL语句 DBMS_OUTPUT.PUT_LINE('7788号雇员是:'||v_name||',工 资为:'||to_char(v_sal)); --输出雇员名和工资 END; --结束标识
ORACLE 9i
Linux公社() 是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。

第6章 SQL基础 ORACLE 9i
表6-1 变量的数据类型
数据类型 BINARY_INTEGER NUMBER 子类型 NATURAL,POSITIVE DEC,DECIMAL,DOUBLE PRECISION,PLOAT,INTEGER,INT,NUMERIC, REAL,SMALLINT CHARACTER,STRING VARCHAR
ORACLE 9i
Linux公社() 是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。

第6章 SQL基础 ORACLE 9i
在以下的训练中,将使用函数DBMS_OUTPUT.PUT_LINE显示输出 结果。DBMS_OUTPUT是Oracle提供的包,该包有如下三个用于输出的 函数,用于显示PL/SQL程序模块的输出信息。 第一种形式: DBMS_OUTPUT.PUT(字符串表达式); 用于输出字符串,但不换行,括号中的参数是要输出的字符串表达 式。 第二种形式: DBMS_OUTPUT.PUT_LINE(字符串表达式); 用于输出一行字符串信息,并换行,括号中的参数是要输出的字符 串表达式。
ORACLE 9i
Linux公社() 是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。

第6章 SQL基础 ORACLE 9i
NUMBER和VARCHAR2是最常用的数据类型。 VARCHAR2是可变长度的字符串,定义时指明最大长度, 存储数据的长度是在最大长度的范围自动调节的,数据前后的空 格,Oracle 9i会自动将其删去。 NUMBER 型 可 以 定 义 数 值 的 总 长 度 和 小 数 位 , 如 NUMBER(10,3)表示定义一个宽度为10、小数位为3的数值。整个 宽度减去小数部分的宽度为整数部分的宽度,所以整数部分的宽 度为7。
数值
纯量 类型 字符
逻辑 日期 组合 类型 记录 表
CHAR VARCHAR2 LONG LONG RAW RAW RAWID BOOLEAN DATE RECORD TABLE
ORACLE 9i
Linux公社() 是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。
ORACLE 9i
Linux公社() 是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。

第6章 SQL基础 【训练1】 查询雇员编号为7788的雇员姓名和工资。 步骤1:用SCOTT账户登录SQL*Plus。 步骤2:在输入区输入以下程序: /*这是一个简单的示例程序*/ SET SERVEROUTPUT ON DECLARE--定义部分标识 v_name VARCHAR2(10); v_sal NUMBER(5); BEGIN --定义字符串变量v_name --定义数值变量v_sal --可执行部分标识 ORACLE 9i
ORACLE 9i
Linux公社() 是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。

第6章 SQL基础 第三种形式: DBMS_OUTPUT.NEW_LINE; 用来输出一个换行,没有参数。 调用函数时,在包名后面用一个点“.”和函数名分隔,表示隶属关 系。 要使用该方法显示输出数据,在SQL*Plus环境下要先执行一次如下 的环境设置命令: SET SERVEROUTPUT ON [SIZE n] 用来打开DBMS_OUTPUT.PUT_LINE函数的屏幕输出功能,系统默 认状态是OFF。其中,n表示输出缓冲区的大小。n的范围在2000~1 000 000之间,默认为2000。如果输出内容较多,需要使用SIZE n来设置较大 的输出缓冲区。 ORACLE 9i
ORACLE 9i
Linux公社() 是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。

第6章 SQL基础 ORACLE 9i
CHAR数据类型为固定长度的字符串,定义时要指明宽度,如不 指明,默认宽度为1。定长字符串在显示输出时,有对齐的效果。 DATE类型用于存储日期数据,内部使用7个字节。其中包括年、 月、日、小时、分钟和秒数。默认的格式为DD-MON-YY,如:07-8 月-03表示2003年8月7日。 BOOLEAN为布尔型,用于存储逻辑值,可用于PL/SQL的控制结 构。 LOB数据类型可以存储视频、音频或图片,支持随机访问,存储 的数据可以位于数据库内或数据库外,具体有四种类型:BFILE、 BLOB 、 CLOB 、 NCLOB 。 但 是 操 纵 大 对 象 需 要 使 用 Oracle 提 供 的 DBMS_LOB包。
ORACLE 9i
Linux公社() 是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。

第6章 SQL基础 6.1.2 块结构和基本语法要求 PL/SQL程序的基本单元是块(BLOCK),块就是实现一定功能的 逻辑模块。一个PL/SQL程序由一个或多个块组成。块有固定的结 构,也可以嵌套。一个块可以包括三个部分,每个部分由一个关键字 标识。 块中各部分的作用解释如下: (1) DECLARE:声明部分标志。 (2) BEGIN:可执行部分标志。 (3) EXCEPTION:异常处理部分标志。 (4) END;:程序结束标志。 ORACLE 9i
ORACLE 9i
Linux公社() 是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。

第6章 SQL基础 ORACLE 9i
至于数据定义(DDL)和数据控制(DCL)命令的处理,需要通过 Oracle提供的特殊的DBMS_SQL包来进行。PL/SQL还可以用来编写 过程、函数、包及数据库触发器。过程和函数也称为子程序,在定 义时要给出相应的过程名和函数名。它们可以存储在数据库中成为 存储过程和存储函数,并可以由程序来调用,它们在结构上同程序 模块类似。 PL/SQL过程化结构的特点是:可将逻辑上相关的语句组织在一 个程序块内;通过嵌入或调用子块,构造功能强大的程序;可将一 个复杂的问题分解成为一组便于管理、定义和实现的小块。
ORACLE 9i
Linux公社() 是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。

第6章 SQL基础 ORACLE 9i
“--”是注释符号,后边是程序的注释部分。该部分不编译执 行,所以在输入程序时可以省略。/*......*/中间也是注释部分,同 “--”注释方法不同,它可以跨越多行进行注释。 PL/SQL程序的可执行语句、SQL语句和END结束标识都要 以分号结束。第6章SQL基础 ORACLE 9i
6.1 PL/SQL的基本构成
6.1.1 特点 PL/SQL语言是SQL语言的扩展,具有为程序开发而设计的特 性,如数据封装、异常处理、面向对象等特性。PL/SQL是嵌入到 Oracle服务器和开发工具中的,所以具有很高的执行效率和同Oracle 数据库的完美结合。在PL/SQL模块中可以使用查询语句和数据操纵 语句(即进行DML操作),这样就可以编写具有数据库事务处理功能 的模块。

第6章 SQL基础 ORACLE 9i
第6章 PL/SQL基础
6.1 PL/SQL的基本构成 6.2 结构控制语句 6.3 阶段训练 6.4 练习
ORACLE 9i
Linux公社() 是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。
ORACLE 9i
Linux公社() 是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。
相关文档
最新文档