PLSQL学习笔记

合集下载

PLSQL学习笔记

PLSQL学习笔记

PL/SQL学习笔记Java相关课程系列笔记之三笔记内容说明PL/SQL(薛海璐老师主讲,占笔记内容100%);目录 一、 PL/SQL 简介........................................................................................................................... 1 1.1什么是 PL/SQL.....................................................................................................................1 1.2 PL/SQL 程序结构................................................................................................................ 1 1.3 PL/SQL 运行过程................................................................................................................ 1 1.4注释 (2)二、变量与数据类型 (3)2.1数据类型...............................................................................................................................3 2.2标量类型...............................................................................................................................3 2.3变量声明. (3)三、流程控制语句 ....................................................................................................................... 5 3.1条件语句...............................................................................................................................5 3.2循环语句. (6)四、 PL/SQL 中的 SQL (9)4.1 PL/SQL 中的 SQL 分类.......................................................................................................9 4.2 DML (insert ,update ,delete )和 TCL (commit ,rollback )...................................... 9 4.3 DDL (9)五、 PL/SQL 中的select............................................................................................................11 5.1 select 语句的实现...............................................................................................................11 5.2 record 类型..........................................................................................................................11 5.3 %rowtype............................................................................................................................ 12 5.4 record 变量的引用..............................................................................................................12 5.5 cursor 的概念......................................................................................................................13 5.6 cursor 的分类......................................................................................................................13 5.7显式 cursor 的处理.............................................................................................................13 5.8显式 cursor 的属性.............................................................................................................14 5.9隐式 cursor 的属性.............................................................................................................14 5.10 cursor 的声明....................................................................................................................14 5.11 open cursor........................................................................................................................ 14 5.12 fetch cursor........................................................................................................................15 5.13结果集提取的控制...........................................................................................................15 5.14 close cursor (15)六、集合 (19)6.1什么是 collection................................................................................................................19 6.2什么是关联数组.................................................................................................................19 6.3 Associative arrays 的定义.................................................................................................. 19 6.4声明 Associative arrays 类型和变量.................................................................................19 6.5关联数组的操作.................................................................................................................20 6.6 Associative arrays 的方法.................................................................................................. 20 6.7关联数组的遍历.................................................................................................................21 6.8 Associative arrays 的异常.................................................................................................. 22 6.9批量绑定.. (22)七、异常 (25)17.1 Oralce错误 (25)7.2 Oralce错误处理机制 (25)7.3异常的类型 (25)7.4 PL/SQL中的异常 (25)7.5异常捕获 (25)7.6异常的捕获规则 (26)7.7 Oralce预定义错误的捕获 (26)7.8非Oracle预定义异常 (27)7.9用户自定义异常 (27)7.10异常处理总结 (28)7.11 sqlcode和sqlerrm............................................................................................................287.12异常的传播 (29)八、子程序 (30)8.1子程序 (30)8.2有名子程序 (30)8.3有名子程序的分类 (30)8.4有名子程序的优点 (30)九、过程procedure (31)9.1语法 (31)9.2创建存储过程 (31)9.3形参和实参 (31)9.4形参的种类 (32)9.5调用存储过程 (32)9.6存储过程中的参数 (32)9.7对实际参数的要求 (33)9.8形式参数的限制 (33)9.9带参数的过程调用 (33)9.10使用缺省参数 (33)9.11存储过程中的DDL语句 (34)9.12变量 (35)9.13 PL/SQL中的SQL分类 (35)9.14再一次来看SQL语句的处理过程 (37)9.15软分析和硬分析 (37)9.16对过程procedure的基本操作 (37)9.17案例 (37)十、函数function.........................................................................................................................3910.1语法 (39)10.2创建函数 (39)10.3调用函数 (39)10.4对函数function的基本操作 (40)10.5过程和函数的比较 (40)10.6匿名块中的过程和函数声明 (40)10.7案例 (40)2十一、包package.........................................................................................................................4211.1什么是package (42)11.2包的组成 (42)11.3包的优点 (42)11.4 package声明的语法 (42)11.5 package body声明的语法 (43)11.6编译包和包体 (43)11.7案例 (43)十二、触发器trigger (45)12.1面临问题 (45)12.2 DML触发器的组成 (45)12.3 DML触发器的类型 (45)12.4 DML触发器的触发顺序 (45)12.5 DML行级触发器 (45)12.6 :OLD和:NEW (45)12.7触发器的重新编译 (47)12.8触发器的状态 (47)十三、其他注意事项 (48)13.1 PL/SQL的特点 (48)13.2写PL/SQL的好处 (48)13.3命名建议 (48)13.4搞清楚如下内容 (48)13.5保证所有对象的状态都是 valid (48)13.6 declare中都可声明什么 (48)13.7数据库对象 (48)3一、PL/SQL 简介1.1什么是 PL/SQLPL/SQL (Procedural Language/SQL )是 Oracle 在标准 SQL 的基础上增加了过程化处理, 把 DML 和 select 语句组织在 PL/SQL 代码的过程性单元中,通过逻辑判断、循环等操作,实 现复杂的功能或者计算的程序语言。

PLSQL学习笔记

PLSQL学习笔记

一、PL/SQL基本语法要素1.相对其他语言特殊运算符=号是是否相等的比较运算符:=才是赋值运算符' ' 两个单引号之间表示字符类型的变量" " 双引号之间标识引用,如果字段名,数据库名等|| 表示字符之间的连接符--表示单行注释%属性指示器2.PL/SQL变量及数据类型1.变量类型标量类型:数值,字符,日期,布尔复合类型:索引表,嵌套表,数组引用类型:游标类型(CURSOR),对象类型(REF)LOB类型:大文本等2.使用%定义变量的类型跟某个表的列属性一致的变量的声明v_name %type 表示v_name 这个变量与表student中的列name 属性一样v_student student%rowtype 表示v_student这个变量客户存student中的一行数据3.用select into个变量赋值的时候select结果必须只有一行数据,如果多行会包too many row错误,空的话则会报空错误。

