oracle-database-11g-plsql-编程实战笔记
『ORACLE』PLSQL动态游标的使用(11g)
『ORACLE』PLSQL动态游标的使⽤(11g)#静态游标指的是程序执⾏的时候不需要再去解析sql语⾔,对于sql语句的解析在编译的时候就可以完成的。
动态游标由于含有参数,对于sql语句的解析必须要等到参数确定的时候才能完成。
从这个⾓度来说,静态游标的效率也⽐动态游标更⾼⼀些。
#游标的相关概念: 定义: 游标它是⼀个服务器端的存储区,这个区域提供给⽤户使⽤,在这个区域⾥ 存储的是⽤户通过⼀个查询语句得到的结果集,⽤户通过控制这个游标区域当中 的指针来提取游标中的数据,然后来进⾏操作。
实质: 是⽤户在远程客户端上对服务器内存区域的操作,由数据库为⽤户提供这样的 ⼀个指针,使得⽤户能够去检索服务器内存区的数据。
#游标具有的属性:1、%ISOPEN(确定游标是否已经打开 true or false)2、%FOUND(返回是否从结果集提取到了数据 true or false)3、%NOTFOUND(返回是否从结果集没有提取到数据 true or false)4、%ROWCOUNT(返回到当前为⽌已经提取到的实际⾏数)#游标分类⼀、静态游标1、隐式游标:对于select..into...语句,⼀次只能从数据库中获取到⼀条数据,对于这种类型的DML SQL语句,就是隐式cursorselect update/insert/delete操作2、显⽰游标:由程序员定义和管理,对于从数据库中提取多⾏数据,就需要使⽤显式cursor1)定义游标---cursor [cursor name] is2)打开游标---open [cursor name]3)操作数据---fetch [cursor name]4)关闭游标---close [cursor name]⼆、REF游标1、REF 游标:动态关联结果集的临时对象。
即在运⾏的时候动态决定执⾏查询。
2、REF 游标作⽤:实现在程序间传递结果集的功能,利⽤REF CURSOR也可以实现BULK SQL,从⽽提⾼SQL性能。
Oracle11g--使用PLSQL进行excel、csv、txt文件的数据导入
Oracle11g--使⽤PLSQL进⾏excel、csv、txt⽂件的数据导⼊Oracle 11g -- 使⽤PLSQL进⾏excel、csv、txt⽂件的数据导⼊1、导⼊ txt/csv ⽂件 (使⽤ Text Importer)创建表结构:create table student(id int,name varchar(255),birthday varchar(255),sex varchar(255))创建表数据-student.txt(分隔符为’\t’):01 赵雷 1990-01-01 男02 钱电 1990-12-21 男03 孙风 1990-05-20 男04 李云 1990-08-06 男05 周梅 1991-12-01 ⼥06 吴兰 1992-03-01 ⼥07 郑⽵ 1989-07-01 ⼥08 王菊 1990-01-20 ⼥使⽤Text Importer导⼊⼯具:然后点击下⽅的import进⾏导⼊。
遇到问题:解决⽅法:原始数据的⽇期是⽤”-”分隔开的,并不是默认的⽇期数字的形式,这⾥可以不使⽤to_date()进⾏转换,保留原来的格式即可。
再次import即可导⼊成功,查询数据如下:注:如果有主键约束会⾃动覆盖掉相同键的记录2、导⼊excel⽂件(excel转csv)准备的excel⽂件如下:清空Oracle中表student的数据:truncate table student;1)尝试导⼊⼀:使⽤ODBC Importer导⼊⼯具User/System DSN中没有选项,并且出现问题:解决过程(fail了):⾃⼰电脑是64位系统,⽽ODBC数据源管理程序是32位的,需要⼿动添加新excel数据源DSN驱动:运⾏C:\Windows\SysWOW64\odbcad32.exe点击添加,选择如下图所⽰Microsoft Excel Driver(*.xls)但是重启PLSQL或是服务之后还是识别不到新增的驱动。
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语言都有那么一点小的改变。
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 表示某张表的记录类型或者是用户指定以的记录类型,使用此属性可以很方便的定义一个变量,其类型与某张表的记录或者自定义的记录类型保持一致。
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 11g 管理与编程基础Chapt11 PLSQL基础
PL/SQL控制结构(条件控制续2)
普通case语句语法: Case selector when expression1 then statement1; when expression2 then statement2; ...... when expressionN then statementN; [else statementN+1;] End case
PL/SQL procedure successfully completed.
变量声明为not null必须指定默 认值
SQL> DECLARE 2 v_newmajor VARCHAR2(10) not null:='History'; 3 v_firstname VARCHAR2(10) not null :='Scott'; 4 v_lastname VARCHAR2(10) default 'Urman'; 5 BEGIN 6 dbms_output.PUT_LINE(v_newmajor); 7 End; 8 / History PL/SQL procedure successfully completed.
1 PL/SQL概述(续2)
update students set major=‘计算机’ where s_name=‘文华’
获取update的结果
update是否 成功
是
否 insert into students (s_id, s_name, s_major) values (1009, ‘文华’, ‘计算机’)
PL/SQL数据类型之间转换
函
TO_DATE TO_NUMBER CHARTOROWID
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)如果想要标识符大小写敏感,如在标识符中出现空格这样的字符或使用一个保留字,那么必须使用引号标识符。
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函数将数值型结果转换为字符型。
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.创建一个嵌套表类型的数据库类型对象。
表示学生实体集合类型。
该类型也将用作函数中定义的返回类型。
(注意:此类型必须定义为数据库对象级别的类型,而不能定义成包、函数级别的类型。
oracle11gr2学习笔记
ORACLE11gR2学习笔记<一>PL/SQL Developer(64位)远程连接64位oracle11gR2数据库(数据库在vmware)前言:自PL/SQL Developer出了64位版本以后,本人亲测试验安装,现分享给大家。
有的人可能已经在32位的PL/SQL Developer 上安装起来了,可以略过。
一:首先配置监听器(Listener)监听器是Oracle基于服务器端的一种网络服务,主要用于监听客户端向数据库服务器端提出的连接请求。
既然是基于服务器端的服务,那么它也只存在于数据库服务器端,进行监听器的设置也是在数据库服务器端完成的。
配置如下图:1:首先打开”运行”窗口输入cmd命令,然后输入netca打开监听配置页面;2:打开后弹出如下窗口3:先配件监听程序,因为我本机已经配置好,所以我选重新配置,第一次配置的朋友选择添加,如下图:二:然后配件本地网络服务名本地服务名是基于Oracle客户端的网络配置,所以,如果客户端需要连接数据库服务器进行操作,则需要配置该客户端,其依附对象可以是任意一台欲连接数据库服务器进行操作的PC机,也可以是数据库服务器自身。
1:配置如下图注意:因为我创建的数据库是ORCL,所以选择ORCL;注意:这里的主机名与端口号必须与数据库服务器端监听器配置的主机名和端口号相同。
3:最后打开Net Manage检查下前面所做的配置如下图:注意:如果有修改,最后别忘记点下保存网络配置;二:安装pl/sql developer(x64)和instantclient-basic-windows.x64-11.2.0.4.0.zip 1:首先去网上下这个两个软件,然后先解压instantclient-basic-windows.x64-11.2.0.4.0.zip(下载64位版本)到客户端任意磁盘的根目录,如图,然后在oracle服务端拷贝一份tnsnames.ora(C:\app\product\11.2.0\dbhome_1\NETWORK\ADMIN)到C:\instantclient_11_2目录下,打开编辑如下:2:安装64位版本PL/SQL Developer,安装过程这里省略;3:配置PL/SQL Developer,打开工具-->首选项-->连接,然后配置如图:(第一次打开软件先点取消登陆)注意:Oracle主目录名也可以为:OraDb11g_home1三:配置操作系统(本人是windows7x64)环境变量1:添加环境变量NLS_LANG=AMERICAN_AMERICA.ZHS16GBKTNS_ADMIN=C:\instantclient_11_22:在系统环境变量中配置Path,添加instantclient的路径,即C:\instantclient_11_2如图;到此PL/SQL Developer就全部配置完成了,我截图给大家看下:<二>干净地卸载oracle数据库1:步骤如下图:<三>oracle监听器1:启动监听器-lsnrctl start LISTENER;//listener是监听器的名字,如果没有指定监听器的名字,则该命令将启动默认的监听器。
PLSQL使用学习笔记
一、创建表空间1、使用system用户,登陆全局数据库orcl2、打开SQL Window3、输入表空间生成代码createtablespace ANTI_ESCAPEdatafile'D:\ProgramFiles\Oracle\oradata\orcl\ANTI_ESCAPE__TBSPACE.dbf' size 100M autoextend on next 50M maxsize unlimited;4、执行成功后,可在Tablespaces文件夹下,找到新生成的表空间二、创建用户1、找到Users文件夹2、右键新建用户3、在弹出的“创建用户”窗口中,输入新用户的名称、口令,默认表空间、临时表空间等用户只有在指定了表空间后,才能访问指定的表空间,其他的表空间,是不能访问的。
这跟mysql不一样。
4、赋予新用户权限,赋予其角色权限:connect、resource,这样用户才能登录操作数据库通常会分配给用户DBA权限,拥有DBA角色的用户几乎可以做任何事情了。
三、用新建用户登录四、执行SQL,导入Tables1、新建Command Window2、在Editor中Load脚本文件五、导出1、Export tables(数据)PL/SQL Developer 导出表数据打开PL/SQL Developer,登录选择菜单,工具->导出用户表有三种导出方式附录:Oracle Export,Sql Insert,pl/sql developer第一种是导出为.dmp的文件格式,.dmp文件是二进制的,可以跨平台,还能包含权限,效率也很不错,用得最广第二种是导出为.sql文件的,可用文本编辑器查看,通用性比较好,但效率不如第一种,适合小数据量导入导出。
尤其注意的是表中不能有大字段(blob,clob,long),如果有,会提示不能导出(提示如下:table contains one or more LONG columns cannot export in sqlformat,user Pl/sql developer format instead),可以用第一种和第三种方式导出。
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编程笔记
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笔记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或“:=”运算符为变量初始化。
Oracle11g学习笔记四
SQL语句一、数据表的创建及管理对于数据库而言实际上每一张表都表示的是对一个数据库的对象,而数据库对象指的就是DDL定义的所有操作,例如:表、试图、索引、序列、约束等,都属于对象的操作,所以表的建立就是对象的建立,而对对象的操作主要分为三类:●创建对新疆:CREATE对象名....;●删除对象:DROP对象名....;●修改对象:ALTER对象名称...;1、常用的数据字段每一张数据表实际上都是又若干个字段组成,而每一个字段都会有对应的数据类型,在Oracle中常用的数据类型有以下几种:No. 数据类型关键字描述1 字符串V ARCHAR2(n) 其中n表示的字符串所能存储的最大长度,基本上保存200左右2 整数NUMBER(n) 表示最多为n位的整数,有时也能用int代替3 小数NUMBER(n.m) 其中m为小数的位数,n-m为整数的位数,有时也用FLOAT代替4 日期DA TE 可以存放日期5 大文本CLOB 可以存储海量的文字(4G)6 大对象BLOB 可存放二进制,例如:电影MP3 文字图片等一般的开发之中使用最多的就是:V ARCHAR2()、NUMBER、DATE、CLOB,而BLOB 使用较少。
BLOB虽然可以存放4G的二进制数据,但是存放进去之后会导致数据库过于庞大而且读取不方便。
2、数据表的创建创建表的语法如下:CREATE TABLE 表名称(字段1 数据类型[DEFAULT 默认值] ,字段2 数据类型[DEFAULT 默认值] ,........字段n 数据类型[DEFAULT 默认值]) ;下面创建一张成员表(member),有如下的信息:姓名、年龄、生日、个人简介CREATE TABLE member(name V ARVHAR2(50) DEFAULT ‘无名氏’,age NUMBER(3) ,Birthday DATE DEFAULT SYSTEM ,Content CLOB) ;现在插入数据:INSERT INTO member(name,age,birthday,content)V ALUES('张三',22,TO_DA TE('1992-08-12','yyyy-mm-dd'),'我叫张三,今年20岁');一定要记住,标的创建属于数据库对象的车创建,所以使用CREATE语法。
Oracle 11g 管理与编程基础Chapt12 PLSQL高级
集合数据类型
PL/SQL中的集合类似于其他3GL中的数组。 “集合”有两种: § index-by表(index-by table)。
§ 变长数组(varrays)。
为什么需要集合类型
Declare
v_s# varchar2(4); v_sname varchar2(20);
ห้องสมุดไป่ตู้
Begin
select s#, sname into v_s#, v_sname from S; End; 如果查询语句返回值有多个,则会出现错误“exact fetch returns more than requested numbers of rows”。 因为into子句中的变量不能处理多行数据。
记录数据类型(续2)
§记录之间相互赋值需要类型完全相同
type t_StuRecord is record( id number(4), name varchar2(20), major varchar2(30) ); type t_StuRecord2 is record( id number(4), name varchar2(20), major varchar2(30) ); v_students t_stuRecord; v_students_copy t_stuRecord2; begin v_students.id:=1000; v_:='赵伟'; v_students.major:='计算机'; v_students_copy:=v_students;
index-by表
§ 类似于普通程序设计语言中的数组概念。 §声明index-by表的方法如下: Type tabletype IS TABLE OF type INDEX BY BINARY_INTEGER; §其中type可以是内置类型、用户定义的 对象类型或者使用%rowtype的表达式等
oracle11g笔记
数据库名称、数据库表的定义、数据库账户、权限等----------data dictionary(1)概念模式概念模式也称模式,是对数据库中全局数据逻辑结构的描述,是全体用户公共的数据视图。
这种描述是一种抽象描述,不涉及具体硬件环境与平台,也与具体软件环境无关。
概念模式主要描述数据的概念记录类型及其关系,还包括数据间的一些语义约束,对它的描述可以DBMS中的DDL定义(2)外模式外模式也称子模式或用户模式,它是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示外模式通常是模式的子集。
一个模式可以有多个外模式。
外模式是保证数据库安全性的一个有力措施。
每个用户只能看到和访问所对应外模式中的数据,数据库中的其他数据是看不到的。
(3)内模式内模式也称存储模式,一个模式只有一个模式。
他是数据物理结构和存储方式的描述,定义所有的内部记录类型、索引和文件的组织形式,以及数据控制方面的细节。
(1)外模式/模式映像数据库的每一个外模式都有一个外模式/模式映像,它定义了该外模式与模式之间的对应关系,外模式/模式映像一般是在外模式中描述的模式描述的是数据的全局逻辑结构,外模式描述的是数据的局部逻辑结构(2)模式/内模式映像模式/内模式映像定义了模式和内模式之间的对应关系,即数据全局逻辑结构与存储结构之间的对应关系。
模式/内模式映像一般是在模式中描述的。
概念数据模型(conceptual data model)现实世界----信息世界----机器世界概念模型是从现实世界到机器世界的一个中间层次逻辑数据模型(logic data model)是概念模型到计算机之间的中间层次。
概念模型只有在转换成逻辑模型之后才能在数据库中得以表示。
逻辑模型种类:层次模型、关系模型、网状模型、面向对象模型等。
层次模型用“树结构”来表示数据之间的联系关系模型用“二维表”来表示数据之间的联系网状模型用“图结构”来表示数据之间的联系面向对象模型用“对象”来表示数据之间的联系。
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)。
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】。
说明:其实由于你已经使用了【create or repalace procedure】即使有存储过程叫【abc】也会被覆盖掉,你用下面的命令查询一下,有什么对象叫【abc】,删掉它或者换一个存储过程名字。
【SELECT OBJECT_NAME,OBJECT_TYPE FROM USER_OBJECTS WHERE OBJECT_NAME='STUDENT2';】错误二:过程中的参数不能指定具体长度2、函数块错误一:函数里面要有return,不是dbms_output.put_line(但实验之后二者均可以成功创建函数,但是调用时只有return的能没有错误的执行)create or replace function abc (aa varchar2)return varchar2isbegindbms_output.put_line('sdhl'||aa);end;改为create or replace function abc(aa varchar2) return varchar2isbeginreturn'sdhl' || aa;end;但函数不能像过程一样来执行,因为execute命令不允许管理函数返回值。
必须要用call或begin dbms... end命令将返回值放入一个绑定变量(要先定义)中,在输出。
(必须要先执行函数,在执行下面语句,不能一起运行)variable result varchar2(20);call abc('akdhak') into :result; --call后面只能用绑定变量?或者:SQL> begin2 dbms_output.put_line(abc('du'));3 end;4 /sdhldu此处若用print则绑定变量不能加冒号只能为print result;但可以查询select :result from dual;(exec是sqlplus的命令,只能在sqlplus中使用。
call是sql命令,任何工具都可以使用)2.1.6嵌套块命名块还可以嵌套在其他命名块或匿名块中,但嵌套命名块并不是已经发布的,这意味着在调用一个命名块时,被调用的命名块可能还没有定义declareprocedure a isbegindbms_output.put_line(b||'hello!'); /*此处b为被调用函数,但之前没有被解析,所以运行会出错*/end a;function b return varchar2isbeginreturn'hello!';end b;begina;end;注:所有匿名块都会在程序都会在实际执行前进行分析,分析是一个编译过程。
分析过程将会识别标识符(保留字)、预定义标识符、引用标识符、用户定义变量、子例程或UDT。
命名块也是标识符,PL/SQL按照自顶向下的次序,将标识符读取到内存中。
上例中函数b因为在过程a 的下面还没被解析,所以会出错。
使用“前向引用”可以修正这个问题,函数或过程的前向引用只需要函数或过程的署名,不需要同时包括署名和实现,这些署名在PL/SQL中叫做“占位程序(stub)”。
占位程序允许编译过程在实现命名块之前接受其标识符名称。
更正:declareprocedure a;function b return varchar2;procedure a isbegindbms_output.put_line(b||'hello!');end a;function b return varchar2isbeginreturn'hello!';end b;begina;end;2.2 变量:类型、赋值和运算符2.2.1文本数据类型用伪列来隐式地定义数据类型。
伪列如%typeChar(20)为一个定长的类型,不管其中变量的长度有没有达到20,最后显示长度均为20字符Varchar2(20)则要根据实际情况来确定其长度Clob(character large object 字符大对象)同varchar22.2.2日期和时间戳类型1、日期有两种字符串字面值赋值支持到date类型的隐式转换Lv_date date := ’22-mon-75’;或者Lv_date date := ’22-mon-1975’;除了上面两种,任何其他字符串字面值都要求使用to_date内置SQL函数来覆盖格式掩码如lv_date_1 date := to_date(‘19750430’,’YYYYMMDD’);2、间隔间隔子类型允许将天的间隔表示秒,将年的间隔表示月份数Interval day to second 数据类型的默认值在两个date相减时能起作用,只要在执行减法之前将其转化为timestamp,因为to_timestamp函数保留了date的精度,而该精度低于timestamp将天的间隔转换为秒的数据类型为interval day/day(4或其他数) to seconddeclarelv_interval interval day to second;lv_end_day date :=sysdate; ---sysdate与date对应lv_start_day date := '18-4月-2012';beginlv_interval := to_timestamp(lv_end_day)-to_timestamp(lv_start_day); dbms_output.put_line(lv_interval);end;结果-20 14:56:54.000000PL/SQL procedure successfully completedDate数据类型默认支持2位数字表示的天,timestamp的精度要求使用9位数字表示的天或者declarelv_interval interval day(9) to second;lv_end_day timestamp := systimestamp; ---systimestamp与timestamp对应lv_start_day timestamp := '18-4月-2012';beginlv_interval := lv_end_day-lv_start_day;dbms_output.put_line(lv_interval);end;结果-000002943 02:52:41.860000PL/SQL procedure successfully completed将年的间隔转化为月份数的数据类型为interval year to month从一个日期中提取年用 to_char(extract(year from lv_end_day))完整代码:declarelv_a date := '20-4月-2009';a varchar2(12);begina := to_char(extract(year from lv_a));dbms_output.put_line(a);end;结果为:20093、时间戳(timestamp)Timestamp数据类型精度要比date数据类型精度高2.2.3 数值类型可以将number数据类型隐性转化为intger类型,可能会丢失一些小数点Binary_float 32位浮点数Binary_double 是一个64位浮点数2.2.4复合变量类型SQL UDT用于保存一个数据结构2.3控制结构1、If语句,if elsif else2、case语句分为简单的case语句case … when … then …else … end case (break 隐式存在)与搜索型的case语句case when … then … else … end case简单case语句可使用char、nchar、varchar2数据类型,而搜索case语句可以使用任意布尔表达式,搜索case语句不局限于等值匹配2.3.3、循环结构Loop循环退出要借助exit或exit when语句For loop循环:分为范围循环和游标循环插入:关于游标(见E:\sas\sql\各类知识要点\游标)A、范围循环即for i in 1..4 loopB、游标循环 1、隐式 for i in (select 语句)loop2、显式 for i in cur_v(游标)loop其中第2种要比第一种要有更好的可读性(以后用这种)C、where current of 字句while循环while (...)loop内可含continue/goto语句Simple 循环语句即利用隐式游标属性来进行循环判断如if SQL%FOUND then ...else ...end if ;2.4批量操作(见E:\sas\sql\各类知识要点\游标)批量处理是进行成批处理和大批量处理的默认选择本章小结:1、始终在执行块中进行赋值或初始化。