学习oracle笔记--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,全称为PL/SQL,是Oracle数据库中一种常用的编程语言。
本篇文章将详细介绍PlSql的用法,包括其基本语法、开发环境设置、常用函数和语句等。
一、基本语法-----PlSql的基本语法包括声明、赋值和执行语句。
以下是一个简单的PlSql程序示例:```sqlDECLAREv_name VARCHAR2(50);v_age NUMBER;BEGINv_name := '张三';v_age := 25;DBMS_OUTPUT.PUT_LINE('姓名: ' || v_name || ', 年龄: ' || v_age);END;```上述代码中,我们声明了两个变量v_name和v_age,并分别赋值为字符串和数字类型。
然后使用DBMS_OUTPUT.PUT_LINE语句输出结果。
在PlSql中,可以使用Oracle提供的输出函数来输出变量的值。
二、开发环境设置要编写和运行PlSql程序,需要安装Oracle数据库客户端,并配置开发环境。
具体步骤如下:1. 安装Oracle数据库客户端,并确保数据库服务已启动。
2. 打开Oracle SQL Developer或其他Oracle数据库管理工具。
3. 创建一个数据库连接,并选择要使用的数据库。
4. 在工具中打开一个新的PlSql编辑器窗口或创建一个新的PlSql文件。
三、常用函数和语句---------PlSql提供了许多内置函数和语句,用于处理数据、执行操作和生成结果。
以下是一些常用的函数和语句:* 数据类型转换函数:TO_CHAR、TO_NUMBER等。
* 字符串操作函数:SUBSTR、LENGTH、REPLACE等。
* 日期操作函数:YEAR、MONTH、DAY等。
* 控制语句:BEGIN...END、LOOP、WHILE、CASE等。
* 异常处理语句:EXCEPTION、RAISE等。
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,分别用于存储输入的字符串和转换后的结果。
精通 oracle 10g plsql 编程-学习笔记

1.PL/SQL综述本章学习目标,了解如下内容:PL/SQL的功能和作用PL/SQL 的优点和特征;Oracle 10g、Oracle9i 的PL/SQL新特征1.1.SQL简介1.1.1.SQL语言特点SQL语言采用集合操作方式1.1.2.SQL语言分类●数据查询语言(SELECT语句):检索数据库数据。
●数据操纵语言(DML):用于改变数据库数据。
包括insert,update和delete三条语句。
●事务控制语言(TCL):用于维护数据库的一致性,包括commit,rollback和savepoint 三条语句●数据定义语言(DDL):用户建立、修改和删除数据库对象。
●数据控制语言(DDL):用于执行权限授予和收回操作。
包括grant 和revoke两条命令。
1.1.3.SQL 语句编写规则●SQL关键字不区分大小写●对象名和列名不区分大小写●字符值和日期值区分大小写●书写格式随意1.2.PL/SQL简介1.3.Oracle 10G PL/SQL 新特征2.PL/SQL开发工具本章学习目标:学会使用SQL*PLUS学会使用PL/SQL developer;学会使用Procedure Builder。
2.1.SQL*PLUS在命令行运行SQL*PlusSqlplus [username]/[password] [@server]3.PL/SQL 基础学习目标:●了解PL/SQL块的基本结构以及PL/SQL块的分类;●学会在PL/SQL块中定义和使用变量●学会在PL/SQL块中编写可执行语句;●了解编写PL/SQL代码的指导方针;●了解Oracle 10g的新特征——新数据类型BINARY_FLOAT 和BINARY_DOUBLE,以及指定字符串文本的新方法。
3.1.PL/SQL 块简介3.1.1.PL/SQL块结构3.1.2.PL/SQL 块分类匿名块命名块子程序触发器3.2. 定义并使用变量3.2.1.标量变量3.2.2.复合变量3.2.3.参照变量3.2.4.LOB 变量3.2.5.非PL/SQL 变量3.3.编写 PL/SQL 代码3.3.1.PL/SQL 词汇单元分隔符标识符文本(数字文本,字符文本,字符串文本,布尔文本,日期时间文本)注释3.3.2.PL/SQL 代码编码规则标识符命名规则大小写规则代码缩进嵌套块和变量范围PL/SQL中可以使用的SQL函数4.使用SQL语句学习目标:学会使用SELECT语句去完成基本查询功能学会使用INSERT,UPDA TE和DELETE语句去操作数据库数据学会使用COMMIT,ROLLBACK和SA VEPOINT语句去控制事务学会使用SELECT语句去实现各种复杂查询功能(数据分组、连接查询、子查询、层次查询、合并查询等)4.1.使用基本查询处理NULL:函数nvl(expr1,expr2),nvl2(expr1,expr2,expr3)4.2.使用DML语句使用多表插入数据语法:INSERT ALL insert_into_clause [value_clause] subquery;INSERT conditional_insert_clause subquery;示例1:使用ALL 操作符执行多表插入INSERT ALLWHEN deptno=10 THEN INTO dept10WHEN deptno=20 THEN INTO dept20WHEN deptno=30 THEN INTO dept30WHEN job=’CLERK’ THEN INTO clerkELSE INTO otherSelect * from emp;示例2:使用FIRST 操作符执行多表插入INSERT FIRSTWHEN deptno=10 THEN INTO dept10WHEN deptno=20 THEN INTO dept20WHEN deptno=30 THEN INTO dept30WHEN job=’CLERK’ THEN INTO clerkELSE INTO otherSELECT * FROM emp;4.3.使用事务控制语句4.3.1.事务和锁4.3.2.提交事务4.3.3.回退事务设置保存点:savepoint a;或者exec dbms_transaction.savepoint(‘a’)取消部分事务Rollback to a;或者Exec dbms_transaction.rollback_savepoint(‘a’)取消全部事务:Rollback; 或者exec dbms_transaction.rollback() 4.3.4.只读事务4.3.5.顺序事务4.4.数据分组4.4.1.分组函数MaxMinAvgSumCountVarianceStddev使用分组函数注意事项:●当使用分组函数时,除了函数Count(*) 之外,其他分组函数都会忽略NULL行。
plsql 使用技巧