3.PL/SQL中最基本的语句块结构DECLARE声明变量,要使用的变量必须在这里声明BEGIN需要执行的程序语句EXCEPTION异常处理语句END二、PL/SQL 程序顺序结构(分支和循环)1.正常都是从上到下的顺序结构2.使用if进行分支处理IF 语句的格式:if condition_1 then statement_1; elsif condition_n then statement_n;else else_statements; endif;3.使用case进行分支处理CASE语句格式:1.单值比较: case expression when result_1 then statements_1;when result_2 then statements_2;elseelse_statement;endcase;2.多值比较:casewhen expression_1 then statement_1;when expression_2 then statement_2;elseelse_statements;endcase;4.使用循环结构1.使用loop循环结构:loop statements;exit when expression;end loop;满足expression条件的时候跳出循环;2.使用while循环结构:while expression loop statements;end loop;expression 的格式:vi<=10 不加分号3.使用for循环结构:for expression loop statements;end loop;expression 的格式:vi in 1..10 不叫分号三、游标基础及使用1.游标的定义:游标用于表示一查询结果的结果集2.游标使用四个步骤:---1.声明declare --- 2.打开open ----3.读取fetch ----4.关闭close1.声明游标:CURSOR cursor_name IS select_statements;例如:CURSOR cursor_student IS SELECT id,name,age,sex FROM students WHERE name LIKE '林%';2.使用游标是打开:Open cursor_name;例如:OPEN cursor_student;打开游标的时候系统才会去查询游标声明的数据集;3.读取数据:FETCH cursor_name INTO variable_name1,…variable_name2;例如:FETCH cursor_studnet INTO v_id,v_sname,v_age,v_sex;第一次读取的是第一行数据,再次使用FETCH读取数据的时候是下一行所以处理游标时一般都是用循环;4.关闭游标:CLOSE cursor_name;例如:CLOSE cursor_student;3.游标中的属性:四个常用属性:%ISOPEN 、%FOUND 、%NOTFOUND 、%ROWCOUNT1.%ISOPEN 返回游标是否打开使用方法cursor_name%ISOPEN例如:cursor_student%ISOPEN;2.%NOTFUND 返回最近一次FETCH取数是否有取到数,没取到返回true,有取到返回false;一般用于判断循环终止使用方法:cursor_name%NOTFUND例如:cursor_student%NOTFOUND3.%FOUND 与%NOTFOUND相反4.%ROWCOUNT 返回现在已经读取的行数使用方法:cursor_name%ROWCOUNT例如:cursor_student%ROWCOUNT4.简单使用游标循环读取数据的例子读取幵打印学生表中“计算机系学生的信息”DECLAREv_specialty students.specialty%type; --声明变量v_name %type;v_dob students.dob%type;CURSOR student_cur --声明游标ISSELECT name,dobFROM students WHERE specialty=v_specialty;BEGINv_specialty:='计算机'; --给变量赋值OPEN student_cur; --打开游标DBMES_OUTPUT.PUT_LINE('学生姓名出生日期'); --输出LOOPFETCH student_cur INTO v_name,v_dob; --读取游标中的数据EXIT WHEN student_cur%NOTFUND; --设定退出条件DBMS_OUTPUT.PUT_LINE(v_name||' '||v_dob); --输出结果END LOOP; --循环体结束标志CLOSE sutent_cur; --关闭游标END; --块结构结束标志5.游标的应用:1.对游标指定的数据进行修改:需要对游标指定的数据修改必须在声明游标的时候带有FOR UPDATE 关键字语法:CURSOR cursor_name IS select_statement FOR UPDATE OF table_name NOTWAIT;OF table_name 可以不写,用于自动选择多表的时候确定那些表需要锁定;NOTWAIT可以不写,用于确认是否等待锁。

plsql学习笔记

plsql学习笔记
when v_sal<1000 then update emp set comm=100 where ename=v_ename;
when v_sal<2000 then update emp set comm=80 where ename=v_ename;
when v_sal<6000 tehn update emp set comm=50 where ename=v_ename;
insert into dept (deptno,dname) values(v_deptno,v_dname);
2.2使用子查询插入数据
v_deptno emp.deptno%type:=&no;
insert into employee select * from emp where deptno=v_deptno;
使用的变量名不能与列名相同,否则触发TOO_MANY_ROWS例外.
2.操纵数据
2.1使用VALUES子句插入数据
v_deptno dept.deptno%type;
v_dname dept.dname%type;
v_deptno:=no;
v_dname:='&name';
begin
for i in reverse 1..10 loop
insert into temp values(i);
end loop;
end;
5.10嵌套循环和标号:通过在嵌套循环中使用标号,可以区分内层循环和外层循环,并且可以在内层循环中直接退出外层循环
dbms_output.put_line('修改了'||sql%rowcount||'行');

plsql笔记

plsql笔记

1.声明部分:主要用于声明变量、常量、数据类型、游标、异常处理名称以及本地(局部)子程序定义等。

2.可执行部分执行部分:是PL/SQL块的功能实现部分。

该部分通过变量赋值、流程控制、数据查询、数据操纵、数据定义、事务控制、游标处理等实现块的功能。

3.异常处理部分:异常处理部分用于处理该块执行过程中产生的异常。

执行部分是必须的,而声明部分和异常部分是可选的;PL/SQL的字符集包括:大小写字母:A~Z,a~z数字:0~9空白:制表符、空格和回车数字符号:+ - * / 〈〉 =标点符号:~ ! @ # $ % ^&* ()_ | { } [ ] ?;:, . “ ‘1.1标识符用于定义PL/SQL变量、常量、异常、游标名称、游标变量、参数、子程序名称和其他的程序单元名称等。

