SQL语言简介:
数据操纵语言:Data Manipuliation Language,DML insert,update,delete
事务控件语言:Transactional Control Language,TCL commit,rollback,savepoint
数据定义语言:Data Definition Language,DDL create table,alter table…..
数据控制语言:Data Control Language,DCL grant,revoke
SQL语句编写规则
◇ SQL关键字不区分大小写
◇ 对象名和列名不区分大小写
◇ 字符值和日期值区分大小写
◇ 在应用程序中编写SQL语句时,SQL可以单行或多行同时存在
PL/SQL简介
PL/SQL是Oracle在标准SQL语言上的过程性扩展,可以嵌入SQL语句,而且允许定义变量和常量,允许过程语言结构,允许使用例外处理Oracle错误等
◇ 提高应用程序的运行性能
◇ 提供模块化的程序设计功能
◇ 允许定义标识符
◇ 具有过程语言控制结构
◇ 具有良好的兼容性
◇ 处理运行错误
--定义函数
create or replace function get_salary(pid int)
return number
is
salary number(16,2);
begin
select salary into salary from test3 where id=pid;
dbms_output.put_line(to_char(salary));
return salary;
end;
--过程控制
declare
cursor emp_cursor is select ename,sal from emp for update;
emp_record empcursor%rowtype;
begin
open emp_cursor;
loop
fetch emp_cursor into emp_record;
Exit when emp_cursor%notfound;
If emp_record.aal<200 then
Update emp set sal=sal*1.1 where current of emp_cursor;
End if;
End loop;
End;
--处理错误
Declare
Name varchar2(10);
Begin
Select ename into name from emp where empno=no;
Dbms_output.put_line(name);
Exception
When no_data_found then
Dbms_output.put_line(‘没有查询到’);
End;
Oracle 10G PL/SQL新特征
第二章 PL/SQL开发工具
SQL*PLUS
PL/DEV
TOAD
第三章 PL/SQL基础
◆了解PL/SQL块的基本结构以及PL/SQL块的分类
◆学会在PL/SQL块上定义和使用变量
◆学会在PL/SQL块中编写可执行语句
◆了解编写PL/SQL代码的指导方针
◆了解10g新特性
3.1.1 PL/SQL块结构
定义,执行,错误处理
Declare
……
Begin
……/*执行部分是必需的*/
Exception
…..
End; /*结束*/
以下是三个例子:
1. 包括执行部分的块
SQL> set serveroutput on
SQL> begin
2 dbms_output.put_line('hello world');
3 end;
4 /
hello world
2. 包括定义,执行部分的块
SQL> declare
2 vname varchar2(10);
3 begin
4 select name into vname from test3 where id=&id;
5 dbms_output.put_line(vname);
6 end;
7 /
输入 id 的值: 1
原值 4: select name into vname from test3 where id=&id;
新值 4: select name into vname from test3 where id=1;
zxf
PL/SQL 过程已成功完成。
3. 包括定义,执行,错误处理的块
SQL>
1 declare
2 vname varchar2(10);
3 begin
4 select name into vname from test3 where id=&id;
5 dbms_output.put_line(vname);
6 exception
7 when NO_DATA_FOUND then
8 dbms_output.put_line('not found info');
9* end;
SQL> /
输入 id 的值: 1
原值 4: select name into vname from test3 where id=&id;
新值 4: select name into vname from test3 where id=1;
zxf
PL/SQL 过程已成功完成。
SQL> /
输入 id 的值: 9
原值 4: select name into vname from test3 where id=&id;
新值 4: select name into vname from test3 where id=9;
not found info
PL/SQL 过程已成功完成。
3.1.2 块分类
1匿名块
是指没有名称的PL/SQL块,匿名块既可以内嵌到应用程序中,也可以在交互式环境中直接调用.
2命名块
命名块是指具有特定名称标识的PL/SQL块,命名块与匿名块非常相似,只不过在PL/SQL块前使用<<>>加以标记。
SQL> <>
2 declare
3 vname varchar2(10);
4 begin
5 <>
6 begin
7 select name into vname from test3 where id=&id;
8 end;--<>
9 dbms_output.put_line('outer pl/sql');
10 end;--<>
11 /
输入 id 的值: 1
原值 7: select name into vname from test3 where id=&id;
新值 7: select name into vname from test3 where id=1;
outer pl/sql
PL/SQL 过程已成功完成。
3子程序 (过程,函数,包)
(1) 过程,用于执行特定操作,当建立过程时,既可以指定输入参数in,也可以指定输入参数out. 创建语句
create or replace procedure procedure name
is
begin …..
end;
(2) 函数,用于返回特定数据,如开始定义的函数 get_salary(no number);返回数字型数据。
(3) 包用于逻辑组合相关的过程和函数,它由规范和包体两部分组成。
SQL> create package zxf_pkg is
2 procedure update_sal(name varchar2,newsal number);
3 function get_salary(name varchar2) return number;
4 end;
5 /
程序包已创建。
SQL> ed
已写入 file afiedt.buf
1 create or replace package body zxf_pkg is
2 procedure update_sal(name varchar2,newsal number)
3 is
4 begin
5 update test3 set salary=newsal where name=name;
6 end;
7 function get_salary(name varchar2) return number
8 is
9 vsal number(16,2);
10 begin
11 select salary into vsal from test3 where name=name;
12 return vsal;
13 end;
14* end;
4触发器
3.2 定义并使用变量
标量类型,复合类型,参照类型,LOB类型
标量类型:char,log,varchar2,varchar,Boolean,date,real…….
复合类型:Record,table,varray
参照类型:ref_cursor ref objecttype
LOB类型:BFILE,BLOB,CLOB,NCLOB
3.2.1 标量变量
标量变量是指只能存放单个数值的变量.
1常用标量类型
Varchar2(n)
Char(n)
Number(p,s)
Date
Timestamp
Long,logn RAW
Boolean
Binary_float,Binary_double
2定义标量变量和使用变量
Identifier [constant] datatype [not null] [:= |default expr]
SQL>
1 declare
2 v_ename varchar2(10);
3 v_sal number(6,2);
4 v_balance binary_float;
5 c_tax_rate constant number(3,2) := 5.8;
6 v_hiredate date;
7 v_valid boolean not null default false;
8 begin
9 v_ename := 'zhangxf';
10 v_sal := 4000;
11 v_balance := 10000;
12 v_hiredate := sysdate-720;
13 v_valid := true;
14 dbms_output.put_line(v_ename);
15 dbms_output.put_line(v_sal||' '||v_balance);
16 dbms_output.put_line(c_tax_rate);
17 dbms_output.put_line(to_char(v_hiredate,'yyyy-mm-dd'));
18 --dbms_output.put_line(to_char(v_valid));
19* end;
SQL> /
zhangxf
4000 1.0E+004
5.8
2006-06-02
3 使用%TYPE类型
当定义PL/SQL变量存放列值时,必须确保变量使用合适的数据类型和长度,否则运行过程中可能会出现PL/SQL运行错误。为了了避免这种不必要的错误,可以使用%TYPE属性定义变量。当使用%TYPE属性定义变量时,它会按照数据库列或其他变量来确定新变量的类型和长度.
SQL> ed
已写入 file afiedt.buf
1 declare
2 v_ename test3.name%TYPE;
3 v_sal test3.salary%TYPE;
4 begin
5 select name,salary into v_ename,v_sal from test3 where id=1;
6 dbms_output.put_line(v_ename||' '||v_sal);
7* end;
SQL> /
zxf 20000
PL/SQL 过程已成功完成。
3.2.2复合变量
复合变量是指用于存放多个值的变量。当定义复合变量时,必须要使用PL/SQL的复合数据类型。PL/SQL包括PL/SQL记录,PL/SQL表,嵌套表以及VARRAY等四种复合数据类型。
1. PL/SQL记录
PL/SQL记录类似于高级语言中的结构,每个PL/SQL记录一般都包括多个成员。当使用PL/SQL记录时,首先需要在定义部分记录类型和记录变量,然后在执行部分引用该记录变量。×××当引用记录成员时,必须要加记录变量作为前缀
如下:
--创建示例表
SQL> create table emp(empno int,ename varchar2(20),sal number(8,2),job varchar2(20));
表已创建。
SQL> insert into emp values(7788,'zxf',2000,'it manager');
已创建 1 行。
SQL> insert into emp values(8256,'llll1000,'dba’);
已创建 1 行。
SQL> commit;
提交完成。
--创建记录类型
declare
type emp_record_type is record(
name emp.ename%TYPE,
salary emp.sal%TYPE,
title emp.job%TYPE);
emp_record emp_record_type;
begin
select ename,sal,job into emp_record
from emp where empno=7788;
dbms_output.put_pine('雇员名:'||emprecord.name);
end;
/
2. PL/SQL表
PL/SQL表类似于高级语言中的数组,需要注意,PL/SQL表与高级语言的数组有所区别,◇高级语言数组的下标不能为负,但PL/SQL表的下标可以为负值;
◇高级语言数组的元素个数有限制,而PL/SQL表的元素个数没有限制,并且其下标没有上下限。
当使用PL/SQL表时,必须首先在定义部分定义PL/SQL表类型和PL/SQL表变量,然后在执行部分引用该PL/SQL表变量
示例如下:
SQL>
1 declare
2 type ename_table_type is TABLE OF emp.ename%TYPE
3 index by binary_integer;
4 ename_table ename_table_type;
5 begin
6 select ename into ename_table(-1) from emp where empno=7788;
7 dbms_output.put_line('雇员名:'||ename_table(-1));
8* end;
SQL> /
雇员名:zxf
PL/SQL 过程已成功完成。
3. 嵌套表
嵌套表(Nested Table)类似于高级语言中的数组,高级语言数组和嵌套表的下标都不能为负值;高级语言的元素个数是有限制的,而嵌套表的元素个数是没有限制的。
嵌套表和PL/SQL表非常类似,但嵌套表可以作为表列的数据类型,而PL/SQL表不能作为表列的数据类型。
当在表列中使用嵌套表时,必须首先使用create type语句建立嵌套表类型,如下:
SQL> create or replace type emp_type as object(
2 name varchar2(10),
3 salary number(6,2),
4 empno int);
5 /
类型已创建。
SQL> create or replace type emp_array is table of emp_type;
2 /
类型已创建。
SQL> create table department(
2 deptno number(2),
3 dname varchar2(10),
4 employee emp_array
5 )nested table employee store as employee;
表已创建。
SQL>
对于嵌套表应再查看一下如何使用
4. VARRAY
VARRAY类似于嵌套表,它可以作为表列和对像类型属性的数据类型,但嵌套表的元素个数没有限制,而VARRAY的元素个数是有限制的,当使用VARRAY时必须首先建立VARRAY类型。示例如下:
SQL> create type article_type as object(
2 title varchar2(30),
3 pubdate date
4 );
5 /
类型已创建。
SQL> create type article_array is varray(20) of article_type;
2 /
类型已创建。
SQL> create table author(
2 id number(6),
3 name varchar2(10),
4 article article_array
5 );
表已创建。
3.2.3参照变量
参照变量是指用于存放数值指针的变量。通过使用参照变量,可以使得应用程序共享相同对像,从而降低占用空间。
在编写PL/SQL程序时,可以使用游标变量(REF CURSOR)和对像类型变量REF obj_type等两种参照变量类型。
1. REF CURSOR
当使用显示游标时,需要定义显示游标时指
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/67668/viewspace-310011/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/67668/viewspace-310011/