plsql 使用技巧PL/SQL是Oracle数据库中的一种编程语言,它结合了SQL语句和过程性编程语言的特点,提供了一种强大的数据库开发工具。
下面是一些PL/SQL使用技巧:1. 使用块:块是PL/SQL程序的基本单元。
使用块可以将一组相关的语句组织在一起,并提供一些错误处理机制。
块通常用于存储过程、触发器和函数中。
2. 使用游标:游标是用于在PL/SQL程序中处理查询结果的一种机制。
使用游标可以逐行处理查询结果,提供更灵活的数据操作方式。
3. 使用异常处理:异常处理是一种处理程序运行过程中出现异常的机制。
在PL/SQL中,可以使用EXCEPTION块来处理异常情况,提高程序的稳定性。
4. 使用存储过程和函数:存储过程和函数是一种将一组SQL语句和过程性语句组织在一起的机制。
使用存储过程和函数可以将复杂的逻辑封装起来,提高程序的可维护性和重用性。
5. 使用触发器:触发器是在数据库表中定义的一种特殊类型的存储过程。
使用触发器可以根据数据库表中的数据变化触发特定的逻辑处理。
6. 使用PL/SQL调试器:PL/SQL调试器是一种用于调试PL/SQL程序的工具。
使用调试器可以逐步执行PL/SQL代码,并查看变量的值和程序执行的状态,方便程序的调试和排错。
7. 使用PL/SQL包:PL/SQL包是将相关的存储过程、函数和变量组织在一起的一种机制。
使用包可以提供更好的模块化和封装性,方便程序的管理和维护。
8. 使用PL/SQL游标变量:PL/SQL游标变量是一种特殊的变量类型,用于在程序中保存游标的状态。
使用游标变量可以提高游标的灵活性和可重用性。
9. 使用PL/SQL集合类型:PL/SQL提供了各种集合类型,如数组、表和记录。
使用集合类型可以方便地处理多个数据元素,提高程序的性能和可读性。
10. 使用PL/SQL优化技巧:在编写和调试PL/SQL程序时,可以使用一些优化技巧来提高程序的性能。
例如,使用合适的索引、批量操作和合理的逻辑结构等。
plsql使用技巧