1.2在PL/SQL程序中,标识符是以字母开头的,后边可以跟字母、数字、美元符号($)、井号(#)或下划线(_),其最大长度为30个字符,并且所有字符都是有效的。

数字类型字符类型日期/区间类型行标识类型布尔类型原始类型LOB类型引用类型记录类型集合类型%TYPE与%ROWTYPE分类数据类型数字类型 NUMBER、BINARY_NUMBER PLS_NUMBER字符类型 VARCHAR2、CHAR、LONG、NCHAR、NVARCHAR日期/区间类型 DATE、TIMESTAMP、INTERVAL行标识类型 ROWID、UROWID布尔类型 BOOLEAN(TRUE、FALSE、NULL)原始类型 RAW、LONG RAWLOB类型 CLOB、BLOB、NCLOB、BFILE引用类型 REF CURSOR,REF object_type。

记录类型 RECORD集合类型 TABLE、VARRAY变量定义的一般格式variable_name [CONSTANT] datatype [NOT NULL] [DEFAULT|:=expression];说明1.1变量或常量名称是一个PL/SQL标识符,应符合标识符命名规范;1.2每行只能定义一个变量;1.3如果加上关键字CONSTANT,则表示所定义的是一个常量,必须为它赋初值;1.4如果定义变量时使用了NOT NULL关键字,则必须为变量赋初值;1.5如果变量没有赋初值,则默认为NULL;1.6使用DEFAULT或“:=”运算符为变量初始化。

PLsql学习笔记

PLsql学习笔记

PL/SQL学习笔记PLSQL特有的%TYPE属性来声明与XX类型一致的变量类型:举例:...v_st_name%TYPE;v_min_balancev_balance%TYPE:= 10;...可绑定变量(Bind Variable 也称为Host Variable , 非PLSQL 变量):可绑定变量是一种在缩主环境中定义的变量,所谓缩主环境一般指示SQLPLUS执行环境或者是PLSQL Developer 的Command Window执行环境;可绑定变量可用于在运行时把值传递给PLSQL, 创建语法:V ARIABLE return_codeNUMBERV ARIABLE return_msgV ARCHAR2(30)大家注意,在标准的PLSQL中定义变量是不能用V ARIABLE关键字的,此关键字只在SQLPLUS执行环境中有效,可使用PRINT语句输出变量内容。

在PLSQL中使用这种变量时,前面加”:”, 以示区分。

SELECT INTO 语句:用于把从数据库查询出内容存入变量BEGININSERT INTO employees(employee_id, first_name, last_name, email,hire_date, job_id, salary)V ALUES(employees_seq.NEXTV AL, 'Ruth', 'Cores', 'RCORES',sysdate, 'AD_ASST', 4000);END;循环语句的语法与其他语言类似:有基本循环、For循环、Wihle循环三种LOOPstatement1;. . .EXIT [WHEN condition];END LOOP;WHILE condition LOOPstatement1;statement2;. . .END LOOP;FOR counter IN [REVERSE]lower_bound..upper_bound LOOPstatement1;statement2;. . .END LOOP;概述:PLSQL中常用的自定义类型就两种:记录类型、PLSQL内存表类型(根据表中的数据字段的简单和复杂程度又可分别实现类似于简单数组和记录数组的功能)记录类型的定义语法:TYPE type_name IS RECORD(field_declaration[, field_declaration]…);identifiertype_name;这里的field_declaration 的具体格式可以是:field_name {field_type | variable%TYPE| table.column%TYPE | table%ROWTYPE}[[NOT NULL] {:= | DEFAULT} expr]%ROWTYPE属性:在PLSQL中%ROWTYPE 表示某张表的记录类型或者是用户指定以的记录类型,使用此属性可以很方便的定义一个变量,其类型与某张表的记录或者自定义的记录类型保持一致。

精通 oracle 10g plsql 编程-学习笔记

精通 oracle 10g plsql 编程-学习笔记

1.PL/SQL综述本章学习目标,了解如下内容:PL/SQL的功能和作用PL/SQL 的优点和特征;Oracle 10g、Oracle9i 的PL/SQL新特征1.1.SQL简介1.1.1.SQL语言特点SQL语言采用集合操作方式1.1.2.SQL语言分类●数据查询语言(SELECT语句):检索数据库数据。

●数据操纵语言(DML):用于改变数据库数据。

包括insert,update和delete三条语句。

●事务控制语言(TCL):用于维护数据库的一致性,包括commit,rollback和savepoint 三条语句●数据定义语言(DDL):用户建立、修改和删除数据库对象。

●数据控制语言(DDL):用于执行权限授予和收回操作。

包括grant 和revoke两条命令。

1.1.3.SQL 语句编写规则●SQL关键字不区分大小写●对象名和列名不区分大小写●字符值和日期值区分大小写●书写格式随意1.2.PL/SQL简介1.3.Oracle 10G PL/SQL 新特征2.PL/SQL开发工具本章学习目标:学会使用SQL*PLUS学会使用PL/SQL developer;学会使用Procedure Builder。

2.1.SQL*PLUS在命令行运行SQL*PlusSqlplus [username]/[password] [@server]3.PL/SQL 基础学习目标:●了解PL/SQL块的基本结构以及PL/SQL块的分类;●学会在PL/SQL块中定义和使用变量●学会在PL/SQL块中编写可执行语句;●了解编写PL/SQL代码的指导方针;●了解Oracle 10g的新特征——新数据类型BINARY_FLOAT 和BINARY_DOUBLE,以及指定字符串文本的新方法。

3.1.PL/SQL 块简介3.1.1.PL/SQL块结构3.1.2.PL/SQL 块分类匿名块命名块子程序触发器3.2. 定义并使用变量3.2.1.标量变量3.2.2.复合变量3.2.3.参照变量3.2.4.LOB 变量3.2.5.非PL/SQL 变量3.3.编写 PL/SQL 代码3.3.1.PL/SQL 词汇单元分隔符标识符文本(数字文本,字符文本,字符串文本,布尔文本,日期时间文本)注释3.3.2.PL/SQL 代码编码规则标识符命名规则大小写规则代码缩进嵌套块和变量范围PL/SQL中可以使用的SQL函数4.使用SQL语句学习目标:学会使用SELECT语句去完成基本查询功能学会使用INSERT,UPDA TE和DELETE语句去操作数据库数据学会使用COMMIT,ROLLBACK和SA VEPOINT语句去控制事务学会使用SELECT语句去实现各种复杂查询功能(数据分组、连接查询、子查询、层次查询、合并查询等)4.1.使用基本查询处理NULL:函数nvl(expr1,expr2),nvl2(expr1,expr2,expr3)4.2.使用DML语句使用多表插入数据语法:INSERT ALL insert_into_clause [value_clause] subquery;INSERT conditional_insert_clause subquery;示例1:使用ALL 操作符执行多表插入INSERT ALLWHEN deptno=10 THEN INTO dept10WHEN deptno=20 THEN INTO dept20WHEN deptno=30 THEN INTO dept30WHEN job=’CLERK’ THEN INTO clerkELSE INTO otherSelect * from emp;示例2:使用FIRST 操作符执行多表插入INSERT FIRSTWHEN deptno=10 THEN INTO dept10WHEN deptno=20 THEN INTO dept20WHEN deptno=30 THEN INTO dept30WHEN job=’CLERK’ THEN INTO clerkELSE INTO otherSELECT * FROM emp;4.3.使用事务控制语句4.3.1.事务和锁4.3.2.提交事务4.3.3.回退事务设置保存点:savepoint a;或者exec dbms_transaction.savepoint(‘a’)取消部分事务Rollback to a;或者Exec dbms_transaction.rollback_savepoint(‘a’)取消全部事务:Rollback; 或者exec dbms_transaction.rollback() 4.3.4.只读事务4.3.5.顺序事务4.4.数据分组4.4.1.分组函数MaxMinAvgSumCountVarianceStddev使用分组函数注意事项:●当使用分组函数时,除了函数Count(*) 之外,其他分组函数都会忽略NULL行。

PLSQL基础教程-红色部分为笔记

PLSQL基础教程-红色部分为笔记

PL/SQL程序设计目录第一章PL/SQL 程序设计简介 (4)§1.2SQL与PL/SQL (4)§1.2.1 什么是PL/SQL? (4)§1.2.1 PL/SQL的好处 (4)§1.2.2 PL/SQL 可用的SQL语句 (5)§1.3运行PL/SQL程序 (5)第二章PL/SQL块结构和组成元素 (6)§2.1PL/SQL块 (6)§2.2PL/SQL结构 (6)§2.3标识符 (6)§2.4PL/SQL变量类型 (7)§2.4.1 变量类型 (7)§2.4.2 复合类型 (9)§2.4.3 使用%ROWTYPE (11)§2.4.4 LOB类型* (11)§2.4.5 Bind 变量 (11)§2.4.6 INDEX BY TABLES (12)§2.4.7 数据类型的转换* (13)§2.5运算符和表达式(数据定义) (13)§2.5.1 关系运算符 (13)§2.5.2 一般运算符 (13)§2.5.3 逻辑运算符 (14)§2.6变量赋值 (14)§2.6.1 字符及数字运算特点 (14)§2.6.2 BOOLEAN 赋值 (14)§2.6.3 数据库赋值 (14)§2.6.4 可转换的类型赋值 (15)§2.7变量作用范围及可见性 (15)§2.8注释 (16)§2.9简单例子 (17)§2.9.1 简单数据插入例子 (17)§2.9.2 简单数据删除例子 (17)第三章PL/SQL流程控制语句 (18)§3.1条件语句 (18)§3.2CASE表达式 (19)§3.3循环 (19)§3.3标号和GOTO (21)§3.4NULL语句 (21)第四章游标的使用 (23)§4.1游标概念 (23)§4.1.1 处理显式游标 (23)§4.1.2 处理隐式游标 (26)§4.1.3 游标修改和删除操作 (27)第五章异常错误处理 (29)§5.1异常处理概念 (29)§5.1.1 预定义的异常处理 (29)§5.1.2 非预定义的异常处理 (30)§5.1.3 用户自定义的异常处理 (31)§5.1.4 用户定义的异常处理 (32)§5.2异常错误传播 (33)§5.2.1 在执行部分引发异常错误 (33)§5.2.2 在声明部分引发异常错误 (34)§5.3异常错误处理编程 (34)§5.4在PL/SQL中使用SQLCODE,SQLERRM (35)第六章存储函数和过程 (36)§6.1引言 (36)§6.2创建函数 (36)§6.3存储过程 (39)§6.3.1 创建过程 (39)§6.3.2 调用存储过程 (40)§6.3.3 开发存储过程步骤 (42)§6.3.4 与过程相关数据字典 (43)第七章包的创建和应用 (44)§7.1引言 (44)§7.2包的定义 (44)§7.3包的开发步骤 (45)§7.4包定义的说明 (45)§7.5子程序重载 (48)§7.6删除过程、函数和包 (50)§7.7包的管理 (50)第八章触发器 (51)§8.1触发器类型 (51)§8.1.1 DML触发器 (51)§8.1.2 替代触发器 (51)§8.1.3 系统触发器 (51)§8.2创建触发器 (51)§8.2.1 触发器触发次序 (53)§8.2.2 创建DML触发器 (53)§8.2.3 创建替代(Instead_of)触发器 (54)§8.2.3 创建系统事件触发器 (54)§8.2.4 系统触发器事件属性 (55)§8.2.5 使用触发器谓词 (56)§8.2.6 重新编译触发器 (56)§8.3删除和使能触发器 (56)§8.4触发器和数据字典 (57)§8.5数据库触发器的应用举例 (57)第一章PL/SQL 程序设计简介PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。

PLSQL学习笔记

PLSQL学习笔记

(五)权限控制语句(DCL):GRANT 授予权限 /REVOKE 移除权限
SELECT:
SELECT 查询列表 FROM 数据源;
*&* SQL命令必须加分号。
ALTER USER HR IDENTIFIED BY HR ACCOUNT UNLOCK;
修改用户 解锁
给HR解锁
主要用于通配固定位数的字符。例如查询月收入五位数以上的员工。五位ห้องสมุดไป่ตู้可以用'_'来查询。
逻辑操作符(用在WHERE子句中)
AND
OR
NOT
先执行 NOT ,再执行 AND 最后执行 OR。
ORDER BY
ORDER BY子句在 SELECT 语句的最后。
ASC:升序
(三)事务控制语句:COMMIT 提交、ROLLBACK 回滚、
SAVEPOINT 存储点(与 ROLLBACK 搭配使用)在回滚的时候可以回滚到某个存储点上。否则回滚到最初起点上。
(四)数据定义语句:对对象操作。TRUNCATE 清除表中所有数据 /CREATE 创建 /DROP 删除 /ALTER 修改
定义空(NULL)值
空值出现在表达式中会导致整个表达式的值为空。
NVL(字段名,将要赋予的值)函数
作用:将空值转换成其他有ASCLL码的值。
annual_salary年薪
别名
可以加中文的字段别名。
如果想强制地改变列名的大小写,可以在别名的定义时加上双引号,列名有空格时也要在列名上加双引号。
以上函数都是返回string的一部分,从字符位置A开始,长为B个字符。如果A是0,那它就被认为是1(字符串的开始位置)。如果A是正数,那么字符从左边开始数。如果是负数,则从STRING的末尾开始,从右边数。如果B不存在,那么缺省是整个字符串。如果B小于1,将返回NULL。如果A或B使用了浮点数,那么该数值首先被节取成一个整数,返回类型与STRING相同。

PLSQL笔记

PLSQL笔记

PLSQL笔记PL/SQL编辑器,具有语法加强、SQL和PL/SQL帮助、对象描述、代码助手、编译器提示、PL/SQL完善、代码内容、代码分级、浏览器按钮、超链接导航、宏库等许多智能特性,能够满足要求性最高的用户需求。

当您需要某个信息时,它将自动出现,至多单击即可将信息调出。

一、简介1、PLSQL Developer是一个为Oracle数据库开发存储程序单元的集成开发环境,你能方便的创建你的客户/服务器应用程序的服务器部分。

2、PL/SQL可以做的事:1)使用文本编辑器写程序单元(过程、触发器等)。

