精通 oracle 10g plsql 编程-学习笔记
plsql学习笔记
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||'行');
Oracle数据库学习笔记(含PLSQL)
建议在PLSql Develeper 工具中查看,阅读/*Oracle学习笔记*/SQLPlus:所谓的SQLPlus,就是oracle数据库的一个客户端。
登录sqlplus的几种方式:1 命令行版的sqlplus:在dos窗口中直接输入sqlplus,则需要你输入用户名和密码,进入oracle的命令行了,即进入了oracle的客户端。
2 图形版的sqlplus:开始程序处执行。
3 浏览器模式isqlplus:http://127.0.0.1:5560/isqlplus/ --5560是oracle的端口号,通过这个方式可以访问其他ip主机的oracle4 oracle常用的客户端软件:Toad(英文意思蛤蟆)/*数据库管理的时候常用*/,PL/SQL Developer(常用)/*需要在本地的oracle客户端也装上oracle*/,相比之下,isqlplus较为好用,在客户端不需要装任何东西,只需要一个浏览器就可访问----------------------------------------dos命令:1 sqlplus sys/bjsxt AS SYSDBA; --as sysdba代表以数据库管理员的身份登录2 ALTER USER scott ACCOUNT UNLOCK; --将用户scott解锁------------------------------------------------------------------------------------------------------------------------------------------SQL语言SQL(Structured Query Language)SQL是关系数据库的标准语言,到现在为止,有两个标准:1992年定义的SQL/92和1999年定义的SQL99,SQL在大多数的数据库上通用,只是不同的数据库对于SQL语言都有那么一点小的改变。
Oracle 10G 数据库学习笔记
Oracle 10G 数据库学习笔记备份exp运行-CMD EXP超级管理员:sys change_on_install普通管理员:system manager普通用户:scott tiger --------默认是锁定大数据用户:sh sh恢复IMP 运行--CMD--IMP导入文件:输入绝对物理路径如d:\.DMPOracle 10G 不同启动:服务之中,有以下两个服务是最为重要的:1、监听服务(远程的客户端要连接数据库则必须启动)Oracle ORADB10g_home1TNSListener2、数据库的实例服务:Oracle service ORACL保存数据库的具体信息的服务,每一个数据库有一个数据实例命名规则:oracle service XXX 其XXX是数据库名的(SID名称)监听问题:错误一:注册表出错:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleOraDb10g_home1TN SListener 里面有一个ImagePath 数据不见错误二:网络环境出错(计算机名称变动)修改配置文件:D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN文件1:tnsnames.ora HOST=PC计算机名NTDP =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = NTDP)(PORT = 1521))(CONNECT_DA TA =(SERVER = DEDICATED)(SERVICE_NAME = NTDP)))文件2:listener.ora HOST=PC计算机名LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))(ADDRESS = (PROTOCOL = TCP)(HOST = NTDP)(PORT = 1521))))打开ORARCLE 配置移植工具下-----NET MANAGER添加数据库:全局数据库名:NTDPORACLE主目录:SID:NTDP 监听状态检查命令:lsnrctl.exeEm启动问题:OracleDBCcnsolenNTDP 服务没有启动先删除:EM服务删除:emca -repos dropC:\Documents and Settings\Administrator>emca -repos dropEMCA 开始于2012-8-2 21:17:29EM Configuration Assistant 10.2.0.1.0 正式版版权所有(c) 2003, 2005, Oracle。
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相同。
ORACLE PL SQL学习笔记
Oracle学习笔记1第一章PL/SQL简介1.1块结构(Block)DECLARE--declarative section/*声明部分,声明变量(variables)、类型(types)、游标(cursors)和局部子程序*/BEGIN--executable section/*执行部分,放置过程性语句(procedural statement)*或SQL语句(SQL statemnet)。
*这是主体,是必须的。
*/EXCTPTION--exception section/*错误处理部分*/END;//“;”很关键,不要忘记1.2变量和类型(variables and types)支持各种常用的数据库类型,还支持用户自定义类型,如表(table)、记录(record)。
还支持对象类型。
1.3注释(comment)Oracle的PL/SQL支持"--"和“/**/”的注释风格。
2第二章PL/SQL基础2.1PL/SQL块匿名块(anonymous)动态生成,只执行一次。
带名块(named)是带有标签的匿名块,动态生成,只执行一次。
子程序(subprogram)是存储在数据库内部的过程、函数和包。
可多次执行。
触发器(trigger)是存储在数据库内部的带名块,可多次执行。
由触发事件(triggering event)来触发。
2.2词法单位(lexical unit)包括标识符(identifier)、分界符(delimiter)、文字(literal)和注释(comment)2.2.1标识符(identifier)PL/SQL对大小写不敏感。
最长30位。
a)保留字(reserved word)或关键字(keyword),保留字单独使用时是保留的,但可以出现在其他标识符的内部。
如:下面的用法是合法的,尽管“Date”是保留字。
DECLAREv_BeginDate Date;b)引号标识符(quoted identifier)如果想要标识符大小写敏感,如在标识符中出现空格这样的字符或使用一个保留字,那么必须使用引号标识符。
Oracle 10g 学习记录
目录目录 (1)1.Oracle安装及体系结构 (2)1.1 Oracle 安装 (2)1.2 内存结构(Oracle Memory Structures) (2)1.3 进程结构(Process Structures) (3)1.4 实例管理(Oracle Instance Management) (3)1.5 物理结构(Physical Database Structure) (4)1.6 逻辑结构 (4)2. SQL*PLUS基础 (5)2.1 数据库的启动(startup) (5)2.2 数据库的关闭(SHUTDOWN) (6)2.3 SQLPlus 常用命令 (7)3.SQL语言基础 (8)3.1语言分类 (8)3.2常用SQL命令 (8)3.3常用函数 (9)4.视图、同义词、序列 (10)4.1视图 (10)4.2同义词 (11)4.3序列 (11)5.安全管理 (12)1.Oracle安装及体系结构1.1 Oracle 安装Oracle10g 安装1.2 内存结构(Oracle Memory Structures)内存可以分为SGA(系统全局区)和PGA(程序全局区)组成系统全局区(SGA System Global Area)每个例程都只有一个SGA区,当多个用户同时链接到一个例程时,所有的用户进程、服务器进程都可以共同使用SGA区,数据库的各种操作主要都是在SGA区中进行,创建例程时ORACLE 为SGA区分配内存;终止例程时释放SGA区内存。
SGA区可以分为如下几个部分:1.数据高速缓存池(Database buffer cache):保存的是最近从数据文件中读取的数据块;或存储最近经常使用的数据,其中的数据可以被所有用户共享,其中包括3个缓存池,a)保持缓存池其中数据将长期保存在内存中直到关闭数据库为止;b)再生缓存池其中的数据一旦使用完毕就会被从内存中换出;c)默认缓存池如果没有为对象指定所使用的缓存池,就将其数据放在默认缓存池中。
[VIP专享]Oracle_10g_plsql实战笔记
1) B2Ak+22+1=2+15+c51mc+=m5=21c11+m++12+2+1++=212=2+1+2+1+2+2+22+32k+1+2
}
--打开输出选项 set serveroutput on; --关闭输出选项 set serveroutput off;
exec sp_pro3(‘SCOTT’,4890); //娱乐测试
1) B2Ak+22+1=2+15+c51mc+=m5=21c11+m++12+2+1++=212=2+1+2+1+2+2+22+32k+1+2
I mplicit / explicit Collections (集合)
Varray - 数组 Nested table – 集合 Associative Arrays – (hash table) Records DECLARE TYPE timerec IS RECORD (hours SMALLINT, minutes SMALLINT); 对象类型 CREATE TYPE employee_typ AS OBJECT CREATE TYPE BODY employee_typ AS
1 编写一个存储过程,该过程可以向某表中添加记录 1) 创建一个简单的表 create table mytest(name varchar2(30),passwd varchar2(30)); 2)创建过程: create or replace procedure sp_pro1 is bgin 3)执行部分 insert into mytest values('zhangsan','zhangsan'); 4) 结束 end; 5) /
《Oracle 10g入门与提高》第6章:PL、SQL程序设计
数据类型
NULL]{DEFAULT|:=}];
[[NOT
PL/SQL的数据类型与相关的子类型
数据类型
子类
描述
BINARY_INTEG ER
NATURAL、 NATURALN、 POSITIVE、 POSITIVEN、
SIGNTYPE
存储范围在-2 147 483 647到2 147 483 647之间的有符号整数。使用数学库, NATURAL与NATURALN只存储非负 整数,后者不允许存储0;POSITIVE 和POSITIVEN只存储正数,后者不允 许存储0。SIGNTYPE只存储-1、0和
SQL代 码
-6511
说明 试图打开一个已经打开了的游标
DUP_VAL_ON_INDEX INVALID_CURSOR INVALID_NUMBER LOGIN_DENIED NO_DATA_FOUND NOT_LOGGED_ON
子程序的依赖性 子程序的执行权限
6.6 触 发 器
触发器(trigger)是一些过程,当发生一个特定 的数据库事件时就执行这些过程
触发器的适用情况
• 维护在表创建阶段通过声明限制无法实现的复杂完 整性限制
• 通过记录修改内容和修改者来审计表中的信息 • 在表内容发生变更时,自动通知其他程序采取相应
PL/SQL的数据类型与相关的子类型
数据类型 ROWID
子类
描述 存储数据库表每一行的物理地址
ROWID
存储数据库表每一行的物理地址
UROWID
CLOB BLOB BFILE BOOLEAN
存储数据库表中每一行的物理的、逻辑的或外部的 (非Oracle的)地址
存储巨型、单字节字符对象
oracle学习笔记-plsql(1)
pl/sql(1)上次课程内容回顾oracle 的内部结构创建表空间 create tablespace 表空间名字 datafile '数据文件的路径' size 数据文件的初始化的大小;创建用户create user 用户名 identified by 密码 default tablespace 表空间名字修改用户密码 alter user 用户名 identified by 密码授权 grant connect,reource,dba to 用户名回收权限 revoke 角色名 from 用户名创建目录 create directory 目录名 as 文件夹路径grant read,write on directory 目录名 to 用户expdp/impdp 用户名/密码 directory=目录名 dumpfile=导入或者导出文件的名称 schemas=要导入的用户的名称 remap_schema=导出的用户名:导入的用户名分页 rownum本次课程内容pl sql 是什么pl sql 的块pl sql的变量和常量pl sql的数据类型pl sql 条件分支pl sql 循环pl sql 异常处理pl sql 事务处理本次课程内容pl sql 是什么sql 是什么结构化查询语言。
sql 是不是编程语言?编程语言我们学过 java ,js ,c ,c# ,c++ ,python等都是编程语言,编程语言有什么特征?编程语言都可以声明变量,都有变量类型,都能写条件判断,写循环处理。
编程语言有了这些特性,才可以使用编程语言写业务逻辑。
有的时候,实际上我们想把业务逻辑写到数据库中,如果只用sql是不行的,因为sql没有编程语言的特征,oracle的开发者就开发出一个pl sql 来解决这个问题。
pl sql就是编程语言的特征+sql语句。
这样我们就可以使用pl sql在数据库中写业务逻辑了。
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.创建一个嵌套表类型的数据库类型对象。
表示学生实体集合类型。
该类型也将用作函数中定义的返回类型。
(注意:此类型必须定义为数据库对象级别的类型,而不能定义成包、函数级别的类型。
oracle database 11g,plsql 编程实战笔记资料
Chap1DML语句是select 、insert、update、delete和mergeDDL语句是create、alter、drop、rename、truncate、commentDCL语句是grant、revokeTCL语句是commit、rollback和savepointsql16个基本命令——参考书《OCA认证考试指南(IZ0-051)》清华大学出版社《oracle database sql language reference 11g》有非遵循格式字符串依赖于格式掩码chap22.1.3 关于语句中有多个单引号时处理:1、select'It''s a bird,no plan can''t be 'as pharsefrom dual; 此处两个单引号即为一个单引号2、只能用q 再加’(语句)’select q'(It's a bird,no plan can't be)'as pharsefrom dual;均输出PHARSE----------------------------It's a bird,no plan can't be2.1.4定义变量与申明变量的区别:定义变量即为变量分配名称并指定数据类型;申明变量首先需要定义变量,然后为其赋值。
(赋值也称为初始化)替代变量前面要加&前缀且若替代变量为字符型时要加两个单引号如’&a’declarelv_whom varchar2(20);/*lv-whom为申明变量,a为替代变量,a没有变量类型*/beginlv_whom := '&a';end;或者declarelv_whom varchar2(20);beginlv_whom := &a;end;但是要在输入框中字符加两个单引号替代变量用define申明,且定义时不可以指定类型,默认为char型①Define x=emp;Select * from &x; /*调用要用&,此处不加单引号,解析后即为emp表*/② define x=adasd;select'&x' z from dual;/*此处解析后变为select' adasd ' z from dual ,此处必须要有单引号,使adasd作为直接变量,否则出错*/所以替代变量是否加单引号要根据解析的值来确定注意:避免在声明块中将任何实参赋给局部变量(constant变量除外),且替代变量与绑定变量都不应该在声明块中赋值定义为constant的变量,必须在申明块中申明,这意味着常量必须先定义,再给他赋一个不变的值绑定变量(bind)用var或variable申明使用冒号(:)作为前缀var a numberbegin:a := 22;end;上面也可以输出结果,下面也可以输出结果,但二者不能同时放一块print a; /*此处a前面不能加冒号,print可用来输出所有类型的变量*/另外也可通过exec直接给绑定变量赋值:SQL> var x number /*必须要先定义再赋值,而替代变量定义时不需指定类型,直接赋值即可*/SQL> var y numberSQL> exec :x :=1;:y :=2;/*exec 等价于begin … end*/PL/SQL procedure successfully completedx---------1y---------2也可以先定义好绑定变量,再将其赋给其他变量:var a numberbegin:a := 22;end;现将其运行再declarelv_a number;beginlv_a:= :a;dbms_output.put_line('hello,'||lv_a||'.');end;结果:hello,22.将上面的代码放入到d:\q.sql中用@d:\q.sql;调用即可,但是里面的代码要正确2.1.5命名块1、过程块create or replace procedure abc (aa varchar2) isbegindbms_output.put_line('sdhl'||aa);end;exec abc('dkjdhhdj');可能出现错误一:【ORA-00955: 名称已由现有对象使用】这个错误说的不仅仅是有可能你有存储过程使用了【abc】,还有可能是你有表名叫【abc】或者其他oracle对象叫【abc】。
Oracle PLSQL学习笔记
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笔记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笔记1. Oracle应用编辑方法概览答:1) Pro*C/C++/... : C语言和数据库打交道的方法,比OCI更常用; 2) ODBC3) OCI: C语言和数据库打交道的方法,和ProC很相似,更底层,很少用; 4) SQLJ: 很新的一种用Java访问Oracle数据库的方法,会的人不多; 5) JDBC6) PL/SQL: 存储在数据内运行, 其他方法为在数据库外对数据库访问;2. PL/SQL答:1) PL/SQL(Procedual language/SQL)是在标准SQL的基础上增加了过程化处理的语言;2) Oracle客户端工具访问Oracle服务器的操作语言; 3) Oracle对SQL的扩充;4. PL/SQL的优缺点答:优点:1) 结构化模块化编程,不是面向对象;2) 良好的可移植性(不管Oracle运行在何种操作系统); 3) 良好的可维护性(编译通过后存储在数据库里); 4) 提升系统性能;缺点1) 不便于向异构数据库移植应用程序(只能用于Oracle);5. SQL与PL/SQL的区别答:SQL:1) 第四代语言(智能语言); 2) 做什么,不管怎么做;3) 缺少过程与控制语句; 4) 无算法PL/SQL: 1) 扩展变量和类型; 2) 扩展控制结构; 3) 扩展过程与函数; 4) 扩展对象类型与方法第二章PL/SQL程序结构1. PL/SQL块答:1) 申明部分, DECLARE(不可少); 2) 执行部分, BEGIN...END;3) 异常处理,EXCEPTION(可以没有);2. PL/SQL开发环境答:可以运用任何纯文本的编辑器编辑,例如:VI3. PL/SQL字符集答:PL/SQL对大小写不敏感4. 标识符命名规则答:1) 字母开头;2) 后跟任意的非空格字符、数字、货币符号、下划线、或# ; 3) 最大长度为30个字符(八个字符左右最合适);5. 变量声明答:语法Var_name type [CONSTANT][NOT NULL][:=value]; 注:1) 申明时可以有默认值也可以没有;2) 如有[CONSTANT][NOT NULL], 变量一定要有一个初始值; 3) 赋值语句为“:=”;4) 变量可以认为是数据库里一个字段; 5) 规定没有初始化的变量为NULL;第三章1. 数据类型答:1) 标量型:数字型、字符型、布尔型、日期型;2) 组合型:RECORD(常用)、TABLE(常用)、VARRAY(较少用) 3) 参考型:REF CURSOR(游标)、REF object_type 4) LOB(Large Object)2. %TYPE答:变量具有与数据库的表中某一字段相同的类型例:v_FirstName studengts.first_name%TYPE;3. RECORD类型答:TYPE record_name IS RECORD( /*其中TYPE,IS,RECORD为关键字,record_name为变量名称*/field1 type [NOT NULL][:=expr1], /*每个等价的成员间用逗号分隔*/field2 type [NOT NULL][:=expr2], /*如果一个字段限定NOT NULL,那么它必须拥有一个初始值*/... /*所有没有初始化的字段都会初始为NULL fieldn type [NOT NULL][:=exprn]);4. %ROWTYPE答:返回一个基于数据库定义的类型DECLAREv_StuRec Student%ROWTYPE; /*Student为表的名字*/注:与3中定一个record相比,一步就完成,而3中定义分二步:a. 所有的成员变量都要申明; b. 实例化变量;5. TABLE类型答:TYPE tabletype IS TABLE OF type INDEX BY BINARY_INTEGER; 例:DECLARETYPE t_StuTable IS TABLE OF Student%ROWTYPE INDEX BINARY_INTERGER;v_Student t_StuTable; BEGINSELECT * INTO v_Student(100) FROM Student WHERE id = 1001; END;注:1) 行的数目的限制由BINARY_INTEGER的范围决定;6. 变量的作用域和可见性答:1) 执行块里可以嵌入执行块; 2) 里层执行块的变量对外层不可见;3) 里层执行块对外层执行块变量的修改会影响外层块变量的值;BY感谢您的阅读,祝您生活愉快。
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异常传递:没有处理的异常将沿检测异常调用程序传播到外面,在异常部分抛出的异常将控制转到上一层的异常部分。
oracle10g学习笔记
v$fixed_table包含常用的动态性能view和table,如:select name from v$fixed_table where name like 'V$%';
v$instance
v$sga
v$sgainfo
v$parameter
v$version
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
##############################################
oracle启动过程:
1. 启动例程nomount: 启动例程时,首先读取参数文件,然后分配SGA并启动后台进程,同时打开预警文件和后台跟踪文件。
多个数据库共用一个监听的配置如下:
listener.ora内容:
SID_LIST_LISTENER =
(SID_LIST =
# (SID_DESC =
# (SID_NAME = PLSExtProc)
# (ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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行。
●当执行select 语句时,如果选择列表同时包含列、表达式和分组函数,那么这些列和表达式必须出现在group by 子句中。
●当使用分组函数时,在分组函数中可以指定all 和distinct 选项。
其中all默认选项,该选项表示统计所有行数据(包括重复行);如果指定distinct,则只会统计不同行值。
4.4.2.GROUP BY 和HA VING4.4.3.ROLLUP 和CUBEROLLUP和CUBE用来产出横向、纵向的统计结果。
示例一:使用ROLLUP操作符:生成横向小计SELECT deptno,job,avg(sal) FROM emp GROUP BY ROLLUP(deptno,job);示例二:使用CUBE操作符:生成数据统计、横向小计、纵向小计结果。
SELECT deptno,job,avg(sal) FROM emp GROUP BY CUBE(deptno,job);示例三:使用GROUPING函数GROUPING函数用于统计结果是否用到了特定列。
Select deptno,job,avg(sal),grouping(deptno),grouping(job)FROM emp GROUP BY cube(detpno,job);4.4.4.GROUPING SETS示例一:显示部门平均工资:SELECT deptno,avg(sal) FROM emp GROUP BY deptno;示例二:显示岗位平均工资SELECT job,avg(sal) FROM emp GROUP BY job;示例三:同时显示部门平均工资和岗位平均工资:SELECT deptno,job,avg(sal) FROM emp GROUP BY GROUPING SETS(deptno,job);4.5.连接查询4.6.子查询4.6.1.单行子查询4.6.2.多行子查询4.6.3.多列子查询SELECT ename,job,sal,deptno FROM emp WHERE (deptno,job)=SELECT deptno,job FROM emp WHERE ename=’SMITH’);4.7.合并查询操作符包括:union,union all,intersect 和minusINTERSECT 操作符用于获取两个结果集的交集。
MINUS操作符用于获取两个结果集的差集。
4.8.其他复杂查询4.8.1.层次查询4.8.2.使用CASE 表达式4.8.3.倒叙查询查看当前数据:SELECT ename,sal FROM emp WHERE ename=’CLARK’;查看历史数据:SELECT ename,sal FROM emp AS OF TIMESTAMP ot_timestamp( ‘2003-05-18 19:59:00’,’YYYY-MM-DD HH24:MI:SS’)WHERE ename=’CLARK’;使用DBMS_FLASHBACK 包获取特定SCN的数据Exec dbms_flashback.enable_at_system_change_num(717402);Select sal from emp where ename=’SCOTT’;Exec dbms_flashback..distableSelect sal from emp where ename=’SCOTT’;4.8.4.使用WITH子句重用子查询通过with 子句可以给子查询指定一个名称,并且使得在一条语句中可以完成所有任务,从而避免了使用临时表。
示例一:显示部门工资总和高于雇员工资总和三分之一的部门名及工资总和(两次使用相同子查询)SELECT dname,sum(sal) as dept_total FROM scott.emp emp,scott.dept dept WHERE emp.deptno=dept.deptno GROUP BY dnameHAVING sum(sal)>(SELECT sum(sal)*1/3FROM scott.emp emp,scott.dept dept WHERE emp.deptno=dept.deptno);示例一:显示部门工资总和高于雇员工资总和三分之一的部门名及工资总和(使用with子句重用子查询)WITH summary AS (SELECT dname,sum(sal) as dept_total FROM scott.emp emp,scott.dept dept WHERE emp.deptno=dept.deptno GROUP BY dname)SELECT dname,dept_total FROM summary WHERE dept_total>(SELECT sum(dept_total)*1/3FROM summary )5.SQL函数学习目标:●在SQL语句和PL/SQL 块中使用数字函数;●在SQL语句和PL/SQL 语句中使用字符函数;●在SQL语句和PL/SQL 语句中使用日期函数;●在SQL语句和PL/SQL 语句中使用转换函数;●在SQL语句和PL/SQL 语句中使用Oracle 10g 新增加的集合函数;●在SQL语句中使用分组函数;●了解并掌握Oracle 10g、Oracle 9i 新增加的SQL函数。
5.1.数字函数5.2.字符函数5.3.日期时间函数5.4.转换函数5.5.集合函数5.6.其他单行函数5.7.分组函数5.8.对象函数6.访问Oracle学习目标:●在PL/SQL块中检索单行数据;●在PL/SQL 块中嵌入DML语句;●使用SQL游标属性;●在PL/SQL块中嵌入事务控制语句。