安装PL/SQL Developer
前提:必须安装Oracle的客户端
卸载:
------------------------------
Command Window --> SQLPLUS
SQL Window -->用来开发SQL程序
-------------------------------
数据库
增删改--> 30%
查--> 70%
------------------------------------------------------------------------------ 创建表:
create table 表名(
列1 类型,
列2 类型
);
字符类型
char -->定长字符串
name char(10)
-->保存一个值到name
'abc' --实际存储后的结果是--> 'abc '
varchar2 -->变长字符串
name varchar2(10)
-->保存一个值到name
'abc' --实际存储后的结果是--> 'abc'
clob -->保存超大文本4G
---------------------------
数字类型
所有的数字(整数,浮点数)都是number
定义一个工资的保存列
sal number(5,2)
-999.99 ~ 999.99
年龄
age number(2)
-99 ~ 99
---------------------------
日期类型
date -->保存年月日,时分秒
--------------------------
二进制类型
BLOB -->最大不能超过4G;
------------------------------
表结构的基本操作:
0、查看表结构
desc表名
1、添加一个字段
alter table 表名add(列类型);
2、修改字段类型
alter table 表名modify(列类型);
3、删除一个字段
alter table 表名drop column 列名;
4、修改表的名字
rename student to stu
5、删除表
drop table 表名
** 如果需要修改列的名字
新增一个字段,然后迁移数据,最后删除原字段
或者使用图形化工具
如果有值,这种删除,是没有办法恢复的。。
上述修改表结构相关的语句叫做DDL ,修改,是没有办法恢复的
--------------------------------------------------------------------------------------------------
插入数据
create table test(
id number,
name varchar2(20),
age number(2)
);
1)
insert into 表名values(所有列的值);
insert into test values(1,'zhangsan',20);
2)
insert into 表名(列) values(对应的值);
insert into test(id,name) values(2,'lisi');
insert into test(name,age) values('wangwu',20);
-------------------------------------------------------------------------------------------------- 更新语句
update 表set 列=新的值[where 条件] --》更新满足条件的记录
update test set name='zhangsan2' where name='zhangsan'
update 表set 列=新的值--》更新所有的数据
update test set age =20;
----------------------------------
**删除数据:
几种删除方式:
1)
delete from 表名where 条件-->删除满足条件的记录
delete from test where id = 1;
delete from test ; -->删除所有
commit; -->提交数据
rollback; -->回滚数据
delete方式可以恢复删除的数据,但是提交了,就没办法了
delete删除的时候,会记录日志--》删除会很慢很慢
2)
truncate table 表名
删除所有数据,不会影响表结构,不会记录日志,数据不能恢复--》删除很快
3)
drop table 表名
删除所有数据,包括表结构一并删除,不会记录日志,数据不能恢复-->删除很快
------------------------------------------------------------------------------------------
如何查看一个SQL执行了多长时间?
set timing on
小技巧:
如何快速的复制数据?
1、insert into test select * from test;
2、create table 表名select * from test;
-----------------------------------------------------------------
查询:基本查询,复杂查询
1、导入数据
sqlplus状态下:
@文件名
基本查询
select 列from 表名
select * from 表名--》所有列
-----------------------------------------------
1、去除重复的显示
select distinct列from 表名
2、算术运算,不能把NULL参与运算
nvl(列,值) --》如果列为空,则用“值”替换NULL
nvl(comm,0) --->如果comm为空,返回0
每一个列都可以取别名
3、如何连接字符串||
-------------------------------------------------------------------------------
日期类型:
to_date(字符串1,字符串2) -->字符串1 是日期的字符串,字符串2 是格式,返回一个日
期类型。
to_date('1990-1-1','yyyy-mm-dd') -->返回日期类型的1990-1-1
to_date('1990-1-1 13:30:10','yyyy-mm-dd hh24:mi:ss') -->返回日期类型的1990-1-113:30:10 SQL的模糊查询:
like :匹配字符%:0到多个字符_:表示单个字符
如果涉及到NULL
判断is NULL , is not null
查询结果需要排序
order by 字段
select * from emp order by sal --》order by后面,默认升序
asc升序
desc降序
-------------------------------
Oracle的复杂查询,统计函数,分组
sum, count ,avg, max, min
----分组:
student
name sex class score
zhangsan男10 90
李四男10 60
zhang女10 86
王五女20 90
统计每个班的最高分
max(score)
10
zhangsan男10 90 --> 90
李四男10 60
20
王五女20 90 --> 90
--------------------------------------
统计每个班的男生和女生分别的最高分
分组:
class sex
max(score)
10 男
zhangsan男10 90 --> 90
李四男10 60
10 女
zhang女10 86 --> 86
20 女
王五女20 90 -->90
统计函数不能跟在where条件后面
-
group by 和having子句
group by 字段-->按照指定的字段进行分组
having 字句--》对分组后的结果进行筛选输出
-------------------------------
一般来说,group by后面的字段,最好出现在select后面统计函数统计的是每一个分组的结果!!!
----------
关键字出现的顺序
select ???from ....where ... group by ... having ... order by ....
--------------------
笛卡尔积
两个集合相乘的结果
14* 4 =56
有对的记录,有错的记录,必须加条件筛选正确的记录-------------------------
Oracle的历史 ?Oracle 公司( 甲骨文) 创始人: Larry Ellison 32岁,公司提供数据库服务. ?公司成立于1977 年, 83 年公司更名为Oracle ,原名为”软件开发实验室”. ?Oracle 数据库适用于大型企业 ?竞争对手 –微软的SQLServer –IBM 的DB2 ?目前的版本 – 2.0~7.0 , 8.0 , 8i , 9i , 10g Oracle的服务: 我的电脑右键选择管理--服务和应用程序—服务
或 sqlplus 用户名@orcl 如果用户是管理员要在sqlplus 用户名/密码@主机字符串as sysdba “/”是用户名和密码分隔符号 “@”是密码和数据库的分隔符号 “orcl”是数据库的名称,在安装时指定 常用命令(互动) connect 切换用户 show user 显示当前用户 set linesize 1000 设置行显示长度 set pagesize 1000 设置分页长度 desc dept 查看表结构 select table_name from user_tables 查询当前用户的表 / 运行上一条SQL语句 clear screen 清除屏幕 edit 编辑 spool d:/a 保存输出结果到某个位置 spool off 保存结束 quit 退出 list 查看最后一条语句 @ 文件名.sql 运行外部文件中的SQL语句
课程目标: 1. 了解数据库系统在项目开发中的地位 2. 了解目前主流数据库系统 3. 熟练掌握查询命令 4. 熟练掌握数据操作方式 5. 熟练使用数据库内置函数 6. 掌握pl/sql程序设计语法结构 7. 掌握视图 8. 掌握存储过程 9. 掌握用户自定义函数 10. 掌握触发器 了解: 1.数据库组件: 1.1 实施应用集群 1.2 Oracle OLAP 1.3 数据挖掘 1.4 应用程序接口 1.5 网络组件 1.6 SQL Plus 1.7 企业管理器OEM
2. 几个版本间的差异: 2.1 增加了服务器参数文件SPFILE 2.2 使用了OMF免去了手工管理数据库文件的繁琐 2.3 支持多种数据库块大小 2.4 会话可以自动调整PGA的大小 2.5 引入了列表分区 课程内容: 1. 操作数据之前的准备工作: 1.1. 要保证有一个数据库: 1.2. 要保证创建一个表空间 create tablespace hbjr datafile 'E:\dbs\hbjr.dbf' size 100M; 1.3. 要创建一个用户,用户默认的表空间就是你创建的表空间 create user hbjr identified by orcl default tablespace hbjr; //授权限: grant dba to hbjr; 1.4. 用户/密码登录:
2. 表名/列字段名起名规范: 2.1 使用常规字母和数字 2.2 长度不要超过30 2.3 表名/列名不能重复 2.4 不能使用oracle的保留字 3. 数据类型 3.1 char:定长,存储单位--字节(bite) 3.2 varchar2:变长,存储单位--字节 3.3 nchar:定长,存储单位--字符 3.4 nvarchar2:变长,存储单位--字符 3.5 date:日期类型,7个字节,存储着--世纪,年,月,日,时,分,秒 3.6 timestamp:日期类型,11个字节,存储着--世纪,年,月,日,时,分,秒,毫秒 3.7 number:数据类型(数值类型) 3.8 clob:大字段类型,适合存储纯文本信息(例如:*.txt 文件)
一、SELECT语句基础语法 SELECT [ALL |DISTINCT TOP N [PERCENT] WITH TIES SELECT_LIST #SELECT 子句,用于指定由查询返回的列。 [INTO [new_table_name]] #INTO子句,将检索结果存储到新表或视图中。 FROM {table_name|view_name} [(optimizer_hints)],... #FROM子句,用于指定引用的表或视图,需指定多个表或视图,用“,”分开即可。[WHERE search_condition] #WHERE子句,用于指定限制返回的行的搜索条件,若无此子句,则默认表中的所有行都满足条件。 [GROUP BY group_by_expression] #GROUP BY子句,指定用来放置输出行的组,并且如果SELECT子句中
--创建用户 create user han identified by han default tablespace users Temporary TABLESPACE Temp; grant connect,resource,dba to han; //授予用户han开发人员的权利 --------------------对表的操作-------------------------- 创建表格语法: create table 表名( 字段名1 字段类型(长度) 是否为空, 字段名2 字段类型是否为空 ); -增加主键 alter table 表名 add constraint 主键名 primary key (字段名1); -增加外键: alter table 表名 add constraint 外键名 foreign key (字段名1) references 关联表 (字段名2); 在建立表格时就指定主键和外键 create table T_STU ( STU_ID char(5) not null, STU_NAME varchar2(8) not null, constraint PK_T_STU primary key (STU_ID) ); 主键和外键一起建立: create table T_SCORE ( EXAM_SCORE number(5,2), EXAM_DATE date, AUTOID number(10) not null, STU_ID char(5),
SUB_ID char(3), constraint PK_T_SCORE primary key (AUTOID), constraint FK_T_SCORE_REFE foreign key (STU_ID) references T_STU (STU_ID) ) --创建表 create table classes( id number(9) not null primary key, classname varchar2(40) not null ) --查询表 select * from classes; --删除表 drop table students; --修改表的名称 rename alist_table_copy to alist_table; --显示表结构 describe test --不对没查到 -----------------------对字段的操作 ----------------------------------- --增加列 alter table test add address varchar2(40); --删除列 alter table test drop column address; --修改列的名称 alter table test modify address addresses varchar(40; --修改列的属性 alter table test modi create table test1( id number(9) primary key not null, name varchar2(34)
第一篇基本操作 --解锁用户alter user 用户account unlock; --锁定用户alter user 用户account lock; alter user scott account unlock; --创建一个用户yc 密码为a create user 用户名identified by 密码; create user yc identified by a; --登录不成功,会缺少create session 权限,赋予权限的语法grant 权限名to 用户;grant create session to yc; --修改密码alter user 用户名identified by 新密码; alter user yc identified by b; --删除用户 drop user yc ; --查询表空间 select *from dba_tablespaces; --查询用户信息 select *from dba_users; --创建表空间 create tablespace ycspace datafile 'E:\oracle\app\product\11.2.0\dbhome_1\oradata\ycspace.dbf' size 2m autoextend on next 2m maxsize 5m offline ; --创建临时表空间 create temporary yctempspace tempfile 'E:\oracle\app\product\11.2.0\dbhome_1\oradata\ycspace.dbf' size 2m autoextend on next 2m maxsize 5m offline ; --查询数据文件 select *from dba_data_files;
-- 表 create table test (names varchar2(12), dates date, num int, dou double); -- 视图 create or replace view vi_test as select * from test; -- 同义词 create or replace synonym aa for dbusrcard001.aa; -- 存储过程 create or replace produce dd(v_id in employee.empoy_id%type) as begin end dd; -- 函数 create or replace function ee(v_id in employee%rowtype) return varchar(15) is var_test varchar2(15); begin return var_test; exception when others then end -- 三种触发器的定义 create or replace trigger ff alter delete on test for each row declare begin delete from test; if sql%rowcount < 0 or sql%rowcount is null then rais_replaction_err(-20004,"错误") end if end create or replace trigger gg
alter insert on test for each row declare begin if :https://www.doczj.com/doc/f51032194.html,s = :https://www.doczj.com/doc/f51032194.html,s then raise_replaction_err(-2003,"编码重复"); end if end create or replace trigger hh for update on test for each row declare begin if updating then if :https://www.doczj.com/doc/f51032194.html,s <> :https://www.doczj.com/doc/f51032194.html,s then reaise_replaction_err(-2002,"关键字不能修改") end if end if end -- 定义游标 declare cursor aa is select names,num from test; begin for bb in aa loop if https://www.doczj.com/doc/f51032194.html,s = "ORACLE" then end if end loop; end -- 速度优化,前一语句不后一语句的速度快几十倍select names,dates from test,b where https://www.doczj.com/doc/f51032194.html,s = https://www.doczj.com/doc/f51032194.html,s(+) and https://www.doczj.com/doc/f51032194.html,s is null and b.dates > date(''2003-01-01'',''yyyy-mm-dd'')
--创建用户create user han identified by han default tablespace users Temporary TABLESPACE Temp; grant connect,resource,dba to han; //授予用户han开发人员的权利 --------------------对表的操作-------------------------- --创建表 create table classes(id number(9) not null primary key,classname varchar2(40) not null ) --查询表 select * from classes; --删除表 drop table students; --修改表的名称 rename alist_table_copy to alist_table; --显示表结构describe test --不对没查到 -----------------------对字段的操作----------------------------------- --增加列alter table test add address varchar2(40); --删除列alter table test drop column address; --修改列的名称alter table test modify address addresses varchar(40); --修改列的属性alter table test modi create table test1(id number(9) primary key not null,name varchar2(34)) rename test2 to test; -- 创建自增的序列 create sequence class_seq increment by 1 start with 1 MAXVALUE 999999 NOCYCLE NOCACHE; select class_seq.currval from dual --插入数据 insert into classes values(class_seq.nextval,'软件一班') commit; --更新数据 update stu_account set username='aaa' where count_id=2;commit; --创建唯一索引
ORACLE的基本语法集锦 -- 表 create table test (names varchar2(12), dates date, num int, dou double); -- 视图 create or replace view vi_test as select * from test; -- 同义词 create or replace synonym aa for dbusrcard001.aa; -- 存储过程 create or replace produce dd(v_id in employee.empoy_id%type) as begin end dd; -- 函数 create or replace function ee(v_id in employee%rowtype) return varchar(15) is var_test varchar2(15); begin return var_test; exception when others then end -- 三种触发器的定义 create or replace trigger ff alter delete on test for each row declare begin delete from test; if sql%rowcount < 0 or sql%rowcount is null then rais_replaction_err(-20004,"错误")
end create or replace trigger gg alter insert on test for each row declare begin if :https://www.doczj.com/doc/f51032194.html,s = :https://www.doczj.com/doc/f51032194.html,s then raise_replaction_err(-2003,"编码重复"); end if end create or replace trigger hh for update on test for each row declare begin if updating then if :https://www.doczj.com/doc/f51032194.html,s <> :https://www.doczj.com/doc/f51032194.html,s then reaise_replaction_err(-2002,"关键字不能修改") end if end if end -- 定义游标 declare cursor aa is select names,num from test; begin for bb in aa loop if https://www.doczj.com/doc/f51032194.html,s = "ORACLE" then end if end loop; end -- 速度优化,前一语句不后一语句的速度快几十倍select names,dates
oracle的常用sql知识 1语法语句 1.1DDL CREATE TABLE
一、常用查询统计 选择题 1.ORACLE用来判断列值是否为空的操作符是____ A.= NULL B.IS NULL C.AS NULL D.NULL IS 答案:B 2.在客户定单表(CUSTOMER)中有一列为单价(PRICE),写一个SELECT命令显示所有 单价在500以上的查询语句。 A.SELECT * FROM CUSTOMER WHERE PRICE>500; B.SELECT * FROM CUSTOMER WHERE PRICE BETWEEN 500 AND *; C.SELECT * FROM CUSTOMER WHERE PRICE LIKE '%500%'; D.SELECT * FROM CUSTOMER WHERE PRICE>=500; 答案:A 3.分析以下SQL 命令: SELECT price FROM inventory
WHERE price BETWEEN 1 AND 50 AND (price IN(55, 30, 95); 命令执行后的输出结果是:() A 55 B 30 C 95 D NULL 答案:B 4.分析以下的SQL 命令: SELECT manufacturer_id FROM inventory WHERE manufacturer_id LIKE '%N\%P\%O%' ESCAPE '\'; 命令执行的返回结果是() A 所有包含'NPO'的纪录 B 所有包含'N\P\O'的纪录 C 所有包含'N%P%O'的纪录 D 所有包含'%N\P\O%'的纪录 答案:C 5.ROUND 和TRUNC操作的区别是() A ROUND在截掉数据时有四舍五入的判断,TRUNC直接按要求截掉没有进位。 B 都是将数据按指定的长度截断 C TRUNC是四舍五入,ROUND是截断 D 都会四舍五入
Oracle常用命令大全(很有用,做笔记) 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup SVRMGR>quit b、关闭ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>shutdown SVRMGR>quit 启动oracle9i数据库命令: $ sqlplus /nolog SQL*Plus: Release 9.2.0.1.0 - Production on Fri Oct 31 13:53:53 2003 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. SQL> connect / as sysdba Connected to an idle instance. SQL> startup^C SQL> startup ORACLE instance started. 2、在双机环境下 要想启动或关闭ORACLE系统必须首先切换到root用户,如下 su - root a、启动ORACLE系统 hareg -y oracle b、关闭ORACLE系统 hareg -n oracle Oracle数据库有哪几种启动方式
说明: 有以下几种启动方式: 1、startup nomount 非安装启动,这种方式启动下可执行:重建控制文件、重建数据库 读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。 2、startup mount dbname 安装启动,这种方式启动下可执行: 数据库日志归档、 数据库介质恢复、 使数据文件联机或脱机, 重新定位数据文件、重做日志文件。 执行“nomount”,然后打开控制文件,确认数据文件和联机日志文件的位置, 但此时不对数据文件和日志文件进行校验检查。 3、startup open dbname 先执行“nomount”,然后执行“mount”,再打开包括Redo log文件在内的所有数据库文件,这种方式下可访问数据库中的数据。 4、startup,等于以下三个命令 startup nomount alter database mount alter database open 5、startup restrict 约束方式启动 这种方式能够启动数据库,但只允许具有一定特权的用户访问 非特权用户访问时,会出现以下提示: ERROR: ORA-01035: ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用 6、startup force 强制启动方式 当不能关闭数据库时,可以用startup force来完成数据库的关闭
Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象 一.数据控制语句(DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSERT INTO 表名(字段名1, 字段名2, ……) SELECT (字段名1, 字段名2, ……) FROM 另外的表名; 字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’ 如果字段值里包含单引号’ 需要进行字符串转换, 我们把它替换成两个单引号''. 字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验. 日期字段的字段值可以用当前数据库的系统时间SYSDATE, 精确到秒 或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’) TO_DATE()还有很多种日期格式, 可以参看ORACLE DOC. 年-月-日小时:分钟:秒的格式YYYY-MM-DD HH24:MI:SS INSERT时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型, 方法借用ORACLE里自带的DBMS_LOB程序包. INSERT时如果要用到从1开始自动增长的序列号, 应该先建立一个序列号 CREATE SEQUENCE 序列号的名称(最好是表名+序列号标记) INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;
其中最大的值按字段的长度来定, 如果定义的自动增长的序列号NUMBER(6) , 最大值为999999 INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL 2.DELETE (删除数据表里记录的语句) DELETE FROM表名WHERE 条件; 注意:删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused. 如果确实要删除一个大表里的全部记录, 可以用TRUNCATE 命令, 它可以释放占用的数据块表空间 TRUNCATE TABLE 表名; 此操作不可回退. 3.UPDATE (修改数据表里记录的语句) UPDATE表名SET 字段名1=值1, 字段名2=值2, …… WHERE 条件; 如果修改的值N没有赋值或定义时, 将把原来的记录内容清为NULL, 最好在修改前进行非空校验; 值N超过定义的长度会出错, 最好在插入前进行长度校验.. 注意事项: A. 以上SQL语句对表都加上了行级锁, 确认完成后, 必须加上事物处理结束的命令COMMIT 才能正式生效, 否则改变不一定写入数据库里. 如果想撤回这些操作, 可以用命令ROLLBACK 复原.
Oracle数据库语句大全 一.入门部分 1.创建表空间 create tablespace schooltbs datafile ‘D:\oracle\datasource\schooltbs.dbf’ size 10M autoextend on; 2.删除表空间 drop tablespace schooltbs[including contents and datafiles]; 3.查询表空间基本信息 select *||tablespace_name from DBA_TABLESPACES; 4.创建用户 create user lihua identified by lihua default tablespace schooltbs temporary tablespace temp; 5.更改用户 alter user lihua identified by 123 default tablespace users; 6.锁定用户 alter user lihua account lock|unlock; 7.删除用户 drop user lihua cascade;--删除用户模式 8.oracle数据库中的角色 connect,dba,select_catalog_role,delete_catalog_role,execute_catalo g_role,exp_full_database,imp_full_database,resource 9.授予连接服务器的角色 grant connect to lihua; 10.授予使用表空间的角色 grant resource to lihua with grant option;--该用户也有授权的权限 11.授予操作表的权限 grant select,insert on user_tbl to scott;--当前用户 grant delete,update on https://www.doczj.com/doc/f51032194.html,er_tbl to scott;--系统管理员 二.SQL查询和SQL函数 1.SQl支持的命令: 数据定义语言(DDL):create,alter,drop 数据操纵语言(DML):insert,delete,update,select 数据控制语言(DCL):grant,revoke 事务控制语言(TCL):commit,savepoint,rollback 2.Oracle数据类型 字符,数值,日期,RAW,LOB 字符型 char:1-2000字节的定长字符
--数据操作 SELECT --从数据库表中检索数据行和列INSERT --向数据库表添加新数据行 DELETE --从数据库表中删除数据行 UPDATE --更新数据库表中的数据 --数据定义 CREATE TABLE --创建一个数据库表 DROP TABLE --从数据库中删除表 ALTER TABLE --修改数据库表结构 CREATE VIEW --创建一个视图 DROP VIEW --从数据库中删除视图 CREATE INDEX --为数据库表创建一个索引DROP INDEX --从数据库中删除索引 CREATE PROCEDURE --创建一个存储过程DROP PROCEDURE --从数据库中删除存储过程CREATE TRIGGER --创建一个触发器 DROP TRIGGER --从数据库中删除触发器CREATE SCHEMA --向数据库添加一个新模式DROP SCHEMA --从数据库中删除一个模式CREATE DOMAIN --创建一个数据值域 ALTER DOMAIN --改变域定义 DROP DOMAIN --从数据库中删除一个域 --数据控制 GRANT --授予用户访问权限 DENY --拒绝用户访问 REVOKE --解除用户访问权限 --事务控制 COMMIT --结束当前事务 ROLLBACK --中止当前事务 SET TRANSACTION --定义当前事务数据访问特征--程序化SQL DECLARE --为查询设定游标 EXPLAN --为查询描述数据访问计划 OPEN --检索查询结果打开一个游标 FETCH --检索一行查询结果 CLOSE --关闭游标 PREPARE --为动态执行准备SQL 语句EXECUTE --动态地执行SQL 语句 DESCRIBE --描述准备好的查询 ---局部变量 declare @id char(10) --set @id = '10010001'
oracle 存储过程的基本语法 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 ( 参数1 IN NUMBER, 参数2 IN NUMBER ) IS 变量1 INTEGER :=0; 变量2 DATE; BEGIN END 存储过程名字 2.SELECT INTO STATEMENT 将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND) 例子: BEGIN SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx; EXCEPTION WHEN NO_DATA_FOUND THEN xxxx; END; ... 3.IF 判断 IF V_TEST=1 THEN BEGIN do something
END; END IF; 4.while 循环 WHILE V_TEST=1 LOOP BEGIN XXXX END; END LOOP; 5.变量赋值 V_TEST := 123; 6.用for in 使用cursor ... IS CURSOR cur IS SELECT * FROM xxx; BEGIN FOR cur_result in cur LOOP BEGIN V_SUM :=cur_result.列名1+cur_result.列名2 END; END LOOP; END; 7.带参数的cursor CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID; OPEN C_USER(变量值); LOOP FETCH C_USER INTO V_NAME;
安装PL/SQL Developer 前提:必须安装Oracle的客户端 卸载: ------------------------------ Command Window --> SQLPLUS SQL Window --> 用来开发SQL程序 ------------------------------- 数据库 增删改 --> 30% 查 --> 70% ------------------------------------------------------------------------------ 创建表: create table 表名( 列1 类型, 列2 类型 ; 字符类型 char -->定长字符串 name char(10 -->保存一个值到name 'abc' --实际存储后的结果是--> 'abc ' varchar2 -->变长字符串 name varchar2(10 -->保存一个值到name
'abc' --实际存储后的结果是--> 'abc' clob --> 保存超大文本 4G --------------------------- 数字类型 所有的数字(整数,浮点数)都是number 定义一个工资的保存列 sal number(5,2 -999.99 ~ 999.99 年龄 age number(2 -99 ~ 99 --------------------------- 日期类型 date --> 保存年月日,时分秒 -------------------------- 二进制类型 BLOB --> 最大不能超过4G; ------------------------------ 表结构的基本操作: 0、查看表结构 desc 表名 1、添加一个字段 alter table 表名 add(列类型; 2、修改字段类型
数据定义语言 ?数据定义语言用于改变数据库结构,包括创建、更改和删除数据库对象?用于操纵表结构的数据定义语言命令有: ?CREATE TABLE ?ALTER TABLE ?TRUNCATE TABLE ?DROP TABLE 数据操纵语言 ?数据操纵语言用于检索、插入和修改数据 ?数据操纵语言是最常见的SQL命令 ?数据操纵语言命令包括: ?SELECT ?INSERT ?UPDA TE ?DELETE DML –SELECT 命令 ?利用现有的表创建表 ?语法: CREATE TABLE
oracle PL/SQL的基本构成,块结构和基本语法要求,数据类型,变量定义,运算符和函数 关键字: oracle pl/sql 基本构成块结构基本语法要求数据类型变量定义运算符函数 特点 PL/SQL语言是SQL语言的扩展,具有为程序开发而设计的特性,如数据封装、异常处理、面向对象等特性。PL/SQL是嵌入到Oracle服务器和开发工具中的,所以具有很高的执行效率和同Oracle数据库的完美结合。在PL/SQL模块中可以使用查询语句和数据操纵语句(即进行DML操作),这样就可以编写具有数据库事务处理功能的模块。 至于数据定义(DDL)和数据控制(DCL)命令的处理,需要通过Oracle提供的特殊的DMBS_SQL包来进行。PL/SQL还可以用来编写过程、函数、包及数据库触发器。过程和函数也称为子程序,在定义时要给出相应的过程名和函数名。它们可以存储在数据库中成为存储过程和存储函数,并可以由程序来调用,它们在结构上同程序模块类似。 PL/SQL过程化结构的特点是:可将逻辑上相关的语句组织在一个程序块内;通过嵌入或调用子块,构造功能强大的程序;可将一个复杂的问题分解成为一组便于管理、定义和实现的小块。 块结构和基本语法要求 PL/SQL程序的基本单元是块(BLOCK),块就是实现一定功能的逻辑模块。一个PL/SQL程序由一个或多个块组成。块有固定的结构,也可以嵌套。一个块可以包括三个部分,每个部分由一个关键字标识。 块中各部分的作用解释如下: (1) DECLARE:声明部分标志。 (2) BEGIN:可执行部分标志。 (3) EXCEPTION:异常处理部分标志。 (4) END;:程序结束标志。 在以下的训练中,将使用函数DBMS_OUTPUT.PUT_LINE显示输出结果。DBMS_OUTPUT是Oracle提供的包,该包有如下三个用于输出的函数,用于显示PL/SQL程序模块的输出信息。 第一种形式: DBMS_OUTPUT.PUT(字符串表达式); 用于输出字符串,但不换行,括号中的参数是要输出的字符串表达式。 第二种形式: DBMS_OUTPUT.PUT_LINE(字符串表达式); 用于输出一行字符串信息,并换行,括号中的参数是要输出的字符串表达式。第三种形式: DBMS_OUTPUT.NEW_LINE; 用来输出一个换行,没有参数。 调用函数时,在包名后面用一个点“.”和函数名分隔,表示隶属关系。 要使用该方法显示输出数据,在SQL*Plus环境下要先执行一次如下的环境设置命令: SET SERVEROUTPUT ON [SIZE n] 用来打开DBMS_OUTPUT.PUT_LINE函数的屏幕输出功能,系统默认状态是