2)使用Oracle SQL*PLUS编译源文件3)如果有编译错误,你必须找出它位于源文件何处,纠正它,转回到SQL*PLUS重新编译它,然后再找下一处错误。

4)使用SQL*PLUS或你的客户端应用程序测试程序单元。

5)如果发生运行时间错误,你又要很辛苦地定位问题的原因并纠正错误。

6)使用解释计划工具或tkprof工具优化你的SQL语句。

7)使用SQL*plus或另外的工具在你的数据库里查看或修改其它对象和数据。

3、工具PL/SQL Developer提供了几个能对开发有帮助的工具,这些工具包括允许你在数据库对象源搜索文本的查找数据库对象工具、快速编译在开发期间已经变得无效的对象的编译无效对象工具、导出和导入工具、创建测试数据的数据生成器工具、导出用户对象DDL语句的导出用户对象工具、比较两个用户对象定义的比较用户对象工具、会话信息工具、事件监视器和一个比较并使表内容相同的比较表数据工具。

除了这些标准工具外,你还可以定义你自己的工具,并把他们包括在PL/SQL Developer的工具菜单里面。

4、工程要组织你的工作,你可以使用PL/SQL Developer的工程概念,工程由很多文件和数据库对象组成,这些对象通过工程项目窗口很容易被建成,并且通过单击鼠标就能被编译。

5、图形图形窗口可以运行于SQL窗口或报告窗口的内部,以获得查询数据的图示。

plsql笔记

