`

qlsql 学习实例代码1

阅读更多
准备工作:
create table DEPT
(
DEPTNO NUMBER(2) not null,
DNAME VARCHAR2(14),
LOC    VARCHAR2(13)
)

alter table DEPT add constraint PK_DEPT primary key (DEPTNO);
insert into DEPT (DEPTNO, DNAME, LOC)
values (10, 'ACCOUNTING', 'NEW YORK');
insert into DEPT (DEPTNO, DNAME, LOC)
values (20, 'RESEARCH', 'DALLAS');
insert into DEPT (DEPTNO, DNAME, LOC)
values (30, 'SALES', 'CHICAGO');
insert into DEPT (DEPTNO, DNAME, LOC)
values (40, 'OPERATIONS', 'BOSTON');
commit;
create table EMP
(
EMPNO    NUMBER(4) not null,
ENAME    VARCHAR2(10),
JOB      VARCHAR2(9),
MGR      NUMBER(4),
HIREDATE DATE,
SAL      NUMBER(7,2),
COMM     NUMBER(7,2),
DEPTNO   NUMBER(2)
)

alter table EMP add constraint PK_EMP primary key (EMPNO);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7369, 'SMITH', 'CLERK', 7902, to_date('17-12-1980', 'dd-mm-yyyy'), 800, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7499, 'ALLEN', 'SALESMAN', 7698, to_date('20-02-1981', 'dd-mm-yyyy'), 1600, 300, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7521, 'WARD', 'SALESMAN', 7698, to_date('22-02-1981', 'dd-mm-yyyy'), 1250, 500, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7566, 'JONES', 'MANAGER', 7839, to_date('02-04-1981', 'dd-mm-yyyy'), 2975, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7654, 'MARTIN', 'SALESMAN', 7698, to_date('28-09-1981', 'dd-mm-yyyy'), 1250, 1400, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7698, 'BLAKE', 'MANAGER', 7839, to_date('01-05-1981', 'dd-mm-yyyy'), 2850, null, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7782, 'CLARK', 'MANAGER', 7839, to_date('09-06-1981', 'dd-mm-yyyy'), 2450, null, 10);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7788, 'SCOTT', 'ANALYST', 7566, to_date('19-04-1987', 'dd-mm-yyyy'), 3000, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7839, 'KING', 'PRESIDENT', null, to_date('17-11-1981', 'dd-mm-yyyy'), 5000, null, 10);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7844, 'TURNER', 'SALESMAN', 7698, to_date('08-09-1981', 'dd-mm-yyyy'), 1500, 0, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7876, 'ADAMS', 'CLERK', 7788, to_date('23-05-1987', 'dd-mm-yyyy'), 1100, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7900, 'JAMES', 'CLERK', 7698, to_date('03-12-1981', 'dd-mm-yyyy'), 950, null, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7902, 'FORD', 'ANALYST', 7566, to_date('03-12-1981', 'dd-mm-yyyy'), 3000, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7934, 'MILLER', 'CLERK', 7782, to_date('23-01-1982', 'dd-mm-yyyy'), 1300, null, 10);
======================以上为准备工作

Connected to Oracle Database 10g Express Edition Release 10.2.0.1.0
Connected as system
------------------------------------ 简单的plsql块执行的过程
SQL> declare
  2  x varchar2(10);           --定义变量 可以附初值。例子: x varchar2(10) := 'abcd';
  3  begin
  4  x:= 'this is ..';
  5  dbms_output.put_line('x的值为:'||x);
  6  end;
  7  /

PL/SQL procedure successfully completed
                   --执行成功,没有结果显示是因为默认的serveroutput 是关闭的           
SQL> ?set         --查看set 命令
SQL> set serveroutput on size 10000      --打开显示结果开关 并设置显示的字节数 最多是一百万 其中的size 10000 可省略
                                        
SQL> declare                             --重新执行
  2  x varchar2(10);
  3  begin
  4  x := 'this is';
  5  dbms_output.put_line('x的值为:'|| x);
  6  end;
  7  /

x的值为:this is

PL/SQL procedure successfully completed

-------------------------------------------if 语句
SQL> declare
  2  a number;
  3  b varchar2(10);
  4  begin
  5  a:=2;
  6  if a=1 then
  7  b:='A';
  8  elsif a=2 then
  9  b:='B';
10  else
11  b:='C';
12  end if;
13  dbms_output.put_line('b='||b);
14  end;
15  /

b=B

PL/SQL procedure successfully completed
---------------------------------------------case语句
SQL> declare
  2  a number;
  3  b varchar2(10);
  4  begin
  5  a:=2;
  6  case
  7  when a=1 then b:='A';
  8  when a=2 then b:='B';
  9  when a=3 then b:='C';
10  else
11  b:='others';
12  end case;
13  dbms_output.put_line('b='||b);
14  end;
15  /

b=B

PL/SQL procedure successfully completed
--------------------------------------------loop循环
SQL> declare
  2  x number;
  3  begin
  4  x:=0;
  5  loop
  6  x:=x+1;
  7  if x  >= 3 then
  8  exit;
  9  end if;
10  dbms_output.put_line('inner: x='||x);
11  end loop;
12  dbms_output.put_line('outer: x='||x);
13  end;
14  /

x=1
x=2
outer: x=3

PL/SQL procedure successfully completed

SQL> declare
  2  x number;
  3  begin
  4  x:=0;
  5  loop
  6  x:=x+1;
  7  exit when x >= 3 ;          ----替换上面的if语句
10  dbms_output.put_line('inner: x='||x);
11  end loop;
12  dbms_output.put_line('outer: x='||x);
13  end;
14  /

x=1
x=2
outer: x=3

PL/SQL procedure successfully completed
--------------------------------------------- while....loop 语句 
SQL> declare
  2  x number;
  3  begin
  4  x:=0;
  5  while x<=3 loop
  6  x:=x+1;
  7  dbms_output.put_line('内:x='||x);
  8  end loop;
  9  dbms_output.put_line('外:x='||x);
10  end;
11  /

内:x=1
内:x=2
内:x=3
内:x=4
外:x=4

PL/SQL procedure successfully completed
--------------------------------------------- for循环
SQL> begin
  2  for i in 1..5 loop                    --for i in reverse 1..5 loop  这样输出结果是从大到小
  3  dbms_output.put_line('i='||i);
  4  end loop;
  5  dbms_output.put_line('end of for loop');
  6  end;
  7  /

i=1
i=2
i=3
i=4
i=5
end of for loop

PL/SQL procedure successfully completed
---------------------------------------------goto跳转 的循环
SQL> declare
  2  x number;
  3  begin
  4  x:=0;
  5  <<repeat_loop>>           --做一个跳转的标签
  6  x:=x+1;
  7  dbms_output.put_line(x);
  8  if x<3 then
  9  goto repeat_loop;        --goto 跳转    
10  end if;
11  end;
12  /

1
2
3

PL/SQL procedure successfully completed
--------------------------------------------------exception 处理
SQL> declare
  2  test varchar2(10);
  3  begin
  4  select dname INTO test from dept where deptno = 5;
  5  dbms_output.put_line(test);
  6  end;
  7  /

declare
test varchar2(10);
begin
select dname INTO test from dept where deptno = 5;
dbms_output.put_line(test);
end;

ORA-01403: no data found              -----数据库提示的错误
ORA-06512: at line 5

SQL> declare
  2  test varchar2(10);
  3  begin
  4  select dname INTO test from dept where deptno = 5;
  5  dbms_output.put_line(test);
  6  exception                         -----进行异常捕获
  7  when no_data_found then
  8  dbms_output.put_line('没有找到');     -----输出自己的提示
  9  end;
10  /

没有找到

PL/SQL procedure successfully completed
-------------------常见系统异常
dup_val_on_index     向有唯一约束的表中插入重复行
no_data_found        在一个select into 语句中无返回值
too_many_rows        select into 语句返回了多行
value_error          一个算法 转换 截断 或大小约束发生错误
zero_divide          发生被零除
----------------------------------------------------自定义异常
SQL> declare
  2  tname varchar2(10);
  3  e exception;
  4  begin
  5  select dname into tname from dept where deptno = 30;
  6  if tname <> 'SALESs' then
  7  raise e;              ------抛出异常
  8  end if;
  9  dbms_output.put_line(tname);
10  exception
11  when e then            ------捕获自定义的异常
12  dbms_output.put_line('错误,不是需要的名字');
13  end;
14  /

错误,不是需要的名字

PL/SQL procedure successfully completed
---------------------------------------------------
记录:

也叫复合变量,是有几个相关值构成的复合变量,常用于支持select语句的返回值,
使用记录可以将一行数据看成一个单元进行处理,而不必将每一列单独处理。

SQL> declare
  2  type myrecord is record(              -----------定义记录
  3  id number,                          == id emp.empno%type
  4  name varchar2(10));                 == name emp.ename%type
  5  real_record myrecord;           -------引用定义的记录
  6  begin
  7  select empno,ename into real_record from emp where empno = 7369;
  8  dbms_output.put_line(real_record.id||','||real_record.name);
  9  end;
10  /

7369,SMITH

PL/SQL procedure successfully completed

SQL> declare
  2  myrec emp%rowtype;                -------------定义一个记录里面变量和表的字段,字段类型都一样
  3  begin
  4  select * into myrec from emp where empno = 7369;
  5  dbms_output.put_line(myrec.empno||','||myrec.ename);
  6  end;
  7  /

7369,SMITH

PL/SQL procedure successfully completed

-------------------------------------------------------













2
0
分享到:
评论

相关推荐

    plsql语法编程实例

    本资料包“plsql语法编程实例”提供了一系列SQL基础语法和PL/SQL编程实例,对于学习和掌握这一技能非常有帮助。 首先,SQL(Structured Query Language)是关系型数据库管理系统中用于管理和处理数据的标准语言。其...

    PLSQL学习笔记(1-7)

    本“PLSQL学习笔记”将逐步讲解这些概念,通过实例和练习帮助读者巩固理解,进一步提升在Oracle数据库开发中的技能。无论你是初学者还是有经验的开发者,这份笔记都能提供有价值的参考。通过深入学习和实践,你将...

    plsql代码和学习资料

    总的来说,"PLSQL_code"压缩包中的内容可能是对PLSQL编程语言和Oracle 11g数据库管理系统的实战教程和实例代码,对于想深入了解和提升这方面技能的学习者来说,是非常宝贵的资源。通过深入学习和实践,你可以成为一...

    Oracle PLSQL实例精解(英文原书第4版)

    《Oracle PLSQL实例精解(英文原书第4版)》是Oracle数据库开发领域的一本经典著作,专注于讲解PL/SQL编程语言的应用。PL/SQL是Oracle数据库系统中用于处理结构化查询语言(SQL)的编程环境,它扩展了SQL的功能,使...

    ORACLE PLSQL实例精解(第4版) 中文版

    ### ORACLE PL/SQL 实例精解(第4版)知识点概述 #### 一、PL/SQL基础 **1.1 PL/SQL简介** - **定义**:PL/SQL(Procedural Language for SQL)是一种过程化语言,专门用于增强Oracle数据库的功能。它将SQL命令与...

    PLSQL编程学习资料

    PLSQL是一种专为Oracle数据库设计的结构化查询语言扩展,它结合了SQL的查询...这些基本概念构成了PLSQL编程的基础,通过学习和实践,开发者可以创建复杂的数据库应用程序,实现数据处理、业务逻辑和数据验证等功能。

    PLSQL学习基础课件PPT

    本PLSQL学习基础课件PPT旨在为初学者提供深入浅出的教程,帮助他们掌握这一强大的数据库编程工具。 首先,我们要了解PLSQL的基本结构,它由声明部分、执行部分和异常处理部分组成。声明部分包括变量、常量、游标、...

    plsql建表实例.txt

    5. **`ORI_CODE_TYPE NUMBER(1)`**: 原始代码类型,数值类型,最多1位数字。 6. **`ORI_CODE CHAR(13)`**: 原始代码,长度为13个字符。 7. **`ORI_CITY_CODE CHAR(5)`**: 原始城市代码,长度为5个字符。 8. **`DEST_...

    Oracle PLSQL语法大全及实例讲解.pdf

    Oracle PL/SQL是一种强大...通过学习和实践这些基本概念,你可以构建复杂的PL/SQL程序来管理Oracle数据库中的数据,进行数据处理和业务逻辑实现。了解并熟练掌握这些知识点对于任何Oracle数据库开发者来说都至关重要。

    PLSql循序渐进全面学习教程

    10. **PLSql调试和错误处理**:学习如何使用Oracle的调试工具,以及如何编写健壮的错误处理代码,能帮助你快速定位和解决问题。 11. **数据库链接**:数据库链接允许你在不同的Oracle实例之间进行通信,这对于...

    ORACLE_PLSQL专家指南代码

    通过深入研究这个指南中的代码实例,你可以深化对PL/SQL的理解,提升解决实际问题的能力。同时,理解数据库的内部工作原理,如何有效地与SQL交互,以及如何利用PL/SQL提供的高级功能,都是成为一个真正Oracle PL/SQL...

    PLSQL学习资料

    学习保存程序的最佳实践,确保代码安全,便于后期修改和复用。 ##### 3.3 修改程序 熟悉编辑功能,如查找替换、代码折叠等,提高代码编辑效率。 ##### 3.4 编译程序 理解编译过程,识别并解决语法错误,确保代码...

    oracle-PLSQL实例精析

    8. **性能优化**:学习如何编写高效的PL/SQL代码,减少数据库访问,利用绑定变量提升性能。 9. **事务管理**:掌握BEGIN、COMMIT、ROLLBACK语句,理解事务的概念和其在保持数据一致性中的关键角色。 10. **数据库...

    PLSQL教程

    1. "PLSql循序渐进全面学习教程--Oracle.doc":这是一个文档文件,很可能包含了逐步学习PLSQL的结构化内容,可能从基础概念开始,如变量声明、控制流程语句(IF-THEN-ELSE、CASE)、循环(LOOP、WHILE)、异常处理...

    PLSQL操作ORALCE数据库

    通过PLSQL Developer,可以进行SQL性能分析,查看执行计划,定位性能瓶颈,帮助优化SQL语句和PLSQL代码,提升数据库的运行效率。 总结来说,PLSQL是Oracle数据库编程的核心工具,结合PLSQL Developer这样的专业开发...

    PLSQL学习基础资料

    本文将深入探讨"PLSQL学习基础资料"中的关键知识点,旨在为初学者提供一个全面的入门指南。 首先,让我们从"Oracle-SQL语言基础"开始。SQL(Structured Query Language)是用于查询、更新和管理关系数据库的标准...

    Oracle PLSQL实例精解(原书第4版) 源码下载

    《Oracle PLSQL实例精解(原书第4版)》是一本深入探讨Oracle数据库编程语言PL/SQL的专业书籍。此书旨在帮助读者掌握PL/SQL的精髓,通过丰富的实例和详细解析,提升在Oracle数据库环境中的开发能力。作者在书中不仅...

    PLSQL电子书小合集

    这个“PLSQL电子书小合集”显然是一个包含了关于PLSQL学习资料的压缩包,可能包括教程、指南、实战案例等内容,对于想要深入理解和掌握PLSQL的用户来说非常有价值。 PLSQL的主要组成部分包括声明部分、执行部分和...

    plsql 实例plsql 实例plsql 实例

    PL/SQL,全称Procedural ...通过这些实例,你可以学习如何在Oracle数据库环境中编写和执行复杂的逻辑,进行数据处理和管理。实际操作时,你可以使用Oracle的SQL Developer或其他IDE工具来编写和测试PL/SQL代码。

Global site tag (gtag.js) - Google Analytics