`

Oracle PL/SQL编程

 
阅读更多

1、变量
变量首字符必须是字母;最多30个字符;不能与表、列同名;一行声明一个变量;含_,$,#,不分大小写。

变量类型
binary_integer:整数,用于计数
number:数值
char:定长字符串
varchar2:变长字符串
date:日期
long:长字符串,最长2G
boolean:布尔类型,true/false/null,不能在dbms_output中输出

变量声明
declare
v_temp number(1);
v_count binary_integer := 0;
v_sal number(7, 2) := 4000.0;
v_date date := sysdate;
v_pi constant number(3, 2) := 3.14;
v_valid boolean := false;
v_name varchar2(20) not null := 'MyName';
begin
--||拼接为串
dbms_output.put_line('v_name 的值为:'||v_name||',v_sal 的值为:'||v_sal);
end;
/

默认不显示输出信息,设置:
set serveroutput on size 10000 --最多支持1M
L --显示语句块
/  --执行
save c:/plsql_01.txt
dbms_output.put_line('Hello World!');
dbms_output.put('string');
dbms_output.new_line;
@ c:/plsql_01.txt
行注释:--
块注释:/* ... */


(1)字段类型

declare
v_sal emp.sal%type;
begin
select sal into v_sal from emp where empno = 7369;
if (v_sal < 1200) then
dbms_output.put_line('low');
elsif(v_sal <2000) then --elsif 而不是 elseif
dbms_output.put_line('middle');
else
dbms_output.put_line('high');
end if;
end;
/

(2)数组类型
declare
type type_table_emp_empno is table of emp.empno%type index by binary_integer;
v_empnos type_table_emp_empno;
begin
v_empnos(0) := 7369;
v_empnos(-1) := 9999;
dbms_output.put_line(v_empnos(-1));
end;
/

(3)记录类型
支持select语句的返回值,使用记录可以将一行数据看成一个单元处理。

declare
type myrecord is record(
deptno dept.deptno%TYPE, --number,使用与dept表deptno相同类型和长度
dname varchar2(14),
loc varchar2(13)
);
real_record myrecord;
begin
select deptno,dname,loc into real_record from dept where deptno=10;
dbms_output.put_line(real_record.deptno||','||real_record.dname||','||real_record.loc);
end;
/
只能返回一行,不能返回多行。

简捷方式:
declare
myrec dept%ROWTYPE; --使得myrecord与dept表一行的定义相同,每个元素使用列名。
begin
select * into myrec from dept where deptno=10; --或者
select deptno,dname,loc into myrec from dept where deptno=10;
dbms_output.put_line(myrec.deptno||','||myrec.dname||','||myrec.loc);
end;
/

2.查询语句
PL/SQL中的select语句必须返回一条记录且只返回一条记录,返回多行数据或没有返回数据均报错。

定义列类型
declare
v_name emp.ename%type;
v_sal emp.sal%type;
begin
select ename, sal into v_name, v_sal from emp where empno = 7369;
dbms_output.put_line(v_name ||'-'|| v_sal);
end;
/

定义行类型
declare
v_temp emp%rowtype;
begin
select * into v_temp from emp where empno=7369;
dbms_output.put_line(v_temp.ename || ' ' || v_temp.empno);
end;
/

保留变量 :sql%rowcount
declare
v_deptno dept.deptno%type := 10;
v_count number;
begin
update emp set sal = sal/2 where deptno=v_deptno;
--select deptno into v_deptno from emp where deptno =v_deptno;
--select count(*) into v_count from emp;
dbms_output.put_line(sql%rowcount || '条记录被影响!');
rollback;
end;
/
select empno,ename,sal from emp where deptno=10;

3.DDL语句
begin
execute immediate 'create table tsql (id number(5),sql varchar2(100) default ''select * from emp;'')';
end;
/

4、分支语句
--if分支
declare
a number;
b varchar2(10);
begin
a:=2;
if a=1 then
b:='A';
elsif a=2 then
b:='B';
else
b:='C';
end if;
dbms_output.put_line('b的值为:'||b);
end;
/
--case分支
declare
a number;
b varchar2(10);
begin
a:=2;
case
when a=1 then b:='A';
when a=2 then b:='B';
else b:='C';
end case;
dbms_output.put_line('b的值为:'||b);
end;
/

5.循环语句
(1)loop循环
declare
i binary_integer := 1;
begin
loop
dbms_output.put_line(i);
i := i + 1;
exit when ( i>= 11);
end loop;
end;
/

(2)while循环
declare
i binary_integer := 1;
begin
while i < 11 loop
dbms_output.put_line(i);
i := i + 1;
end loop;
end;
/

(3)for循环
begin
for k in 1..10 loop
dbms_output.put_line(k);
end loop;
for k in reverse 1..10 loop
dbms_output.put_line(k);
end loop;
end;
/

6.错误处理
--除0异常
declare
v_num number := 0;
begin
v_num := 2/v_num;
dbms_output.put_line(v_num);
exception
when others then
dbms_output.put_line('error');
end;
/
--select异常
declare
test varchar2(10);
begin
select dname into test from dept where deptno=1;
dbms_output.put_line(test);
exception
when NO_DATA_FOUND then
dbms_output.put_line('没有找到数据');
end;
/

--多个异常
declare
v_temp number(4);
begin
select empno into v_temp from emp where deptno = 10;
exception
when too_many_rows then
dbms_output.put_line('太多记录了');
when others then
dbms_output.put_line('error');
end;
/

--自定义异常
declare
tname varchar2(10);
e exception;
begin
select dname into tname from dept where deptno=10;
if tname<>'SALES' then
raise e;
end if;
dbms_output.put_line(tname);
exception
when e then
dbms_output.put_line('没有找指定部门的数据');
end;
/

--记录错误的方法
create sequence seq_errorlog_id start with 1 increment by 1;
create table errorlog
(
id number primary key,
errcode number,
errmsg varchar2(1024),
errdate date
);

declare
v_deptno dept.deptno%type := 10;
v_errcode number;
v_errmsg varchar2(1024);
begin
delete from dept where deptno = v_deptno;
commit;
exception
when others then
rollback;
v_errcode:= SQLCODE; --出错代码
v_errmsg := SQLERRM; --出错信息
insert into errorlog values (seq_errorlog_id.nextval, v_errcode, v_errmsg, sysdate);
commit;
end;
/
select to_char(errdate,'yyyy-mm-dd hh24:mi:ss') from errorlog;

分享到:
评论

相关推荐

    Oracle PL/SQL编程及最佳实践

    Oracle PL/SQL 编程及最佳实践 Oracle PL/SQL 是一种高级编程语言,用于开发 Oracle 数据库中的存储过程、函数和触发器。PL/SQL language 提供了强大的编程能力,可以实现复杂的业务逻辑,并且与 Oracle 数据库紧密...

    oracle pl/sql 编程

    《Oracle Database 10g PL/SQL编程》一书由Scott Urman、Ron Hardman和Michael McLaughlin共同编写,由McGraw-Hill/Osborne出版,是Oracle数据库编程领域的一部经典之作。该书深入浅出地介绍了Oracle Database 10g...

    Oracle PL/SQL编程详解

    Oracle PL/SQL编程详解是Oracle数据库开发人员必须掌握的技术之一。Oracle PL/SQL是一种用于Oracle数据库系统的程序设计语言,它是SQL语言的扩展,包含了许多能增加程序可读性和模块化的特性。PL/SQL代码被编译成...

    Oracle PL/SQL编程基础

    ### Oracle PL/SQL编程基础详解 #### 一、PL/SQL概述 PL/SQL,即Procedural Language for SQL,是Oracle数据库专有的扩展性语言,用于增强SQL的功能,使其具备编程语言的能力。通过PL/SQL,开发者可以编写复杂的...

    Oracle PL/SQL学习官方教材

    Oracle PL/SQL是一种强大的编程语言,它将SQL与过程编程语言的特性相结合,为数据库开发提供了丰富的功能。...通过深入学习这本教材,你将能够掌握Oracle PL/SQL编程,从而有效地设计和实现数据库解决方案。

    Oracle PL/SQL 编程手册,chm

    Oracle PL/SQL 编程手册Oracle PL/SQL 编程手册

    绝对好的 oracle pl/sql 编程

    ### 绝对好的 Oracle PL/SQL 编程 #### 一、PL/SQL 程序设计简介 ##### 1.1 SQL 与 PL/SQL **1.1.1 什么是 PL/SQL?** PL/SQL(Procedure Language for SQL)是一种专门为 Oracle 数据库设计的过程化语言。它结合...

    Oracle PL/SQL程序设计(第5版)(上下册)

    #### 一、PL/SQL编程基础 - **PL/SQL简介**:PL/SQL(Procedural Language for SQL)是Oracle数据库的一种内嵌式过程化语言,用于增强SQL的功能。它允许在SQL查询的基础上添加控制流语句、变量定义、错误处理等特性...

    oracle pl/sql从入门到精通 配套源代码

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL(结构化查询语言)的数据库操作功能与PL/SQL的程序设计特性,广泛应用于Oracle数据库的开发和管理。这本书"Oracle PL/SQL从入门到精通"的配套源代码,显然是为了...

    Oracle PL/SQL programming(5th Edition)

    《Oracle PL/SQL Programming》(第五版)是一本全面而深入的指南,旨在帮助读者掌握Oracle PL/SQL编程语言的核心技术和最佳实践。无论是对于初学者还是有经验的开发人员,这本书都是一个宝贵的资源。通过阅读本书,...

    Oracle PL/SQL程序设计(第5版)(套装上下册)

    《Oracle PL/SQL程序设计(第5版)(套装上下册)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何...

    Oracle PL/SQL实战(待续)

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计特性,是Oracle数据库系统中用于创建存储过程、函数、触发器和包的主要工具。在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入...

    oracle pl/sql 实例精解(中文原书第4版)

    本书是一本逐步分解的,详尽的pl/sql编程教程,使用真实场景的试验、范例和练习来介绍读者所需的pl/sql编程技能,涵盖oracle 11g的最新特性。作者的写作手法源自于在哥伦比亚大学教授pl/sql编程技术的经验,深度...

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

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

    Oracle PL/SQL实例精解 数据库建立代码

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据库操作能力和PL/SQL的结构化编程特性,使得数据库开发者能够创建复杂的应用程序和数据库逻辑。在"Oracle PL/SQL实例精解 数据库建立代码"中,我们将深入探讨...

    ORACLE PL/SQL从入门到精通

    循环语句是PL/SQL编程中用来重复执行一组语句的结构,包括loop、while、for三种形式,它们各自有不同的使用场景和语法。 分支条件语句在PL/SQL中用来根据不同的条件执行不同的代码分支,主要包括CASE表达式和if-...

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

    《Oracle PL/SQL专家指南-高级PL/SQL解决方案的设计与开发》是一本深入探讨Oracle数据库中的PL/SQL编程的专业书籍。PL/SQL是Oracle数据库特有的编程语言,它结合了SQL的查询能力与过程式编程语言的功能,使得数据库...

Global site tag (gtag.js) - Google Analytics