plsql笔记
例子:
declare
type v_table is table of integer index by binary_integer;
v_integers v_table;
user1 v_user;
user2 v_user; ------ User user1;
user3 v_user;
v_users v_map; ---- Map<Integer,User> v_users;
begin
v_integers(1):=1;
v_integers(2):=2;
v_integers(4):=4;
dbms_output.put_line(v_integers(1)||' , '||v_integers(2)||' , '||v_integers(3));
分支
if boolean then xxx end if;
例子:
declare
v_num integer:=5;
begin
if v_num=5
then dbms_output.put_line(v_num);
end if;
end;
if boolean then xxx else xxxx end if;
end;
5、复合类型
1、记录类型 record----类似java 的 类 c语言的结构体
声明: type v_record is record(
v_username varchar2(50),
end;
7、%rowtype
declare
v_row users%rowtype;

PLSQL学习(一) 基础知识

PLSQL学习(一) 基础知识

PLSQL学习(一) 基础知识很久以前自己整理的PLSQL一些基础知识,翻出来看看都是比较基础的内容,还是放上来好了。

参考的资料是《PL/SQL用户指南与参考》中译版,觉得这是一部很不错的入门书,感谢把这本书翻译出来的网友。

1、乘方的不同应用:在SQL中乘方只能使用函数Power(a,b)来计算但在PLSQL中可直接使用a**b表示2、赋值语句Returning:insert into t1 values(90,'SERVICE','BEIJING')Returning rowid,name into row_id,info;注:只限insert、update、delete一条记录时进行赋值3、自定义参数——&:可SQL和PLSQL中均可使用自定义参数,即需要自己输入值的参数select * from ldcom where comcode=&a andname=&b;PLSQL:declare i int := &a; n int := &b;4、绑定变量的使用:可使用绑定变量的办法提高SQL效率SQL> variable x number ;SQL> exec :x := 8600 ;SQL> select * from ldcom where comcode= :x ;注:PLSQL中的declare即隐士绑定,无需再申明可用Print查看绑定变量 SQL> print x;也可使用查询SQL> select :x from dual;实际的简单应用:variable x number;declarev_date date;beginfor i in1.. 10loop:x := i;select sysdate+:x into v_date from dual;dbms_output.put_line(v_date);end loop;end;/在execute immediate中的应用:declarev_x t1.num%type;beginexecute immediate'update t1 set num=8888 where id=:a returning num into :b'using2returning into v_x;dbms_output.put_line(v_x);end;注意returning的返回值在动态SQL中的操作格式5、%TYPE和%ROWTYPE的区别:%TYPE针对某一字段类型(数组也是单一的类型)%ROWTYPE针对某一整表的类型(游标也是整表)6、计数循环的逆序法:for i in reverse10.. 100loop注意reverse的位置不要记错7、一般的游标使用法:1、游标的正常使用需要四步①定义游标cursor c2(dept_no number default10) is----注意定义dept_no的方法select name,agentcode from laagent where rownum <= dept_no;②打开游标open c3(dept_no =>20); ----可以重新定义dept_no③提取游标数据fetch c2 into dept_name,dept_loc;----字符类型、个数相等fetch c3 into deptrec;----deptrec为rowtypeexit when c3%notfound;④关闭游标CLOSE c3;⑤游标属性%FOUND--布尔型属性,当最近一次读记录时成功返回,则值为TRUE;%NOTFOUND--布尔型属性,与%FOUND相反;%ISOPEN--布尔型属性,当游标已打开时返回TRUE;%ROWCOUNT--数字型属性,返回已从游标中读取的记录数。

Oracle_Plsql个人学习笔记总结

Oracle_Plsql个人学习笔记总结

备注:以下是个人学习笔记总结,其实是本人容易忘记,工作中碰到的一些知识点,记录下来整理成笔记了,序号之间并不是按照某种类型划分的,都是随意的标记一下,希望对大家有所帮助。

昵称:阿杜笑傲江湖(其实就是个名字而已,并不江湖…)name:杜立鸿(不要冒充,万一哪天中奖了呢?)sex:爷们---------------------------废话不多说,GO,GO,Go……1.允许修改分区建(有时候分区键更新不了,需要以下这样处理,当然了分区键本来是不允许更新的,都得根据实际情况)alter table t1 enable row movement;2. 获取某一时间最近的时间sqlselect *from t_datetime twhere t.f_time - to_date('2018-09-06 10:10:00','yyyy-mm-ddhh24:mi:ss') =(select min(t.f_time - to_date('2018-09-06 10:10:00','yyyy-mm-ddhh24:mi:ss'))from t_datetime t);3. 1.创建一个object类型的数据库类型对象。

表示学生实体类型。

(注意:此类型必须定义为数据库对象级别的类型,而不能定义成包、函数级别的类型。

否则,函数外部代码是无法识别该类型的)。

CREATE OR REPLACE TYPE student_obj_type AS OBJECT(stu_no NUMBER, --学号stu_name VARCHAR2(255), --姓名stu_sex VARCHAR2(2),--性别score NUMBER--成绩);4.创建一个嵌套表类型的数据库类型对象。

表示学生实体集合类型。

该类型也将用作函数中定义的返回类型。

(注意:此类型必须定义为数据库对象级别的类型,而不能定义成包、函数级别的类型。

plsql语句笔记

plsql语句笔记
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
插入记录:
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
insert into students (id,first_name,last_name,major,current_credits)
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
declare
v_counter binary_integer:=1;
begin
loop
insert into temp_table
values(v_counter,'loop index');
begin
select number_seats
into v_numberseats
from rooms
where room_id=99999;
if v_numberseats<50 then
v_comment:='fairly small';
insert into temp_table(char_col)
插入数据,并输出:
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
declare ---- create or replace procedure insertintotemp as ----存储过程

Oracle PLSQL学习笔记

Oracle PLSQL学习笔记
when updating then
raise_application_error(-20002,'请不要修改');
when deleting then
raise_application_error(-20001,'请不要shanchu');
end case;
2 begin
3 insert into mytest values('吕奇','orcl');
4 end;
5 /
**如何查看错误信息
show error;
**如何调用存储过程
--exec 过程名(参数值);
raise_application_error
end;
create or replace trigger my_tri
before insert or update or delete on stu
begin
case
when inserting then
raise_application_error(-20001,'请不要添加');
要完成相对简单的应用功能,可能只需要编写一个pl/sql块;如果实现
复杂的功能,可能需要在一个pl/sql块中嵌套其他的pl/sql块
**块结构示意
pl/sql块由三个部分构成:定义部分、执行部分、例外处理部分
--declare(可选):定义部分----定义常量、变量、游标、例外、复杂数据类型
,这样使得它的功能变得更加强大。
--过程、函数、触发器时plsql编写
--过程,函数,触发器是在oracle中

PLSQL编程笔记

PLSQL编程笔记
v_content varchar(512);
begin
v_ival := v_ival * 90; --赋值运算
insert into syslogs values(seq_syslogs.nextval,10,sysdate,'v_ival='||v_ival,user);--数据库存储
/**********************************《PL/SQL编程》*************************************/
/*procedural language/sql*/
--1、过程、函数、触发器是pl/sql编写的
--命令规则:
--变量(variable) v_
--常量(constant) c_
--指针、游标(cursor) _cursor
--例外、异常(exception) e_
--可定义的变量和常量:
--标量类型:scalar
--delete syslogs where logid=15;
--分支流程控制
if v_ival>50 then
dbms_output.put_line('日志需要清理了~');
else
dbms_output.put_line('日志空间正常!');
end loop;
--For循环
for v_count in reverse 0..4 loop --reverse递减
dbms_output.put_line('for循环:'||v_count);
end loop;

PLSQL编程基础(个人笔记)

PLSQL编程基础(个人笔记)

∙声明变量语法:变量名[CONSTANT] databyte [NOT NULL][:=|DEFAULT expression]∙赋值:o常量:常量名CONSTANT NUMBER := 0;(定义一个数值型,值为0的常量)o变量:▪直接赋值x:=200;▪通过SQL SELECT INTO 或FETCH INTO给变量赋值∙数据类型:o numbero charactero date/timeo boolean∙操作符:o算术操作符:+、-、*、/、**(乘方)o关系操作符:<、<=、>、>=、=、!=、<>、:=o比较操作符:is null、between、like、ino逻辑操作符:and、or、not∙流程控制:o条件控制:▪if...then...end if;▪if...then...else...end if;▪if...elsif...else...then...end if;o循环控制:▪loop...end loop;▪while...loop...end loop;▪for...loop...end loop;(for counter in [reverse]--反序 start_rangeend_range loop...end loop)o循环语句可以配合exit或者exit when...使用∙标签:<<标签名>>,增加易读性,也可以配合goto语句使用∙PL/SQL嵌套块:begin...end被看作一个PL/SQL程序块,嵌套块要注意的是变量,定义在最外部程序块中的变量可以在所有子块中使用,如果在子块中定义了与外部程序块变量相同的变量名,在执行子块时将使用子块中定义的变量。

子块中定义的变量不能被父块引用。

∙异常处理:o抛出异常:▪通过PL/SQL运行时引擎▪使用RAISE语句▪使用RAISE_APPLICATION_ERROR存储过程o自定义异常示例:DECLAREinventory_too_low EXCEPTION; ---其他声明语句BEGIN…IF order_rec.qty>inventory_rec.qty THENRAISE inventory_too_low;END IF;…EXCEPTIONWHEN inventory_too_low THENorder_rec.staus:='backordered';…o异常处理:EXCEPTIONWHEN exception_name THENCode for handing exception_name[WHEN another_exception THENCode for handing another_exception][WHEN others THENCode for handing any other exception.]o异常传递:没有处理的异常将沿检测异常调用程序传播到外面,在异常部分抛出的异常将控制转到上一层的异常部分。

PLSQL学习笔记

PLSQL学习笔记
...
END LOOP;
3) FOR loop_counter IN [REVERSE] low_bound..high_bound LOOP
...
END LOOP;
注:a. 加上REVERSE 表示递减,从结束边界到起始边界,递减步长为一;
arg_name[{IN|OUT|IN OUT}]TYPE)]
{IS|AS}
procedure_body
1) IN: 表示该参数不能被赋值(只能位于等号右边);
2) 声明:a. 普通申明:DELCARE CURSOR CURSOR_NAME IS select_statement /* CURSOR的内容必须是一条查询语句*/
b. 带参数申明:DELCARE CURSOR c_stu(p_id student.ID%TYPE) SELECT * FROM student WHERE ID = p_id;
注:与3中定一个record相比,一步就完成,而3中定义分二步:a. 所有的成员变量都要申明; b. 实例化变量;
5. TABLE类型
答:TYPE tabletype IS TABLE OF type INDEX BY BINARY_INTEGER;
例:DECLARE
TYPE t_StuTable IS TABLE OF Student%ROWTYPE INDEX BY BINARY_INTERGER;
4) SQLJ: 很新的一种用Java访问Oracle数据库的方法,会的人不多;
5) JDBC
6) PL/SQL: 存储在数据内运行, 其他方法为在数据库外对数据库访问;
2. PL/SQL
答:1) PL/SQL(Procedual language/SQL)是在标准SQL的基础上增加了过程化处理的语言;