plsql使用技巧PL/SQL是Oracle数据库的一种编程语言,可以用于编写存储过程、触发器、函数等程序。
本文将从以下几个方面介绍PL/SQL的使用技巧:一、变量和常量的使用1.1 变量的定义在PL/SQL中,可以使用DECLARE语句来定义变量。
例如:DECLAREv_name VARCHAR2(100);BEGINv_name := 'John';END;1.2 常量的定义在PL/SQL中,可以使用CONSTANT关键字来定义常量。
例如:DECLAREc_pi CONSTANT NUMBER := 3.1415926;BEGINNULL;END;1.3 变量和常量的命名规则在PL/SQL中,变量和常量的命名规则与其他编程语言类似。
变量和常量的名称必须以字母开头,并且只能包含字母、数字和下划线。
二、条件语句的使用2.1 IF语句IF语句用于根据条件执行不同的代码块。
例如:DECLAREv_age NUMBER := 18;BEGINIF v_age >= 18 THENDBMS_OUTPUT.PUT_LINE('You are an adult.');ELSEDBMS_OUTPUT.PUT_LINE('You are a minor.');END IF;END;2.2 CASE语句CASE语句用于根据不同情况执行不同代码块。
例如:DECLAREv_day_of_week NUMBER := 5;BEGINCASE v_day_of_weekWHEN 1 THEN DBMS_OUTPUT.PUT_LINE('Monday');WHEN 2 THEN DBMS_OUTPUT.PUT_LINE('Tuesday');WHEN 3 THEN DBMS_OUTPUT.PUT_LINE('Wednesday'); WHEN 4 THEN DBMS_OUTPUT.PUT_LINE('Thursday'); WHEN 5 THEN DBMS_OUTPUT.PUT_LINE('Friday');ELSE DBMS_OUTPUT.PUT_LINE('Weekend');END CASE;END;三、循环语句的使用3.1 FOR循环FOR循环用于执行一组代码块一定次数。
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--数字型属性,返回已从游标中读取的记录数。
plsql使用教程
plsql使用教程PL/SQL是Oracle数据库的过程式编程语言,它结合了SQL的强大查询能力和程序设计语言的灵活性。
以下是一个简单的PL/SQL使用教程:1. 定义变量在PL/SQL中,可以使用DECLARE语句来定义变量。
例如:DECLAREnum INTEGER;name VARCHAR2(50);2. 使用SELECT查询数据可以使用SELECT语句从表中检索数据。
例如:SELECT * INTO num, name FROM employees WHERE employee_id = 100;3. 使用IF-THEN-ELSE进行条件判断PL/SQL提供了IF-THEN-ELSE语句来进行条件判断。
例如:IF num > 0 THENDBMS_OUTPUT.PUT_LINE('Number is positive');ELSEDBMS_OUTPUT.PUT_LINE('Number is negative');END IF;4. 使用FOR循环可以使用FOR循环来对一个集合进行迭代。
例如:FOR i IN 1..10 LOOPDBMS_OUTPUT.PUT_LINE('The value of i is: ' || i);END LOOP;5. 创建存储过程可以使用CREATE PROCEDURE语句来创建存储过程。
例如:CREATE PROCEDURE get_employee_details (p_employee_idIN NUMBER) ISv_employee_name VARCHAR2(50);BEGINSELECT employee_name INTO v_employee_name FROM employees WHERE employee_id = p_employee_id;DBMS_OUTPUT.PUT_LINE('Employee name is: ' ||v_employee_name);END;6. 调用存储过程可以使用EXECUTE语句来调用存储过程。
Oracle数据库之PLSQL触发器
Oracle数据库之PLSQL触发器Oracle数据库之PL/SQL触发器1. 介绍触发器(trigger)是提供给程序员和数据分析员来保证数据完整性的⼀种⽅法,它是与表事件相关的特殊的存储过程,它的执⾏不是由程序调⽤,也不是⼿⼯启动,⽽是由事件来触发,⽐如当对⼀个表进⾏操作(insert,delete,update)时就会激活它执⾏。
触发器经常⽤于加强数据的完整性约束和业务规则等。
触发器有三种类型,分别是:DML触发器、替代触发器和系统触发器。
DML触发器顾名思义,DML触发器是由DML语句触发的。
例如数据库的INSERT、UPDATE、DELETE操作都可以触发该类型的触发器。
它们可以在这些语句之前或之后触发,或者在⾏级上触发(就是说对于每个受影响的⾏都触发⼀次)。
替代触发器替代触发器只能使⽤在视图上,与DML不同的是,DML触发器是运⾏在DML之外的,⽽替代触发器是代替激发它的DML语句运⾏。
替代触发器是⾏触发器。
系统触发器这种触发器是发⽣在如数据库启动或关闭等系统事件时,不是在执⾏DML语句时发⽣,当然也可以在DDL时触发。
触发器功能强⼤,轻松可靠地实现许多复杂的功能,但是我们也应该慎⽤。
为什么⼜要慎⽤呢?触发器本⾝没有过错,但如果我们滥⽤,会造成数据库及应⽤程序的维护困难。
在数据库操作中,我们可以通过关系、触发器、存储过程、应⽤程序等来实现数据操作,同时约束、缺省值也是保证数据完整性的重要保障。
如果我们对触发器过分的依赖,势必影响数据库的结构,同时增加了维护的复杂程度。
2. 触发器组成触发器主要由以下⼏个要素组成:1. 触发事件:引起触发器被触发的事件。
2. 触发时间:触发器是在触发事件发⽣之前(BEFORE)还是之后(AFTER)触发,也就是触发事件和该触发器的操作顺序。
3. 触发操作:触发器被触发之后的⽬的和意图,是触发器本⾝要做的事情。
4. 触发对象:包括表、视图、模式、数据库。
玩转Oracle-PLSQL定义并使用变量
玩转Oracle-PLSQL定义并使用变量Oracle是一种关系型数据库管理系统,提供了一种称为PLSQL的编程语言,用于在数据库中定义和处理数据。
PLSQL具有许多功能,包括变量的定义和使用。
本文将介绍在Oracle-PLSQL中定义和使用变量的方法和注意事项。
在Oracle-PLSQL中,可以使用DECLARE语句来定义变量。
DECLARE语句用于在PLSQL块中声明一个或多个变量。
变量可以是任何合法的数据类型,例如整数、字符串、日期等。
下面是一个简单的示例:```DECLAREv_name VARCHAR2(50):='John';v_age NUMBER:=30;BEGIN--此处可以使用变量进行数据处理DBMS_OUTPUT.PUT_LINE('Name: ',v_name);DBMS_OUTPUT.PUT_LINE('Age: ',v_age);END;```在上述示例中,使用DECLARE语句定义了两个变量:v_name和v_age。
v_name是一个VARCHAR2类型的变量,v_age是一个NUMBER类型的变量。
这两个变量分别被初始化为'John'和30。
然后,可以在BEGIN和END之间使用这些变量进行数据处理。
在PLSQL中,可以使用变量进行各种操作,例如赋值、数学运算和条件判断等。
以下是一些使用变量的示例:```DECLAREv_num1 NUMBER:=10;v_num2 NUMBER:=5;v_result NUMBER;BEGIN--将两个变量相加,并将结果赋值给另一个变量v_result:=v_num1+v_num2;DBMS_OUTPUT.PUT_LINE('Sum: ',v_result);--使用IF语句根据变量的值执行不同的操作IF v_result>15 THENDBMS_OUTPUT.PUT_LINE('Result is greater than 15');ELSEDBMS_OUTPUT.PUT_LINE('Result is less than or equal to 15');ENDIF;```在上述示例中,使用变量v_num1和v_num2存储了两个数字,并使用变量v_result存储了它们的和。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学习oracle笔记一、PLSQL概念 (2)1.过程化语言:在oracle中编写存储过程、函数、触发器等。
(2)2.特点 (2)3.学习的必要性: (2)二、开发工具介绍 (2)1.Sqlplus (2)2.PL/SQL developer (2)三、PL/SQL基础 (3)1.介绍: (3)2.PL/SQL可以做什么 (3)3.编写规范 (3)4.块(block) (3)5.过程 (5)6.函数 (5)7.包 (6)8.变量类型 (6)四、Pl/sql进阶(控制语句、存储过程、例外) (10)1.控制结构(条件语句、循环语句、顺序控制结构...).. (10)2.存储过程(编写分页过程) (13)3.例外处理 (16)五、Oracle视图 (20)1.概念: (20)2.视图的必要性 (20)3.视图和表的区别 (21)4.创建视图 (21)5.视图可以当作表一样进行join on联合查询。
(21)一、PLSQL概念1.过程化语言:在oracle中编写存储过程、函数、触发器等。
扩展oracle数据库的编程性能;减轻前端程序的复杂性;增强数据传输的安全性等等2.特点1)过程、函数、触发器是由PLSQL编写的2)过程、函数、触发器是写在oracle中3)PLSQL是非常强大的数据库过程语言4)过程、函数可以在java程序中调用3.学习的必要性:1)提高应用程序的运行性能(减少翻译语句步骤)2)模块化的设计思想(分页存储过程、复杂查询过程)3)减少网络传输量(传输语句减少,直接调用存储过程语句即可)4)提高安全性(传输语句直接调用存储过程名,看不到表名等,具体语句封装在oracle里,多了一层安全性)5)移植性不好(语句写在oracle里,换数据库则得重写)二、开发工具介绍1.Sqlplus举例:编写一个存储过程,该过程可以向某表中添加记录1)创建一张表Create table mytable(name varchar2(20),passwd varchar2(6));2)创建存储过程:往mytable表里添加数据Create (or replace) procedure mypro1 isBegin--执行部分Insert into mytable values(‘韩顺平’,’pw1234’);End;回车,输入/,再回车,如果有错误,可以SQL>show error查看错误3)如何调用该过程●Exec 过程名 (参数值1,参数值2)●Call过程名 (参数值1,参数值2)2.PL/SQL developer举例:编写一个存储过程,该过程可以删除某张表的记录1)Create (or replace) procedure mypro2 isBeginDelete from mytable;End;2)Exec mypro2;三、PL/SQL基础1.介绍:需掌握SQL语句、PL/SQL语句语法规则可以使用变量、逻辑控制语句可以轻松完成复杂的查询可以编写分页存储过程模块、订单处理存储过程模块等2.PL/SQL可以做什么1)简单分类:块(最小单元,衍生出):●存储过程●函数●包●触发器3.编写规范1)注释:a)单行注释:--b)多行注释:/*.....*/2)标识符号的命名规范a)当定义变量时,建议用v_作为前缀,v_salb)当定义常量时,建议用c_作为前缀,c_ratec)当定义游标时,建议用_cursor作为后缀,emp_cursord)当定义例外时,建议用e_作为前缀,e_error4.块(block):PLSQL执行的最小单元,嵌在存储过程、函数等等之中。
1)块是PL/SQL的基本程序单元,编写PL/SQL程序就是编写块,PL/SQL块中可以嵌套其他的PL/SQL块,可以实现复杂的功能2)块的结构:a)由三个部分构成:定义部分、执行部分、例外处理部分b)Declear--定义部分(该部分可选)/*定义常量、变量、游标、例外、复杂数据类型*/c)Begin--执行部分(该部分必须)/*执行PL/SQL语句和SQL语句*/d)Exception--例外处理部分(该部分可选)/*处理各种运行的错误*/3)实例1(最简单的块:只有执行部分)(要先执行Set serveroutput on/off –打开/关闭输出选项,才能输出)BeginDbms_output.put_line(‘hello’);--输出helloEnd;/,再回车,即可输出hello--dbms_output是oracle提供的包,put_line是该包中的过程4)实例2(有定义个执行部分的块)DeclareV_ename varchar2(5);--定义字符串变量BeginSelect ename into V_ename from emp where empno=&no;--执行部分Dbms_output.put_line(‘雇员名:’||v_ename);--输出部分End;/ 回车--&表示要接收从控制台输入的变量实例:declarev_ename varchar2(5);v_sal number(7,2);beginselect ename,sal into v_ename,v_sal from emp where empno=&no;dbms_output.put_line(’雇员名:’||v_ename||’,’||'工资:'||v_sal);end;/ 回车5)实例3(有定义、执行和例外部分的块)declarev_ename varchar2(5);v_sal number(7,2);beginselect ename,sal into v_ename,v_sal from emp where empno=&no;dbms_output.put_line(’雇员名:’||v_ename||’,’||'工资:'||v_sal);exceptionwhen no_data_found thendbms_output.put_line(’编号有误,请重新输入’);end;/ 回车5.存储过程实例4(要求输入用户名和新的工资,即可修改该用户的工资)Create procedure sp_pro4(spname varchar2,newsal number) isBeginUpdate emp set sal=newsal whwere ename=spname;End;/ 回车然后调用该过程即可实现修改工资的功能。
Java程序调用过程的方法6.函数实例5:输入雇员的姓名,返回该雇员的年薪create function sp_fun1(spname varchar2) return number is yearsal number(7,2);beginselect sal*12+nvl(comm,0)*12into yearsal from emp where ename=spname;return yearsal;end;/ 回车调用函数:var 年薪 number;call sp_fun1(’SCOTT’) into:年薪;7.包--创建一个包(包名sp_pack1)--声明该包有一个过程update_sal--声明该包有一个函数annual_incomecreate package sp_pack1 isprocedure update_sal(name varchar2,newsal number);function annual_income(name varchar2) return number;end;--给包(sp_pack1)实现包体create package body sp_pack1 isprocedure update_sal(name varchar2,newsal number)isbeginupdate emp set sal=newsal where ename=name;end;function annual_income(name varchar2)return number isannual_salary number;beginselect sal*12+nvl(comm,0) into annual_salary from emp where ename=name;return annual_salary;end;end;--调用包中的过程或函数:exec sp_pack1.update_sal('SCOTT',4000);8.变量类型●标量类型(scalar)●复合类型(composite)●参照类型(reference)●Lob(large object)1)标量,用于存放单个数据的变量,是最简单的变量定义标量类型案例a)定义一个可变长字符串V_name varchar2(10);b)定义一个小数范围-9999.99~9999.99V_sal number(6,2);c)定义一个小数并给一个初始值为5.4 :=是pl/sql的赋值号V_sal2 number(6,2):=5.4;d)定义一个日期类型的数据V_hiredate date;e)定义一个布尔变量,不能为空,初始值为falseV_valid Boolean not null default false;使用标量案例输入员工号,显示雇员姓名、工资、个人所得税(税率为0.03)declarec_tax_rate number(3,2):=0.03;v_ename varchar2(5);v_sal number(7,2);v_tax_sal number(7,2);beginselect ename,sal into v_ename,v_sal from emp where empno=&no;v_tax_sal:=v_sal*c_tax_rate;dbms_output.put_line('姓名:'||v_ename||'工资:'||v_sal||'所得税:'||v_tax_sal);end;/ 回车为防止定义字符串的长度不够用,可以用%type来定义:declarec_tax_rate number(3,2):=0.03;v_ename emp.ename%type;v_sal number(7,2);v_tax_sal number(7,2);beginselect ename,sal into v_ename,v_sal from emp where empno=&no;v_tax_sal:=v_sal*c_tax_rate;dbms_output.put_line('姓名:'||v_ename||'工资:'||v_sal||'所得税:'||v_tax_sal);end;/ 回车2)复合变量,用于存放多个值的变量,主要包括:●Pl/sql记录●Pl/sql表●嵌套表●varray案例:a)Pl/sql记录,类似高级语言中的结构体(类),引用记录成员时必须有前缀:(记录变量.记录成员)--pl/sql记录实例declare--定义一个pl/sql记录类型emp_record_type,类型包含三个数据name,salary,titletype emp_record_type is record(name emp.ename%type,salary emp.sal%type,title emp.job%type);sp_record emp_record_type;beginselect ename,sal,job into sp_record from emp where empno=&no;dbms_output.put_line('员工名:'||sp_||'工资:'||sp_record.salary);end;/ 回车b)Pl/sql表,相当于高级语言中的数组,pl/sql表的下标可以为负数,并且没有限制。