`
dingqijie
  • 浏览: 102261 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

plsql

阅读更多
PL/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> 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;
  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;
是格式化输出时间的查询.
引用:http://hpjianhua.iteye.com/blog/399868
分享到:
评论

相关推荐

    PLSQL_Developer8.0绿色版64位

    PLSQL Developer是一款强大的Oracle数据库开发工具,专为PL/SQL编程语言设计,它提供了一整套集成环境,便于开发、调试、管理以及执行PL/SQL代码。标题中的"PLSQL_Developer8.0绿色版64位"指的是该版本是针对64位...

    plsql 32位下载

    PLSQL Developer是一款强大的Oracle数据库管理工具,主要针对PL/SQL语言进行开发、调试和管理。在32位操作系统环境下,用户可能需要下载适用于该系统的PLSQL Developer版本。本指南将详细介绍如何下载并安装32位...

    PLSQL Developer14用户指南

    PLSQL Developer 14用户指南 PLSQL Developer 14用户指南是Oracle公司出品的一款专业database开发工具,旨在帮助用户快速掌握PL/SQL语言编程。该指南详细介绍了PL/SQL Developer 14的安装、配置、编程和调试等方面...

    PlSql中的 CnPlugin 插件

    **PlSql中的CnPlugin插件详解** PL/SQL Developer(简称PLSQL)是一款由Allround Automations公司开发的专业Oracle数据库管理与开发工具,它为数据库管理员和开发人员提供了强大的功能,包括编写、调试、执行SQL和...

    plsql11汉化包

    PLSQL Developer是一款强大的Oracle数据库开发工具,主要用于编写、调试、执行和管理PL/SQL程序。在中文环境下,对于不熟悉英文界面的用户来说,使用英文版可能会带来不便。"plsql11汉化包"正是为了解决这个问题,...

    PLSQL14_32位

    PLSQL Developer是一款强大的Oracle数据库开发工具,主要用于编写、调试、执行和管理PL/SQL程序单元。这个"PLSQL14_32位"压缩包文件很可能是PLSQL Developer的第14版本,专为32位操作系统设计。如果你的计算机上已经...

    PLSQL安装包及解决PLSQL过期文件

    PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。... 该安装包包含了解决PLSQL过期的文件,将PLSQL安装后将解决过期的文件放到安装包中,即可解决PLSQL过期的问题。即可永久使用。

    PLSQL程序优化和性能分析方法

    PLSQL程序优化和性能分析方法 PLSQL程序优化是指在编写PLSQL程序时,为了提高程序的执行效率和性能所采取的一系列措施和技术。这些措施和技术可以帮助开发者编写高效、可靠、可维护的PLSQL程序,从而提高系统的整体...

    PLSQL Developer 8.0汉化包

    PLSQL Developer是一款强大的Oracle数据库开发工具,主要用于编写、调试、执行和管理PL/SQL代码。这个8.0版本的汉化包是专为那些需要中文界面的用户设计的,使得国内用户在使用PLSQL Developer时能更加方便地理解和...

    PLSQL 操作学习文档

    PLSQL(Procedural Language/Structured Query Language)是Oracle数据库中的一个强大工具,它结合了SQL的查询功能和过程性编程语言的特点,使得数据库管理、数据处理和应用程序开发更为便捷。"PLSQL Developer"是一...

    plsql8.0汉化包

    PLSQL Developer是一款强大的Oracle数据库开发工具,主要用于编写、调试、执行和管理PL/SQL代码。在8.0版本中,为了方便中文用户使用,官方或社区提供了汉化包,使得界面和帮助文档能够显示为中文,提高中国用户的...

    PLSQL免安装版(无需安装Oracle客户端)

    PLSQL Developer是一款强大的Oracle数据库管理工具,尤其适合于开发和管理员工进行数据库操作。这款工具以其易用性和全面的功能而闻名,它允许用户编写、测试和调试PL/SQL代码,管理表、视图、存储过程等数据库对象...

    plsql developer9.0破解版

    plsql developer9 0破解版 PLSQL Developer 9 0 0 1601破解版本使用了8 0的汉化包 可以正常使用 无需注册 默认为英文 点击菜单tools preferences appearance language 选择简体中文即可切换到简体中文界面 如果...

    PLSQL developer 64 位

    PLSQL Developer是一款强大的Oracle数据库开发工具,专为64位操作系统设计。这款工具以其直观的用户界面、高效的代码编辑器和全面的调试功能而受到广大数据库管理员和开发者的青睐。在"PLSQLDeveloper_解压版(64位...

    plsql 12 汉化版+注册Key

    PLSQL Developer是一款强大的Oracle数据库开发工具,由Allround Automations公司开发。在本文中,我们将深入探讨PLSQL Developer 12的汉化版及其与Oracle数据库的交互,以及如何使用注册Key激活软件。 PLSQL ...

    PLSQL Developer 11.0.6.1776 英文绿色注册版(免Oracle客户端

    PLSQL Developer 11.0.6.1776 英文绿色注册版(免Oracle客户端) 免安装Oracle客户端,绿色无公害。 说明: 1、点击 "启动PLSQL.exe" 即可免装oracle使用PLSQL 或者 使用qidong.bat...作用:设置临时变量,启动plsql

    PLSQL 11.0.5 绿色 汉化 X64

    PLSQL Developer是一款强大的Oracle数据库开发工具,主要用于编写、调试、测试和管理PL/SQL代码。这个版本是PLSQL Developer的11.0.5更新,特别指出为绿色版,意味着它是一个便携式版本,无需安装即可直接使用,且已...

    plsql批量导入数据

    在Oracle数据库环境中,PL/SQL Developer(简称PLSQL)是一种常用的工具,用于编写、调试和管理PL/SQL代码。当我们需要处理大量数据导入任务时,PLSQL提供了多种方法来实现批量导入,这些方法高效且灵活。本文将详细...

    PLSQL 绿色版_免安装ORACLE.zip

    PLSQL Developer是一款强大的Oracle数据库管理工具,主要用于编写、调试、执行和管理PL/SQL程序。在给定的压缩包文件“PLSQL 绿色版_免安装ORACLE.zip”中,用户可以找到一种无需正式安装Oracle客户端即可使用PLSQL ...

    plsql64位系统

    PLSQL Developer是一款强大的Oracle数据库开发工具,专为64位操作系统设计。这款工具以其直观的用户界面、高效的代码编辑和调试功能,深受数据库管理员和开发人员喜爱。在64位系统上使用PLSQL Developer,可以充分...

Global site tag (gtag.js) - Google Analytics