PLSQL笔记

PLSQL笔记

PLSQL笔记PLSQL开发笔记和小结*****************************************PLSQL基本结构*****************************************基本数据类型变量1. 基本数据类型Number 数字型Int 整数型Pls_integer 整数型,产生溢出时出现错误Binary_integer 整数型,表示带符号的整数Char 定长字符型,最大255个字符Varchar2 变长字符型,最大2000个字符Long 变长字符型,最长2GBDate 日期型Boolean 布尔型(TRUE、FALSE、NULL三者取一)在PL/SQL中使用的数据类型和Oracle数据库中使用的数据类型,有的含义是完全一致的,有的是有不同的含义的。

2. 基本数据类型变量的定义方法变量名类型标识符 [not null]:=值;declareage number(3):=26; --长度为3,初始值为26begincommit;end;其中,定义常量的语法格式:常量名 constant 类型标识符 [not null]:=值;declarepi constant number(9):=3.1415926;--为pi的数字型常量,长度为9,初始值为3.1415926 begincommit;end;表达式变量、常量经常需要组成各种表达式来进行运算,下面介绍在PL/SQL中常见表达式的运算规则。

1. 数值表达式PL/SQL程序中的数值表达式是由数值型常数、变量、函数和算术运算符组成的,可以使用的算术运算符包括+(加法)、-(减法)、*(乘法)、/(除法)和**(乘方)等。

命令窗口中执行下列PL/SQL程序,该程序定义了名为result的整数型变量,计算的是10+3*4-20+5**2的值,理论结果应该是27。

―――――――――――――――――――――――――――――――――――――set serveroutput onDeclareresult integer;beginresult:=10+3*4-20+5**2;dbms_output.put_line('运算结果是:'||to_char(result));end;―――――――――――――――――――――――――――――――――――――dbms_output.put_line函数输出只能是字符串,因此利用to_char函数将数值型结果转换为字符型。

PLSQL笔记

PLSQL笔记

1.PLSQL在查询结束时为什么要在后面加“t”因为SQL语句中的“t”表示的是这张表的别名,有些表名比较长在接下来的查询过程中使用起来不方便所以用一个字母来表示,但是在多张表联合查询中,多张表不能使用一个字母表示别名。

mit在SQL语句中的作用是“提交”,在Oracle中执行一条语句,并不会把这条语句提交到数据库中去,还要执行commit语句。

使用方法:执行一条SQL 语句;Commit;(提交)3.ROLLBACK在SQL 中的作用是“回滚”,当你执行一条SQL语句时,条件不符合要求,比如当你插入一条数据,数据不符合要求就是rollback(回滚),如果符合要求就是commit(提交),否则就是插入不成功。

4.SA VEPOINT语句会撤销该用户在特定的事务上的所做的所有工作。

5.SELECTINTO 语句是在查询结束后插入一个表。

