`
hpjianhua
  • 浏览: 241587 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类

PL/SQL语法与实例

SQL 
阅读更多
PL/SQL块语法:

[DECLARE]

--declaration statements

BEGIN

--executable statements

[EXCEPTION]

--exception statements

END

PL/SQL块中的每一条语句都必须以分号结束,SQL语句是多行的,但分号表示该语句的结束.一行中可以有多条SQL语句,它们之间以分号分隔.每一个PL/SQL块由Begin或Declare开始,以End结束.注释由

--标示.

变量赋值: 用":="符号

v_num number :=10;

注:dbms_output.put_line()不能打印boolean类型的值.


第一个PL/SQL块:

SQL> begin
  2  dbms_output.put_line('Hello World!');
  3  end;
  4  /

PL/SQL 过程已成功完成。

SQL> set serveroutput on;
SQL> begin
  2  dbms_output.put_line('HelloWorld!');
  3  end;
  4  /
HelloWorld!

PL/SQL 过程已成功完成。

declare的实例:

SQL> declare
  2  v_name varchar2(20);
  3  begin
  4  v_name :='myname';
  5  dbms_output.put_line(v_name);
  6  end;
  7  /
myname

PL/SQL 过程已成功完成。

declare  exception 的实例:

SQL> declare
  2  v_num number :=0;
  3  begin
  4  v_num :=2/v_num;
  5  dbms_output.put_line(v_num);
  6  end;
  7  /
declare
*
第 1 行出现错误:
ORA-01476: 除数为 0
ORA-06512: 在 line 4


SQL> ed
已写入 file afiedt.buf

  1  declare
  2  v_num number :=0;
  3  begin
  4  v_num :=2/v_num;
  5  dbms_output.put_line(v_num);
  6  exception
  7  when others then
  8  dbms_output.put_line('error');
  9* end;
SQL> /
error

PL/SQL 过程已成功完成。

PL/SQL变量的声明规则:


常用的变量类型:

binary_integer :整数,主要用来计数而不是用来表示字段类型

number :数字类型

char :字长字符串

varchar2 :变长字符串

date :日期

long :长字符串,最长2GB

boolean :布尔类型,可以取值为true,false 和null值.


变量声明,使用%type属性

SQL> declare
  2  v_empno number(4);
  3  v_empno2 emp.empno%type;
  4  v_empno3 v_empno2%type;
  5  begin
  6  dbms_output.put_line('HPJIANHUA');
  7  end;
  8  /
HPJIANHUA

PL/SQL 过程已成功完成。

--Table 变量类型:也是 自定义的变量类型

  1  declare
  2  type type_table_emp_empno is table of emp.empno%type index by binary_integer;
  3  v_empnos type_table_emp_empno;
  4  begin
  5  v_empnos(0) :=4323;
  6  v_empnos(2) :=2342;
  7  v_empnos(-1) :=9999;
  8  dbms_output.put_line(v_empnos(-1));
  9* end;
SQL> /
9999

PL/SQL 过程已成功完成。

--Record变量类型

  1  declare
  2  type type_record_dept is record
  3  (
  4  deptno dept.deptno%type,
  5  dname dept.dname%type,
  6  loc dept.loc%type
  7  );
  8  v_temp type_record_dept;
  9  begin
10  v_temp.deptno :=52;
11  v_temp.dname :='hpjianhua';
12  v_temp.loc :='HK';
13  dbms_output.put_line(v_temp.deptno ||' '||v_temp.dname);
14* end;
SQL> /
52 hpjianhua

PL/SQL 过程已成功完成。

--使用%rowtype声明record变量

  1  declare
  2  v_temp dept%rowtype;
  3  begin
  4  v_temp.dname :='hpjianhua';
  5  v_temp.deptno :=50;
  6  v_temp.loc :='HK';
  7  dbms_output.put_line(v_temp.deptno ||' '||v_temp.dname);
  8* end;
SQL> /
50 hpjianhua

--SQL语句的使用:

  1  declare
  2  v_ename emp.ename%type;
  3  v_sal emp.sal%type;
  4  begin
  5  select ename,sal into v_ename,v_sal from emp where empno = 7369;
  6  dbms_output.put_line(v_ename || ' ' || v_sal);
  7* end;
SQL> /
SMITH 800

--sql%rowcount的使用:

  1  declare
  2  v_deptno emp2.deptno%type :=10;
  3  v_count number;
  4  begin
  5  --update emp2 set sal =sal/2 where deptno =v_deptno;
  6  --select deptno into v_deptno from emp2 where empno = 7369;
  7  dbms_output.put_line(sql%rowcount || '条记录被影响!');
  8  commit;
  9* end;
SQL> /
条记录被影响!

PL/SQL 过程已成功完成。

--PL/SQL的DDL语句:

建表:

SQL> begin
  2  execute immediate 'create table T(nn varchar2(20) default ''aaa'')';
  3  end;
  4  /

PL/SQL 过程已成功完成。

--条件的语句:

实例:

  1  declare
  2  v_sal emp.sal%type;
  3  begin
  4  select sal into v_sal from emp
  5     where empno = 7369;
  6  if(v_sal<1200) then
  7     dbms_output.put_line('low');
  8  elsif(v_sal < 2000) then
  9     dbms_output.put_line('middle');
10  else
11     dbms_output.put_line('high');
12  end if;
13* end;
SQL> /
low

PL/SQL 过程已成功完成。

--循环语句:

实例:
SQL> declare
  2  i binary_integer :=1;
  3  begin
  4  loop
  5  dbms_output.put_line(i);
  6  i :=i+1;
  7  exit when( i>=11);
  8  end loop;
  9  end;
10  /
1
2
3
4
5
6
7
8
9
10

PL/SQL 过程已成功完成。

For循环:顺序与反序

实例:

SQL> begin
  2  for k in 1..10 loop
  3  dbms_output.put_line(k);
  4  end loop;
  5
  6  for k in reverse 1..10 loop
  7  dbms_output.put_line(k);
  8  end loop;
  9  end;
10  /
1
2
3
4
5
6
7
8
9
10
10
9
8
7
6
5
4
3
2
1

PL/SQL 过程已成功完成。

错误处理:

太多记录数:

  1  declare
  2  v_temp number(4);
  3  begin
  4  select empno into v_temp from emp where deptno =10;
  5  exception
  6  when too_many_rows then
  7  dbms_output.put_line('Too many records');
  8  when others then
  9  dbms_output.put_line('error');
10* end;
SQL> /
Too many records

没有数据:

SQL>  declare
  2  v_temp number(4);
  3  begin
  4  select empno into v_temp from emp where empno = 2222;
  5  exception
  6  when no_data_found then
  7  dbms_output.put_line('No data!');
  8  end;
  9  /
No data!

下面介绍一种DBA经常使用的方法:

创建一张表:
SQL> create table errorlog
  2  (
  3  id number primary key,
  4  errcode number,
  5  errmsg varchar2(1024),
  6  errdate date
  7  );

表已创建。

再创建一序列:

SQL> create  sequence seq_errorlog_id start with 1 increment by 1;

序列已创建。

  1  declare
  2  v_deptno dept.deptno%type :=10;
  3  v_errcode number;
  4  v_errmsg varchar2(1024);
  5  begin
  6  delete from dept where deptno =v_deptno;
  7  commit;
  8  exception
  9  when others then
10  rollback;
11  v_errcode :=SQLCODE;
12  v_errmsg :=SQLERRM;
13  insert into errorlog values (seq_errorlog_id.nextval,v_errcode,v_errmsg,sys
date);
14  commit;
15* end;
SQL> /

PL/SQL 过程已成功完成。

SQL> select * from errorlog;

ID    ERRCODE
---------- ----------
ERRMSG
--------------------------------------------------------------------------------

ERRDATE
--------------
1      -2292
ORA-02292: 违反完整约束条件 (HPJIANHUA.FK_DEPTNO) - 已找到子记录
01-6月 -09


SQL> delete from dept where deptno = 10;
delete from dept where deptno = 10
*
第 1 行出现错误:
ORA-02292: 违反完整约束条件 (HPJIANHUA.FK_DEPTNO) - 已找到子记录


SQL> select to_char(errdate,'YYYY-MM-DD HH24:MI:SS') from errorlog;

TO_CHAR(ERRDATE,'YY
-------------------
2009-06-01 19:38:59

注:SQL> select to_char(errdate,'YYYY-MM-DD HH24:MI:SS') from errorlog;

是格式化输出时间的查询.

分享到:
评论

相关推荐

    Oracle Database 12c PL/SQL开发指南 实例源代码

    1. **PL/SQL基础**:PL/SQL的基础语法,如变量声明、数据类型、流程控制语句(如IF-THEN-ELSIF,FOR循环,WHILE循环)、异常处理(BEGIN-EXCEPTION-END结构)等。 2. **函数与过程**:如何定义和调用用户自定义的...

    Oracle PL/SQL 实例精解(第4版涵盖Oracle 11g)+源码脚本

    Oracle PL/SQL是一种强大的编程语言,它将关系数据库的强大功能与结构化编程的优点结合在一起,是Oracle数据库系统中不可或缺的一部分。在"Oracle PL/SQL 实例精解(第4版涵盖Oracle 11g)+源码脚本"中,读者可以深入...

    Oracle PL/SQL实例编程(PL/SQL经典书籍)

    1. **基础语法**:PL/SQL是过程化SQL,它包含声明部分、执行部分和异常处理部分。声明部分用于定义变量、常量和游标;执行部分包含了SQL语句和流程控制结构,如循环、条件判断等;异常处理部分则用于捕获和处理运行...

    oracle pl/sql实例精讲student数据库模式数据和表脚本

    在"student"数据库模式中,我们可能会用到以下PL/SQL语法: 1. **DDL(Data Definition Language)**:用于创建和修改数据库对象,如表、视图、索引等。例如,创建"students"表的SQL语句可能是这样的: ```sql ...

    PL/SQL 语法手册

    7. **应用实例**:提供了实际的代码示例,帮助读者理解并应用PL/SQL语法。 通过这份手册,读者不仅可以学习到SQL的基础操作,还能深入理解PL/SQL的高级特性,从而更高效地进行数据库开发和管理。手册中的每一个章节...

    Oracle PL/SQL专家指南-高级PL/SQL解决方案的设计与开发

    1. **PL/SQL基础**:涵盖PL/SQL的基本语法,包括变量声明、常量定义、条件语句(IF-THEN-ELSIF-ELSE)、循环结构(WHILE, FOR)、异常处理(BEGIN-EXCEPTION-END)以及子程序(PROCEDURE和FUNCTION)的创建与调用。...

    Oracle PL/SQL程序设计(第5版)(下册)第二部分

    第5版是基于Oracle数据库11g的R1、R2两个版本的最新版,包含了语法、建议、大量实例和许多新的信息。 ?了解新特征,包括基于版本的重定义功能、函数结果缓存功能、CONTINUE语句、复合触发器和针对大对象的...

    PL/SQL Developer 7.0

    它详细阐述了PL/SQL语法、编程最佳实践以及如何充分利用开发环境的各项功能。通过阅读此指南,开发者可以了解如何创建高效的PL/SQL代码,避免常见陷阱,并掌握高级特性的应用。 四、文件“PLSQLDev7.0.pdf” 这个...

    Oracle PL/SQL学习官方教材

    Oracle PL/SQL是一种强大的编程语言,它将SQL与过程编程语言的特性相结合,为数据库开发提供了丰富的功能。在Oracle数据库环境中,PL/SQL是开发高效、可靠和可维护的数据库应用程序的关键工具。以下是对"Oracle PL/...

    oracle pl sql 实例精解 源代码

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与Procedural Language的控制结构,被广泛用于Oracle数据库的开发和管理。本资料集是"Oracle PL/SQL实例精解",提供了丰富的源代码示例,帮助读者深入...

    pl/sql developer 用户指南中文版

    3. 源代码编辑器:它提供语法高亮、自动完成、错误检查等功能,使得编写PL/SQL代码更为便捷。同时,还支持代码折叠、模板和自定义键绑定,提高编码效率。 4. 调试器:内置的调试器允许用户设置断点、单步执行、查看...

    PL/SQL免安装版

    PL/SQL是Oracle数据库系统中的一个关键组件,它是一种结合了SQL语言与过程编程的语言,专为数据库管理和开发设计。PL代表Procedural Language(过程语言),SQL则是Structured Query Language(结构化查询语言)。...

    oracle_oracle_oraclepl/sql_

    通过阅读《Oracle PL/SQL》这本书,法语读者可以系统地学习到上述内容,并通过实例和练习提升自己的编程技能。这本书将帮助读者深入理解Oracle数据库的编程精髓,提升数据库管理与应用开发的能力。

    pl/sql开发工具

    5. **版本控制集成**:PL/SQL Developer可以与多种版本控制系统(如Git、SVN)集成,便于团队协作和代码版本管理。 6. **报表和图表**:工具还提供了一些报表生成功能,可以帮助用户分析数据库性能,生成对象依赖...

    ORACLE PL/SQL 程序设计(第五版)

    这本书旨在帮助读者掌握PL/SQL的基本概念、语法和高级特性,以便在实际工作中编写高效、可靠的数据库应用程序。以下是基于该书及可能包含的源码文件"OPP5.WEB.CODE"的详细知识点解析: 1. **PL/SQL基础**:PL/SQL是...

    pl/sql developer

    1. PL/SQL编程环境:PL/SQL Developer提供了一个集成的开发环境(IDE),支持PL/SQL语法高亮、自动完成、代码折叠等特性,使得编写PL/SQL代码更加高效。它还有内置的错误检查功能,可以在编写过程中及时发现语法错误...

    《精通Oracle PL/SQL》源码

    书中提供的源码示例是学习和理解PL/SQL语法、功能以及最佳实践的重要资源。 在"2174_MasteringPLSQL_CODE"这个压缩包文件中,你将找到一系列与Oracle PL/SQL相关的代码实例,涵盖了以下几个关键知识点: 1. **基础...

    Oracle PL/SQL by Example(4th Edition)

    PL/SQL是Oracle数据库提供的一个内置编程语言,它将SQL的查询能力与过程编程语言的控制结构相结合,使得开发者能够创建复杂的数据处理逻辑和业务规则。在本书中,你将了解到: 1. **基础语法**:学习PL/SQL的基本...

    PL/SQL使用说明书(完整版)

    这份“PL/SQL使用说明书(完整版)”应该包含了从基础到高级的全方位指导,包括语法、控制结构、异常处理、游标、存储过程、函数、包、触发器等内容。 1. **基础概念** - **PL/SQL块**:PL/SQL程序的基本单元是块...

    pl/sql免安装版

    1. **代码编辑器**:集成的PL/SQL编辑器提供了语法高亮、自动完成、代码折叠和错误检查等功能,帮助开发者编写出规范且无误的代码。 2. **数据库连接**:用户可以轻松地连接到任何Oracle数据库实例,无论是在本地...

Global site tag (gtag.js) - Google Analytics