- 浏览: 559137 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
北月与南安:
哥哥不要秀我,答案是11.38,你算出来36.43,要求N个点 ...
平均距离 -
xiao_android_jun:
[color=red][ size=xx-small ...
Android 之 进程的概念介绍 -
明子健:
小伙子,很有前途哦
《将博客搬至CSDN》 -
1140566087:
dugujiujian 写道R.layout.simple_s ...
Android 之 下拉(Spinner) 组件示例 -
dugujiujian:
R.layout.simple_spinner_dropdow ...
Android 之 下拉(Spinner) 组件示例
[/color][color=orange]SQL> set serveroutput on
SQL> remark 控制语句
SQL> remark 异常处理
SQL> REMARK ..........................................................
SQL> REMARK IF...THEN 的判断语法
SQL> remark IF 条件标示式 WHEN 执行语句 END IF; 示例如下:
SQL> REMARK 使用分组函数 条件判断的按列
SQL> EDIT
Wrote file afiedt.buf
1 DECLARE
2 SUMSAL SCOTT.EMP.SAL%TYPE;
3 BEGIN
4 SELECT SUM(SAL) INTO SUMSAL FROM SCOTT.EMP GROUP BY DEPTNO HAVING DEPTNO=30;
5 IF SUMSAL>5000 THEN
6 DBMS_OUTPUT.PUT_LINE('部门30的工资总额已经超过了预算,供'||SUMSAL);
7 END IF;
8* END;
SQL> /
部门30的工资总额已经超过了预算,供9400
PL/SQL procedure successfully completed.
SQL> REMARK 如果存在了分支条件,使用 IF...ELSIF..ELSE...END IF;
SQL> REMARK 多元分支条件控制case
SQL> REMARK 连接scott账户
SQL> conn scott/tiger;
Connected.
SQL> DECLARE
2 THESAL EMP.SAL%TYPE;
3 BEGIN
4 SELECT SAL INTO THESAL FROM EMP WHERE EMPNO=7369;
5 CASE
6 WHEN THESAL<1000 THEN
7 DBMS_OUTPUT.PUT_LINE('低工资');
8 WHEN THESAL>=1000 THEN
9 DBMS_OUTPUT.PUT_LINE('一般工资');
10 ELSE
11 DBMS_OUTPUT.PUT_LINE('高工资');
12 END CASE;
13 END;
14 /
PL/SQL procedure successfully completed.
SQL> SET SERVEROUTPUT ON;
SQL> REMARK 循环控制loop和end loop ; 之间的语句将无限次的执行,如果要跳出则使用exit;
SQL> remark 语法:loop exit when 条件表达式;执行语句 ; end loop;
SQL> remark 案例:累加的例子
SQL> declare
2 cou int default 10;
3 result int :=0;
4 begin
5 DBMS_OUTPUT.PUT_LINE('循环开始.....');
6 LOOP
7 EXIT WHEN COU>20;
8 result :=result + cou;
9
10 DBMS_OUTPUT.PUT_LINE('进入循环..'||cou||'结果是:'||result);
11 cou :=cou+1;
12 end loop;
13 dbms_output.put_line('最后的结果是:'||result);
14 end;
15 /
循环开始.....
进入循环..10结果是:10
进入循环..11结果是:21
进入循环..12结果是:33
进入循环..13结果是:46
进入循环..14结果是:60
进入循环..15结果是:75
进入循环..16结果是:91
进入循环..17结果是:108
进入循环..18结果是:126
进入循环..19结果是:145
进入循环..20结果是:165
最后的结果是:165
PL/SQL procedure successfully completed.
SQL> remark 循环控制还可以使用for 循环和while 进行循环,这两种循环都是以loop循环作为基础
SQL> remark 语法:for 变量 in 起始值..结束值 loop 执行语句; end loop;
SQL> remark 注:for循环的语法控制中,变量的定义不用声明,变量的边界值都会进入循环;.......
案例:
SQL> declare
2 result int :=0;
3 begin
4 dbms_output.put_line('循环开始...');
5 for cou in 10..20
6 loop
7 result :=result+cou;
8 dbms_output.put_line('进入循环..'||cou||'结果是:'||result);
9 end loop;
10 dbms_output.put_line('循环结束:'||result);
11 end;
12 /
循环开始...
进入循环..10结果是:10
进入循环..11结果是:21
进入循环..12结果是:33
进入循环..13结果是:46
进入循环..14结果是:60
进入循环..15结果是:75
进入循环..16结果是:91
进入循环..17结果是:108
进入循环..18结果是:126
进入循环..19结果是:145
进入循环..20结果是:165
循环结束:165
PL/SQL procedure successfully completed.
SQL> remark while 的循环用法
SQL> remark 语法:while 条件表达式 loop 执行语句; end loop;
SQL> remark ................................................................
SQL> remark 跳转控制:标示跳转的指令是 goto
SQL> remark 语法:执行语句 <<节名称>> 执行语句;
SQL> remark 如果只希望 节 作为一个跳转的点,并不执行任何语句,可以使用null,使用return 结束
程序
SQL> remark 跳转的案例:
SQL> declare
2 sumsal emp.sal%type;
3 begin
4 select sum(sal) into sumsal from emp where deptno=30;
5 if sumsal>2000 then
6 goto first;
7 elsif sumsal>3000 then
8 goto second;
9 else
10 goto third;
11 end if;
12
13 <<first>>
14 dbms_output.put_line('first'||sumsal);
15 return;
16 <<second>>
17 dbms_output.put_line('second'||sumsal);
18 return;
19 <<third>>
20 null;
21 end;
22 /
first9400
PL/SQL procedure successfully completed.
SQL> remark ................................................................
SQL> remark 记录:PS记录只有一行,但是由多列,有点类型于程序中的结构
SQL> remark 记录的定义:type <类型名> is record <列名 1 类型 1,....列名n 类型n,>
SQL> remark 案例:
SQL> edit;
Wrote file afiedt.buf
1 declare
2 type empsub is record (myeno emp.empno%type,myename emp.ename%type,mysa emp.sal
%type);
3 mycord empsub;
4 begin
5 select empno,ename,sal into mycord from emp where empno = 7369;
6 dbms_output.put_line('编号1:'||mycord.myeno);
7* end;
SQL> /
编号1:7369
PL/SQL procedure successfully completed.
SQL> remark empsub 定义了一种数据类型
SQL> remark..................................................................
SQL> remark 异常:一种为内部异常,一种为用户自定义异常;
SQL> remark PS中要捕获异常,必须使用系统所给的异常名称,而不是异常的编号;
SQL> declare
2 newsal emp.sal%type;
3 begin
4 select sal into newsal from emp where deptno = 30;
5 dbms_output.put_line('工资是:'||newsal);
6 exception
7 when too_many_rows then
8 dbms_output.put_line('数据插入记录太多');
9 end;
10 /
数据插入记录太多
PL/SQL procedure successfully completed.
SQL> remark 自定义异常
SQL> remark declare 异常名 exception; ----声明异常
SQL> remark raise 异常名; --抛出异常
SQL> remark exception when 异常名 then 。....-- 捕获异常 并进行相关的处理
SQL> remark RAISE_APPLICATION_ERROR(错误编码,错误消息);
SQL> remark 错误编码:用户为抛出异常指定的编号,-20000和-20999之间
SQL> remark 错误消息:是用户定义的错误的消息,消息的长度是2048;
SQL> declare
2 thesal emp.sal%type;
3 begin
4 select sal into thesal from emp where empno=7369;
5 if thesal>2000 then
6 raise_application_error(-20001,'工资不再调整的范围');
7 end if;
8 end;
9 /
PL/SQL procedure successfully completed.
SQL> remark ................................................................
SQL> remark 动态SQL ,动态的构造一个查询语句;语法:
SQL> remark execute immediate 'SQL语句字符串';
SQL> remark 创建一个表:
SQL> begin
2 execute immediate
3 'create table hopecalss(claid number,calName char(6))';
4 end;
5 /
PL/SQL procedure successfully completed.
SQL> remark 动态的SQL进行参数的传递 有时候进行结果的变量;
SQL> edit
Wrote file afiedt.buf
1 declare
2 sqlstring varchar2(200);
3 dept_id number(2):=50;
4 dept_name varchar(14):='personnel';
5 location varchar(13):='develop';
6 begin
7 --演示的是usingredients字句的execute immediate
8 sqlstring :='insert into dept values(:1,:2,:3)';
9 execute immediate sqlstring using dept_id,dept_name,location;
10* end;
11 /
PL/SQL procedure successfully completed.
SQL> spool off;
[color=orange][/color][size=x-small][/size]
SQL> remark 控制语句
SQL> remark 异常处理
SQL> REMARK ..........................................................
SQL> REMARK IF...THEN 的判断语法
SQL> remark IF 条件标示式 WHEN 执行语句 END IF; 示例如下:
SQL> REMARK 使用分组函数 条件判断的按列
SQL> EDIT
Wrote file afiedt.buf
1 DECLARE
2 SUMSAL SCOTT.EMP.SAL%TYPE;
3 BEGIN
4 SELECT SUM(SAL) INTO SUMSAL FROM SCOTT.EMP GROUP BY DEPTNO HAVING DEPTNO=30;
5 IF SUMSAL>5000 THEN
6 DBMS_OUTPUT.PUT_LINE('部门30的工资总额已经超过了预算,供'||SUMSAL);
7 END IF;
8* END;
SQL> /
部门30的工资总额已经超过了预算,供9400
PL/SQL procedure successfully completed.
SQL> REMARK 如果存在了分支条件,使用 IF...ELSIF..ELSE...END IF;
SQL> REMARK 多元分支条件控制case
SQL> REMARK 连接scott账户
SQL> conn scott/tiger;
Connected.
SQL> DECLARE
2 THESAL EMP.SAL%TYPE;
3 BEGIN
4 SELECT SAL INTO THESAL FROM EMP WHERE EMPNO=7369;
5 CASE
6 WHEN THESAL<1000 THEN
7 DBMS_OUTPUT.PUT_LINE('低工资');
8 WHEN THESAL>=1000 THEN
9 DBMS_OUTPUT.PUT_LINE('一般工资');
10 ELSE
11 DBMS_OUTPUT.PUT_LINE('高工资');
12 END CASE;
13 END;
14 /
PL/SQL procedure successfully completed.
SQL> SET SERVEROUTPUT ON;
SQL> REMARK 循环控制loop和end loop ; 之间的语句将无限次的执行,如果要跳出则使用exit;
SQL> remark 语法:loop exit when 条件表达式;执行语句 ; end loop;
SQL> remark 案例:累加的例子
SQL> declare
2 cou int default 10;
3 result int :=0;
4 begin
5 DBMS_OUTPUT.PUT_LINE('循环开始.....');
6 LOOP
7 EXIT WHEN COU>20;
8 result :=result + cou;
9
10 DBMS_OUTPUT.PUT_LINE('进入循环..'||cou||'结果是:'||result);
11 cou :=cou+1;
12 end loop;
13 dbms_output.put_line('最后的结果是:'||result);
14 end;
15 /
循环开始.....
进入循环..10结果是:10
进入循环..11结果是:21
进入循环..12结果是:33
进入循环..13结果是:46
进入循环..14结果是:60
进入循环..15结果是:75
进入循环..16结果是:91
进入循环..17结果是:108
进入循环..18结果是:126
进入循环..19结果是:145
进入循环..20结果是:165
最后的结果是:165
PL/SQL procedure successfully completed.
SQL> remark 循环控制还可以使用for 循环和while 进行循环,这两种循环都是以loop循环作为基础
SQL> remark 语法:for 变量 in 起始值..结束值 loop 执行语句; end loop;
SQL> remark 注:for循环的语法控制中,变量的定义不用声明,变量的边界值都会进入循环;.......
案例:
SQL> declare
2 result int :=0;
3 begin
4 dbms_output.put_line('循环开始...');
5 for cou in 10..20
6 loop
7 result :=result+cou;
8 dbms_output.put_line('进入循环..'||cou||'结果是:'||result);
9 end loop;
10 dbms_output.put_line('循环结束:'||result);
11 end;
12 /
循环开始...
进入循环..10结果是:10
进入循环..11结果是:21
进入循环..12结果是:33
进入循环..13结果是:46
进入循环..14结果是:60
进入循环..15结果是:75
进入循环..16结果是:91
进入循环..17结果是:108
进入循环..18结果是:126
进入循环..19结果是:145
进入循环..20结果是:165
循环结束:165
PL/SQL procedure successfully completed.
SQL> remark while 的循环用法
SQL> remark 语法:while 条件表达式 loop 执行语句; end loop;
SQL> remark ................................................................
SQL> remark 跳转控制:标示跳转的指令是 goto
SQL> remark 语法:执行语句 <<节名称>> 执行语句;
SQL> remark 如果只希望 节 作为一个跳转的点,并不执行任何语句,可以使用null,使用return 结束
程序
SQL> remark 跳转的案例:
SQL> declare
2 sumsal emp.sal%type;
3 begin
4 select sum(sal) into sumsal from emp where deptno=30;
5 if sumsal>2000 then
6 goto first;
7 elsif sumsal>3000 then
8 goto second;
9 else
10 goto third;
11 end if;
12
13 <<first>>
14 dbms_output.put_line('first'||sumsal);
15 return;
16 <<second>>
17 dbms_output.put_line('second'||sumsal);
18 return;
19 <<third>>
20 null;
21 end;
22 /
first9400
PL/SQL procedure successfully completed.
SQL> remark ................................................................
SQL> remark 记录:PS记录只有一行,但是由多列,有点类型于程序中的结构
SQL> remark 记录的定义:type <类型名> is record <列名 1 类型 1,....列名n 类型n,>
SQL> remark 案例:
SQL> edit;
Wrote file afiedt.buf
1 declare
2 type empsub is record (myeno emp.empno%type,myename emp.ename%type,mysa emp.sal
%type);
3 mycord empsub;
4 begin
5 select empno,ename,sal into mycord from emp where empno = 7369;
6 dbms_output.put_line('编号1:'||mycord.myeno);
7* end;
SQL> /
编号1:7369
PL/SQL procedure successfully completed.
SQL> remark empsub 定义了一种数据类型
SQL> remark..................................................................
SQL> remark 异常:一种为内部异常,一种为用户自定义异常;
SQL> remark PS中要捕获异常,必须使用系统所给的异常名称,而不是异常的编号;
SQL> declare
2 newsal emp.sal%type;
3 begin
4 select sal into newsal from emp where deptno = 30;
5 dbms_output.put_line('工资是:'||newsal);
6 exception
7 when too_many_rows then
8 dbms_output.put_line('数据插入记录太多');
9 end;
10 /
数据插入记录太多
PL/SQL procedure successfully completed.
SQL> remark 自定义异常
SQL> remark declare 异常名 exception; ----声明异常
SQL> remark raise 异常名; --抛出异常
SQL> remark exception when 异常名 then 。....-- 捕获异常 并进行相关的处理
SQL> remark RAISE_APPLICATION_ERROR(错误编码,错误消息);
SQL> remark 错误编码:用户为抛出异常指定的编号,-20000和-20999之间
SQL> remark 错误消息:是用户定义的错误的消息,消息的长度是2048;
SQL> declare
2 thesal emp.sal%type;
3 begin
4 select sal into thesal from emp where empno=7369;
5 if thesal>2000 then
6 raise_application_error(-20001,'工资不再调整的范围');
7 end if;
8 end;
9 /
PL/SQL procedure successfully completed.
SQL> remark ................................................................
SQL> remark 动态SQL ,动态的构造一个查询语句;语法:
SQL> remark execute immediate 'SQL语句字符串';
SQL> remark 创建一个表:
SQL> begin
2 execute immediate
3 'create table hopecalss(claid number,calName char(6))';
4 end;
5 /
PL/SQL procedure successfully completed.
SQL> remark 动态的SQL进行参数的传递 有时候进行结果的变量;
SQL> edit
Wrote file afiedt.buf
1 declare
2 sqlstring varchar2(200);
3 dept_id number(2):=50;
4 dept_name varchar(14):='personnel';
5 location varchar(13):='develop';
6 begin
7 --演示的是usingredients字句的execute immediate
8 sqlstring :='insert into dept values(:1,:2,:3)';
9 execute immediate sqlstring using dept_id,dept_name,location;
10* end;
11 /
PL/SQL procedure successfully completed.
SQL> spool off;
[color=orange][/color][size=x-small][/size]
发表评论
-
Oracle 11G 数据库卸载
2013-10-08 21:46 10101、 开始->设置->控制面板->管理工具->服务 停止所有O ... -
ORACL系统用户密码忘了解决方案
2013-09-23 13:38 1020忘记密码的情况下输入下列命令: 无登陆进入SQL>:s ... -
Oracle 11G 复习大纲
2013-06-19 00:38 1578一、 第一章 Oracle 入门: 1. 账号/密码:syst ... -
Oracle 触发器
2013-04-09 15:31 675SQL> set serveroutput on; S ... -
Oracle Java连接数据库
2013-04-07 21:28 919方法一:通过Oracle数据库驱动程序:ojdbc6.jar( ... -
Oracle 内置子程序简介
2013-04-07 21:27 1032SQL> set serveroutput on; S ... -
Oracle 内置子程序简介
2013-03-20 12:41 99大学生兼职支持:http://sunzonebusiness. ... -
Oracle 触发器
2013-03-20 12:40 18大学生创业支持:http://sunzonebusiness. ... -
Oracle Java连接数据库
2013-03-19 15:15 198大学生创业支持:http://sunzonebusiness. ... -
Oracle PL/SQL 事务
2013-03-14 08:26 1215SQL> set serveroutpu on; SQL ... -
Oracle PL/SQL 函数
2013-03-14 08:25 1241SQL> remark 函数:函数的定义 SQL> ... -
Oracle PL/SQL 包的使用
2013-03-14 08:23 1316SQL> set serveroutput on; SQ ... -
Oracle PL/SQL 存储过程
2013-03-14 08:22 977SQL> remark 过程、函数、包、触发器都是带有名 ... -
Oracle 游标-引用游标
2013-03-14 08:21 1270SQL> set severoutput on; SP2 ... -
Oracle 游标 静态游标
2013-03-08 17:40 919[size=medium][/size]SQL> set ... -
Oracle 数据库对象 索引
2013-03-08 17:39 1007SQL> remark 索引是关系型数据库中用于加快数据 ... -
Oracle 数据库对象-视图
2013-03-08 17:39 952SQL> remark ..............视图 ... -
Oracle 11g 数据库对象-序列
2013-03-08 17:37 1267SQL> remark 序列:Oracle中按照一定规则 ... -
Oracle 11g 数据库对象-同义词
2013-03-08 17:36 1088SQL> remark 同义词:Oracle为了方便对数 ... -
PL/SQL
2013-03-07 09:22 829SQL> remark SQL> remark p ...
相关推荐
8. **索引和性能优化**:手册可能也会涉及如何利用索引来提高PL/SQL程序的执行效率,以及如何分析和优化SQL语句。 9. **并发和锁定**:在多用户环境下,理解并发控制和锁定机制是必要的。手册可能会讨论如何处理...
1. **编程能力**:PL/SQL允许编写包含控制结构(如循环、条件语句)和异常处理的程序块,这些块可以存储在数据库中并按需调用,提高了数据库应用的灵活性和复杂性。 2. **数据处理**:通过PL/SQL,用户可以直接对...
- **存储过程**:一组PL/SQL语句,可重复调用,提高代码复用性。 - **函数**:类似于过程,但返回一个值,可用于计算或验证。 - **触发器**:在特定数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行的PL/...
标题中的“基本SQL语句及PL/SQL语句”涵盖了关系数据库管理中两个重要的概念:SQL(Structured Query Language)和PL/SQL(Procedural Language/SQL)。SQL是用于管理和处理关系数据库的标准语言,而PL/SQL是Oracle...
在Oracle数据库中,PL/SQL提供了丰富的控制结构,如循环、条件判断,以及异常处理机制,使得开发者能够编写复杂的业务逻辑。例如,`IF...THEN...ELSIF...ELSE`语句用于实现条件分支,`WHILE`和`FOR`循环则可以处理...
7. **性能优化**:提供性能分析工具,如执行计划分析、SQL Tuning Advisor等,帮助优化SQL语句,提高数据库运行效率。 8. **版本控制集成**:与其他版本控制系统(如Git、SVN)无缝集成,便于版本管理和代码协同。 ...
2. **函数**:函数与存储过程类似,但它们必须返回一个值,可以被其他SQL语句或PL/SQL代码调用。 3. **触发器**:触发器是数据库事件(如INSERT、UPDATE或DELETE操作)自动触发的PL/SQL代码,可以用来实现数据完整...
执行部分是程序的主要逻辑,包含SQL语句和PL/SQL语句;异常处理部分则用于捕获和处理运行时可能出现的错误。 在实际应用中,PL/SQL的存储过程和函数是常见的使用场景。存储过程是一组预编译的PL/SQL语句,可以被多...
过程是PL/SQL中一种用来封装逻辑的单元,它包含了一系列的SQL语句和PL/SQL代码,可以执行特定的任务。过程与匿名程序块的区别在于它具有名称和参数,能够被重复调用。创建过程的语法中涉及到参数模式,包括IN、OUT、...
通过上述对Oracle 9i PL/SQL程序设计笔记的总结,我们可以看到PL/SQL作为一种强大的数据库编程语言,提供了丰富的功能来支持数据处理、事务控制及业务逻辑的实现。掌握PL/SQL的不同块类型及其使用方法对于开发高效、...
- **SQL语句的执行**:介绍如何在PL/SQL代码中嵌入SQL语句,包括查询、插入、更新和删除操作。 - **动态SQL**:探讨如何构造和执行动态SQL语句,这对于需要根据运行时条件生成SQL的情况非常有用。 - **SQL*Plus命令*...
在Oracle PL/SQL中,我们可以通过使用SQL语句来与数据库进行交互,例如SELECT用于查询数据,INSERT、UPDATE和DELETE用于修改数据。PL/SQL还提供了游标(CURSOR)机制,允许我们逐行处理查询结果。此外,PL/SQL还支持...
在PL/SQL环境中可以使用的SQL语句主要包括以下几种: - **INSERT**:用于向表中插入新记录。 - **UPDATE**:用于更新现有记录。 - **DELETE**:用于删除表中的记录。 - **SELECT INTO**:用于从表中选取数据,并将...
执行部分包含了SQL语句和流程控制结构,如循环、条件判断等;异常处理部分则用于捕获和处理运行时错误。 2. **变量和数据类型**:PL/SQL支持多种数据类型,包括数值型(NUMBER、BINARY_INTEGER、PLS_INTEGER)、...
3. **流程控制**:PL/SQL提供了一系列流程控制结构,包括IF...THEN...ELSIF...ELSE语句、CASE语句、FOR循环、WHILE循环等,用于根据条件或循环执行代码。 4. **子程序**:包括函数和过程。函数返回一个值,而过程不...
5. **动态SQL**:允许在运行时构造和执行SQL语句,增强了灵活性。 **PL/SQL Developer** PL/SQL Developer是一款专为Oracle数据库开发设计的集成开发环境(IDE),它的主要功能包括: 1. **源代码编辑器**:提供...
5. **过程与函数**:过程是一组PL/SQL语句的集合,用于执行特定任务。函数与过程类似,但返回一个值。它们可以提高代码的复用性和模块化。 6. **异常处理**:PL/SQL提供了一个强大的异常处理机制,允许你定义和捕获...
* 执行部分(Executable section):是 PL/SQL 块中的指令部分,由关键字 BEGIN 开始,所有的可执行语句都放在这一部分。 * 异常处理部分(Exception section):是可选的,在这一部分中处理异常或错误。 PL/SQL 块...
5. **存储过程和函数**:存储过程是一组预编译的SQL语句,可以接收参数,返回结果。函数与之类似,但必须返回一个值。 6. **触发器**:触发器是在特定数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行的PL/...
2. SQL*Plus是Oracle提供的一个命令行工具,允许用户执行SQL语句和PL/SQL代码块,并获取查询结果。 3. PL/SQL程序单元包括过程(Procedures)、函数(Functions)、包(Packages)、触发器(Triggers)等。文档中...