6.PLSQL块可以分成三类:无名块:动态结构只能一次子程序:存储在数据库中的存储过程、函数及包等,当在数据库中建立好后可以在其他程序中调用。

触发器:当数据库发生操作时会触发一些小事件,从而自动执行一些操作。

7.用%TYPE类型定义与表相匹配的字段8.LOB 类型用于存储大的数据对象类型,变量存储大的二进制对象的大小<=4GB9.BFILE存放大的二进制数据对象,这些数据文件不放在数据库里,而是放在操作系统的某个目录里,数据库的表里只存放文件的目录。

10.BLOB存放大的二进制数据类型。

变量存储大的二进制对象的位置。

大二进制对象的大小<=4GB.11.存储大的NCHAR字符数据类型每个变量存储大字符对象的位置,该位置指到大字符数据块,大字符对象的大小<=4GB.12.Bind变量绑定变量是在主机环境中定义的变量,在PLSQL中可以绑定变量作为他们将要使用的其他变量,为了在PLSQL环境中声明绑定变量,使用命令variable。

数据库赋值13.变量赋值,在PLSQL编程中,变量赋值是一个值得注意的地方,14.数据库赋值是通过select语句来完成的,每次执行select语句就赋值一次,一般要求被赋值的变量与select中的列名一一对应。

OraclePLSQL学习笔记(块、控制结构、过程、函数、包)

OraclePLSQL学习笔记(块、控制结构、过程、函数、包)

OraclePLSQL学习笔记(块、控制结构、过程、函数、包)Oracle PL/SQL 学习笔记⼀、PL/SQL 块块定义语法:DECLARE/*定义部分——定义常量、变量、复杂数据类型、游标*/BEGIN/*执⾏部分——PL/SQL语句和SQL语句*/EXCEPTION/*异常处理部分——处理运⾏错误*/END;注:PL/SQL中结束输⼊使⽤‘/’字符dbms_output.put_line(“输出的字符串内容”);dbms_output是提供的系统包;put_line 是该包中的过程,⽤于输出字符串信息。

当使⽤dbms_output包时必须要先激活服务器输出激活服务器输出语句: set serveroutput on⽰例:DECLAREstr varchar(5) --变量的定义BEGINSelect name INTO str FROM emp --INTO是将name的值赋值给strwhere empno=$no; --$no是替代变量EXCEPTIONWhen NO_DATA_FOUND then --PL/SQL预定义的异常类型dbms_output.put_line(“输出的字符串内容”);END;变量定义语法:变量名 [CONSTANT] 数据类型 [NOT NULL] [:=|DEFAULT 默认值或函数]--CONSTANT表⽰常量;--:=设置默认值%TYPE属性⽰例:Name emp.ename%TYPE --name与emp表中ename列的类型和长度相同Sex Name%TYPE --sex与name类型和长度相同%ROWTYPE属性语法:变量名表名%ROWTYPE⽰例:Str T1%ROWTYPE--str变量对应T1表中所有列,并且该表中的所有列的类型与长度相同PL/SQL中使⽤的操作符:= --赋值操作符=> --关联操作符|| --连接操作符PL/SQL游标游标定义语法:CURSOR 游标名 IS SQL语句游标名%ISOPEN 判断游标是否已经打开游标名%FOUND SQL语句有作⽤⾏市,其属性值为TRUE;游标名%NOTFOUND SQL语句没有作⽤⾏市,其属性值为TRUE;游标名%ROWCOUNT 返回SQL语句所作⽤的总⾏数注:游标名默认为‘SQL’⼆、 PL/SQL控制语句1、分⽀语句IF 条件 THEN 执⾏操作ELSEIF 条件THEN 执⾏操作ELSE 执⾏操作END IF;2、多重分⽀语句CASE 表达式WHEN 要判断的值 THEN 执⾏操作WHEN 要判断的值 THEN 执⾏操作ELSE 执⾏操作END CASE;3、循环语句⼀WHILE 条件 LOOP执⾏操作···END LOOP;4、循环语句⼆FOR 变量 IN [REVERSE] 起点值 ..终点值 LOOP执⾏操作END LOOP;注:REVERSE表⽰由终点值到起点值循环; ..是固定格式;三、存储过程创建过程语法:create [or replace] procedure procedure_name [ (argment [ { in| in out }] type, argment [ { in | out | in out } ] type { is | as } <类型.变量的说明> ( 注: 不⽤ declare 语句 ) Begin <执⾏部分> exception <可选的异常处理说明> end; l 这⾥的IN表⽰向存储过程传递参数,OUT表⽰从存储过程返回参数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PL/SQL学习笔记PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL 基础语法,结构和组件、以及如何设计并执行一个PL/SQL程序。

PL/SQL的优点从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有的数据管理的便利性,那么你很难想象ORACLE缺了PL/SQL的情形。

PL/SQL不是一个独立的产品,他是一个整合到ORACLE服务器和ORACLE工具中的技术,可以把PL/SQL看作ORACLE服务器内的一个引擎,sql语句执行者处理单个的sql语句,PL/SQL引擎处理PL/SQL 程序块。

当PL/SQL程序块在PL/SQL引擎处理时,ORACLE服务器中的SQL语句执行器处理pl/sql程序块中的SQL语句。

PL/SQL的优点如下:.PL/SQL是一种高性能的基于事务处理的语言,能运行在任何ORACLE环境中,支持所有数据处理命令。

通过使用PL/SQL程序单元处理SQL的数据定义和数据控制元素。

.PL/SQL支持所有SQL数据类型和所有SQL函数,同时支持所有ORACLE对象类型.PL/SQL块可以被命名和存储在ORACLE服务器中,同时也能被其他的PL/SQL程序或SQL 命令调用,任何客户/服务器工具都能访问PL/SQL程序,具有很好的可重用性。

.可以使用ORACLE数据工具管理存储在服务器中的PL/SQL程序的安全性。

可以授权或撤销数据库其他用户访问PL/SQL程序的能力。

.PL/SQL代码可以使用任何ASCII文本编辑器编写,所以对任何ORACLE能够运行的操作系统都是非常便利的.对于SQL,ORACLE必须在同一时间处理每一条SQL语句,在网络环境下这就意味作每一个独立的调用都必须被oracle服务器处理,这就占用大量的服务器时间,同时导致网络拥挤。

而PL/SQL是以整个语句块发给服务器,这就降低了网络拥挤。

PL/SQL块结构PL/SQL是一种块结构的语言,组成PL/SQL程序的单元是逻辑块,一个PL/SQL程序包含了一个或多个逻辑块,每个块都可以划分为三个部分。

与其他语言相同,变量在使用之前必须声明,PL/SQL提供了独立的专门用于处理异常的部分,下面描述了PL/SQL块的不同部分:声明部分(Declaration section)声明部分包含了变量和常量的数据类型和初始值。

这个部分是由关键字DECLARE开始,如果不需要声明变量或常量,那么可以忽略这一部分;需要说明的是游标的声明也在这一部分。

执行部分(Executable section)执行部分是PL/SQL块中的指令部分,由关键字BEGIN开始,所有的可执行语句都放在这一部分,其他的PL/SQL块也可以放在这一部分。

异常处理部分(Exception section)这一部分是可选的,在这一部分中处理异常或错误,对异常处理的详细讨论我们在后面进行。

PL/SQL块语法[DECLARE]---declaration statementsBEGIN---executable statements[EXCEPTION]---exception statementsENDPL/SQL块中的每一条语句都必须以分号结束,SQL语句可以使多行的,但分号表示该语句的结束。

一行中可以有多条SQL语句,他们之间以分号分隔。

每一个PL/SQL块由BEGIN或DECLARE开始,以END结束。

注释由--标示。

PL/SQL块的命名和匿名PL/SQL程序块可以是一个命名的程序块也可以是一个匿名程序块。

匿名程序块可以用在服务器端也可以用在客户端。

命名程序块可以出现在其他PL/SQL程序块的声明部分,这方面比较明显的是子程序,子程序可以在执行部分引用,也可以在异常处理部分引用。

PL/SQL程序块可背独立编译并存储在数据库中,任何与数据库相连接的应用程序都可以访问这些存储的PL/SQL程序块。

ORACLE提供了四种类型的可存储的程序:.函数.过程.包.触发器函数函数是命名了的、存储在数据库中的PL/SQL程序块。

函数接受零个或多个输入参数,有一个返回值,返回值的数据类型在创建函数时定义。

定义函数的语法如下:FUNCTION name[(parameter[,parameter,...])]RETURN datatypes IS[local declarations]BEGINexecute statements[EXCEPTIONexception handlers]END[name]过程存储过程是一个PL/SQL程序块,接受零个或多个参数作为输入(INPUT)或输出(OUTPUT)、或既作输入又作输出(INOUT),与函数不同,存储过程没有返回值,存储过程不能由SQL语句直接使用,只能通过EXECUT命令或PL/SQL程序块内部调用,定义存储过程的语法如下:PROCEDURE name[(parameter[,parameter,...])]IS[local declarations]BEGINexecute statements[EXCEPTIONexception handlers]END[name]包(package)包其实就是被组合在一起的相关对象的集合,当包中任何函数或存储过程被调用,包就被加载入内存中,包中的任何函数或存储过程的子程序访问速度将大大加快。

包由两个部分组成:规范和包主体(body),规范描述变量、常量、游标、和子程序,包体完全定义子程序和游标。

触发器(trigger)触发器与一个表或数据库事件联系在一起的,当一个触发器事件发生时,定义在表上的触发器被触发。

变量和常量变量存放在内存中以获得值,能被PL/SQL块引用。

你可以把变量想象成一个可储藏东西的容器,容器内的东西是可以改变的。

声明变量变量一般都在PL/SQL块的声明部分声明,PL/SQL是一种强壮的类型语言,这就是说在引用变量前必须首先声明,要在执行或异常处理部分使用变量,那么变量必须首先在声明部分进行声明。

声明变量的语法如下:Variable_name[CONSTANT]databyte[NOT NULL][:=|DEFAULT expression]注意:可以在声明变量的同时给变量强制性的加上NOT NULL约束条件,此时变量在初始化时必须赋值。

给变量赋值给变量赋值有两种方式:.直接给变量赋值X:=200;Y=Y+(X*20);.通过SQL SELECT INTO或FETCH INTO给变量赋值SELECT SUM(SALARY),SUM(SALARY*0.1)INTO TOTAL_SALARY,TATAL_COMMISSIONFROM EMPLOYEEWHERE DEPT=10;常量常量与变量相似,但常量的值在程序内部不能改变,常量的值在定义时赋予,,他的声明方式与变量相似,但必须包括关键字CONSTANT。

常量和变量都可被定义为SQL和用户定义的数据类型。

ZERO_VALUE CONSTANT NUMBER:=0;这个语句定了一个名叫ZERO_VALUE、数据类型是NUMBER、值为0的常量。

标量(scalar)数据类型标量(scalar)数据类型没有内部组件,他们大致可分为以下四类:.number.character.date/time.boolean表1显示了数字数据类型;表2显示了字符数据类型;表3显示了日期和布尔数据类型。

表1Scalar Types:NumericDatatype Range Subtypes descriptionBINARY_INTEGER-214748-2147483647NATURALNATURALNPOSITIVEPOSITIVENSIGNTYPE 用于存储单字节整数。

要求存储长度低于NUMBER值。

用于限制范围的子类型(SUBTYPE): NATURAL:用于非负数POSITIVE:只用于正数NATURALN:只用于非负数和非NULL值POSITIVEN:只用于正数,不能用于NULL 值SIGNTYPE:只有值:-1、0或1.NUMBER 1.0E-130-9.99E125DECDECIMALDOUBLEPRECISIONFLOATINTEGERICINTNUMERICREALSMALLINT 存储数字值,包括整数和浮点数。

可以选择精度和刻度方式,语法:number[([,])]。

缺省的精度是38,scale是0.PLS_INTEGER-2147483647-2147483647与BINARY_INTEGER基本相同,但采用机器运算时,PLS_INTEGER提供更好的性能。

表2字符数据类型datatype rang subtype descriptionCHAR 最大长度32767字节CHARACTER存储定长字符串,如果长度没有确定,缺省是1LONG 最大长度2147483647字节存储可变长度字符串RAW 最大长度32767字节用于存储二进制数据和字节字符串,当在两个数据库之间进行传递时,RAW数据不在字符集之间进行转换。

LONGRAW最大长度与LONG数据类型相似,同样他也不能在字符集之2147483647间进行转换。

ROWID18个字节与数据库ROWID伪列类型相同,能够存储一个行标示符,可以将行标示符看作数据库中每一行的唯一键值。

VARCHAR2最大长度32767字节STRINGVARCHAR与VARCHAR数据类型相似,存储可变长度的字符串。

声明方法与VARCHAR相同表3DATE和BOOLEANdatatype range descriptionBOOLEAN TRUE/FALSE存储逻辑值TRUE或FALSE,无参数DATE01/01/4712BC存储固定长的日期和时间值,日期值中包含时间LOB数据类型LOB(大对象,Large object)数据类型用于存储类似图像,声音这样的大型数据对象,LOB数据对象可以是二进制数据也可以是字符数据,其最大长度不超过4G。

LOB数据类型支持任意访问方式,LONG只支持顺序访问方式。

LOB存储在一个单独的位置上,同时一个"LOB定位符"(LOB locator)存储在原始的表中,该定位符是一个指向实际数据的指针。

在PL/SQL中操作LOB数据对象使用ORACLE提供的包DBMS_LOB.LOB数据类型可分为以下四类:.BFILE.BLOB.CLOB.NCLOB操作符与其他程序设计语言相同,PL/SQL有一系列操作符。

相关文档
最新文档