﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Justjava</title><link>http://www.blogjava.net/Justjava/</link><description>Just love</description><language>zh-cn</language><lastBuildDate>Wed, 08 Apr 2026 17:58:48 GMT</lastBuildDate><pubDate>Wed, 08 Apr 2026 17:58:48 GMT</pubDate><ttl>60</ttl><item><title>ORACL课程总结</title><link>http://www.blogjava.net/Justjava/archive/2009/04/17/266208.html</link><dc:creator>Justjava</dc:creator><author>Justjava</author><pubDate>Fri, 17 Apr 2009 11:21:00 GMT</pubDate><guid>http://www.blogjava.net/Justjava/archive/2009/04/17/266208.html</guid><wfw:comment>http://www.blogjava.net/Justjava/comments/266208.html</wfw:comment><comments>http://www.blogjava.net/Justjava/archive/2009/04/17/266208.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Justjava/comments/commentRss/266208.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Justjava/services/trackbacks/266208.html</trackback:ping><description><![CDATA[<p><span style="font-size: 7pt; font-family: 宋体"><span style="font-size: 24pt"><span style="font-size: 14pt">基本概念 <br />
DDL 数据定义语言 - 建立数据库对象 </span></span></span></p>
<p><span style="font-size: 7pt; font-family: 宋体"><span style="font-size: 24pt"><span style="font-size: 14pt">create /alter/ drop/ truncate &#8230;&#8230;table table_name. </span></span></span></p>
<p><span style="font-size: 7pt; font-family: 宋体"><span style="font-size: 24pt"><span style="font-size: 14pt">DML 数据操纵语言 - 数据的查看和维护 </span></span></span></p>
<p><span style="font-size: 7pt; font-family: 宋体"><span style="font-size: 24pt"><span style="font-size: 14pt">select / insert /delete /update </span></span></span></p>
<p><span style="font-size: 7pt; font-family: 宋体"><span style="font-size: 24pt"><span style="font-size: 14pt">TCL 事务控制语言 - 数据是否保存到数据库中 </span></span></span></p>
<p><span style="font-size: 7pt; font-family: 宋体"><span style="font-size: 24pt"><span style="font-size: 14pt">commit / rollback / savepoint </span></span></span></p>
<p><span style="font-size: 7pt; font-family: 宋体"><span style="font-size: 24pt"><span style="font-size: 14pt">DCL 数据控制语言 -- 查看对象的权限 </span></span></span></p>
<p><span style="font-size: 7pt; font-family: 宋体"><span style="font-size: 24pt"><span style="font-size: 14pt">grant / revoke </span></span></span></p>
<p><span style="font-size: 7pt; font-family: 宋体"><span style="font-size: 24pt"><span style="font-size: 14pt">数据库设计 </span></span></span></p>
<p><span style="font-size: 7pt; font-family: 宋体"><span style="font-size: 24pt"><span style="font-size: 14pt">关系数据模型的组成 </span></span></span></p>
<p><span style="font-size: 7pt; font-family: 宋体"><span style="font-size: 24pt"><span style="font-size: 14pt">一张或多张表 </span></span></span></p>
<p><span style="font-size: 7pt; font-family: 宋体"><span style="font-size: 24pt"><span style="font-size: 14pt">表的索引 </span></span></span></p>
<p><span style="font-size: 7pt; font-family: 宋体"><span style="font-size: 24pt"><span style="font-size: 14pt">视图 </span></span></span></p>
<p><span style="font-size: 7pt; font-family: 宋体"><span style="font-size: 24pt"><span style="font-size: 14pt">触发器 </span></span></span></p>
<p><span style="font-size: 7pt; font-family: 宋体"><span style="font-size: 24pt"><span style="font-size: 14pt">表与表的关系 </span></span></span></p>
<p><span style="font-size: 7pt; font-family: 宋体"><span style="font-size: 24pt"><span style="font-size: 14pt">数据库Schema <br />
概念上的 ： 一组DDL <br />
物理上的 ： 一个命名空间，包含了表，过程，视图的集合 <br />
常用命令 <br />
connect 用户名/密码 连接到指定用户 <br />
desc tab_name 察看表tab_name的结构 <br />
quit/exit 退出 <br />
clear screen 清除屏幕 <br />
set linesize 200 设置一行显示200个字符 <br />
set pagesize 20 设置每页显示20行 <br />
dbms_output.put_line() 打印,类似于System.out.println(); </span></span></span></p>
<p><span style="font-size: 7pt; font-family: 宋体"><span style="font-size: 24pt"><span style="font-size: 14pt">set serveroutput on 打开服务器输出，否则上面打印语句报错 </span></span></span></p>
<p><span style="font-size: 7pt; font-family: 宋体"><span style="font-size: 24pt"><span style="font-size: 14pt">edit 编辑缓存中的语句 <br />
/ 执行上一次语句块/可重复执行 <br />
@ sqlpath 执行某sql文件 <br />
@@ sqlfile 执行sqlpath环境变量中的文件 <br />
spool file 打印日志到文本文件 <br />
spool off 停止打印 <br />
# 在输入sql语句的过程中临时先运行一个sql*plus命令 <br />
--查看大字短的大小 <br />
SELECT DBMS_LOB.GETLENGTH(MYCLOB) FROM ATTACHMENT; //MYCLOB是列名,ATTACHMENT 是表名 <br />
SELECT DBMS_LOB.GETLENGTH(MYBLOB) FROM ATTACHMENT; <br />
常用表 <br />
user_constraints 用户约束 <br />
user_tables 用户表 <br />
all_all_tables 所有用户表 <br />
all_constraints 所有约束 <br />
user_cons_columns 约束列 <br />
all_cons_columns 所有约束列 <br />
nls_session_parameters 当前会话信息 <br />
v$nls_parameters 系统参数 <br />
数据类型 <br />
字符型 <br />
char 最大2000个字节 定长 <br />
varchar2最大4000个字节 变长 <br />
数字类型 <br />
number 10的-38次方 到10的38次方 可以表示小数 也可以表示整数 <br />
日期 <br />
date 包含年月日和时分秒 7个字节 <br />
大对象 <br />
clob 字符型大对象 &gt;4000字节 最大4G <br />
blob 二进制大对象 图像/声音 4G <br />
伪类型 <br />
%type 可以引用某列的类型 <br />
%rowtype 可以引用某表，作为类型 <br />
rownum 结果集每行的行号 <br />
表操作基础 <br />
创建表 <br />
create table tab_name <br />
( <br />
column_name data_type , <br />
column_name data_type , <br />
column_name data_type , <br />
&#8230;&#8230;.. <br />
) <br />
修改表 <br />
插入列 <br />
alter table tab_name add(column_name data_type) <br />
修改列 <br />
alter table tab_name modify(column_name data_type) <br />
删除列 <br />
alter table tab_name drop column column_name; <br />
表重命名 <br />
rename tab_name to change_name <br />
删除表 <br />
drop table tab_name删除记录和结构,不可恢复 <br />
<br />
添加数据 <br />
insert into tab_name[(column_name , column_name&#8230;)] values(value,value&#8230;) <br />
序列 sequence &lt;仅oracle中有&gt; <br />
创建序列 <br />
create sequence 自定义序列名字; <br />
获得下一个值 <br />
seq_name.nextval <br />
获得当前值 <br />
seq_name.currval <br />
复杂序列 序列的nextval是不可逆的 <br />
create sequence 自定义序列名字 <br />
increment by 5 &lt;--递增5--&gt; <br />
start with 0 &lt;--从0开始--&gt; <br />
maxvalue 100 &lt;--最大值 也可以使用nomaxvalue--&gt; <br />
minvalue -100 &lt;--最小值 也可以使用nominvalue--&gt; <br />
cycle &lt;--循环增长 也可以使用nocycle--&gt; <br />
cache 30 &lt;--缓存 也可以使用nocache--&gt; <br />
<br />
修改数据 <br />
update tab_name set expression <br />
删除数据 <br />
delete tab_name 删除记录，不删除结构，可以恢复 ?<br />
delete tab_name where expression 条件删除 ?<br />
truncate table tab_name 仅清除数据，保留结构，不可恢复 <br />
约束 <br />
主键约束 用来唯一表示一条数据的字段，其值不能重复，不能为null <br />
create table test <br />
( <br />
nationality varchar2(20), <br />
city varchar(20), <br />
constraint nick_pk primary key(nationality,city) <br />
); <br />
外键约束 引用其他表的主键到本表,在本表中叫外键，用来做表关系 <br />
create table test <br />
( <br />
nationality varchar2(20), <br />
city varchar(20), <br />
constraint nick_fk foreign key(nationality) references <br />
tab_name(nationality) <br />
); <br />
&lt;** create table test1 <br />
( <br />
id varchar2(20), <br />
name varchar(20), <br />
tid varchar(20), <br />
primary key(id), <br />
constraint test1 foreign key(tid) references <br />
test2(tid) <br />
); <br />
"constraint test1:外键关联名" <br />
create table test2 <br />
( <br />
tid varchar2(20), <br />
descp varchar(20), <br />
primary key(tid) <br />
); **&gt; <br />
非空约束 <br />
create table test <br />
( <br />
nationality varchar2(20) not null, <br />
); <br />
唯一约束 <br />
create table test <br />
( <br />
nationality varchar2(20) , <br />
constraint nick_uk unique(nationality) <br />
); <br />
检查约束 <br />
create table test1 <br />
( <br />
nationality varchar2(20) , <br />
constraint nick_ck check(nationality &lt;&gt; '美国') <br />
); <br />
默认值 <br />
default <br />
设定约束条件无效 <br />
disable|enable constraint_name <br />
级联删除<span style="color: #ff6600">&lt;级联更新要使用触发器</span>&gt; <br />
references &#8230; ON DELETE CASCADE <br />
运算符 <br />
&lt; 小于 <br />
&lt;= 小于等于 <br />
&gt; 大于 <br />
&gt;= 大于等于 <br />
= 等于 <br />
!= 不等于 <br />
&lt;&gt; 不等于 <br />
:= 赋值 <br />
is null 如果操作数为null返回true <br />
like 比较字符串 _代表一个字符 %代表多个字符 <br />
<br />
create table test <br />
( <br />
a number <br />
) <br />
insert into test value(10); <br />
insert into test value(20); <br />
insert into test value(30); <br />
between 验证值是否在范围之内 <br />
select * from test where a between 10 and 20; <br />
in 验证操作书在设定的一系列值中 <br />
select * from test where a in(1,10,20,30); <br />
all 表示子查询返回值中的所有值,相当于比较最大值 <br />
select sal from emp where sal &gt; all( select sal from emp where sal&lt;2000); <br />
any 表示子查询返回值中的任意值，相当于最小值 <br />
<br />
and 两个条件都满足 <br />
or 只满足一个 <br />
not 取反 <br />
+ 加 <br />
- 减 <br />
* 乘 <br />
/ 除 <br />
基础查询 <br />
&lt;--基本的select语句--&gt; <br />
select 列名,列名,.. from 表名,表名,.. where 条件 group by 列名 having 条件 <br />
select 是必须的 ，后面添你要查询的列名 ，* 代表所有 <br />
from 是必须的 ， 后面填写你要查询的表名，可以有多个 <br />
where 可选的，后面填写你的查询条件 <br />
group by 可选的，对聚合进行分组，当查询内容多于一列且包含聚合函数时使用 <br />
having 仅用于group by 的关键字，和where作用一样 <br />
<br />
查询最大值: <br />
select * from product where price not in (select p.price from product p, product d <br />
where p.price&lt;d.price) <br />
<br />
&lt;--消除相同的行--&gt; <br />
select distinct 列名,列名,..from 表名 <br />
<br />
&lt;--排序 order by--&gt; <br />
select 列名,列名,.. from 表名 order by 要排序的列名 <br />
<br />
&lt;--注意：order by指令需聚合函数配合使用，否则只能是单列--&gt; <br />
<br />
&lt;--聚合函数--&gt; <br />
avg 平均值 <br />
select avg(emp.sal) from emp; <br />
sum 求和 <br />
select sum(emp.sal) from emp; <br />
max 最大值 <br />
select max(emp.sal) from emp; <br />
min 最小值 <br />
select min(emp.sal) from emp; <br />
count 总数 <br />
select count(emp.sal) from emp; <br />
<br />
&lt;--排序--&gt; <br />
升序 <br />
select * from emp order by emp.sal ; <br />
降序 <br />
select * from emp order by emp.sal desc; <br />
<br />
&lt;--数据复制--&gt; <br />
<span style="color: red">select * into myemp from emp; </span><br />
<br />
&lt;--表复制--&gt; <br />
</span></span><span style="font-size: 24pt"><span style="font-size: 14pt"><span style="color: blue">create table myemp as select * from emp; <br />
create view bb as select &#8230;&#8230;&#8230;</span><br />
&lt;--小技巧--&gt; <br />
哑元表 在没有查询表的情况下使用 <br />
select 1+1 from dual <br />
查询分割 || <br />
select a.a1 ||'----'|| a.a2 from a; <br />
查询行数限制 <br />
<span style="color: red">select * from a where rownum&lt;=2; </span><br />
查询表结构 <br />
desc tab_name <br />
数据复制 <br />
select tab_name into tab_name|var from tab_name <br />
<br />
--检索订单总额最大的用户 <br />
select * from users where id = <br />
( <br />
select userid from <br />
( <br />
select userid, sum(price*quantity) as total <br />
from orders group by userid order by total desc <br />
) <br />
where rownum=1 <br />
); <br />
<br />
mysql:技巧,可将文件的内容插入到表中. <br />
load data local infile 'd:/sql.txt' into table product; <br />
高级查询 <br />
笛卡尔乘积 <br />
select dname,ename from emp,dept; 这种通过多张表简单对加是没有太大意义的 <br />
<br />
集合运算 <br />
交集 用来得到两个或者多个不同集合的共同元素,两个集合的交集就是其中所有属性相等的元素.交集有一个严格的限制：每个结果集中所有列都必须匹配相等 <br />
<br />
减集 用来查找在一个集合中出现过，而在另一个集合中没有出现的元素,与交集相反的是: 每个结果集中所有列都必须匹配不相等 <br />
<br />
并集 用来合并两个或者多个类似的集合 <br />
<br />
交集 intersect <br />
select语句 intersect select语句 <br />
减集 minus <br />
select语句 minus select语句 <br />
并集 union or union all <br />
select语句 union select语句 <br />
<br />
内连接 <br />
在连接条件中使用等于号(=)运算符比较被连接列的列值，其查询结果中列出被连接表中的所有列，包括其中的重复列。 <br />
select dname,ename from dept,emp where dept.deptno = emp.deptno <br />
<br />
<br />
外连接 <br />
条件列使用(+)，则此列为外连列，主列信息全部显示，外连列没有则显示空 <br />
多行子查询 <br />
返回多个行，必须包含一个多行运算符。 <br />
视图 <br />
视图语法 <br />
创建视图: create [or replace] view &lt;名字&gt; as &lt;select 语句&gt; <br />
视图用于简化查询，视图中实际存放的是一个查询语句而已，返回的是结果集 <br />
在视图中可以修改数据，但是: 建立视图的查询语句必须是一个简单的select(只查询一个表,并且不含有分组函数) <br />
查看视图: select * from 视图名; <br />
<br />
程序块 <br />
在这之前，我们所有的sql语句都是一句一句执行的，如果我们把很多事情看作一个整体提交执行的话，必须使用程序块。 <br />
<br />
声明部分：声名变量及初始化 <br />
关键字：declare <br />
<br />
执行部分：存放所有可执行的代码，这些代码包含在begin/end中 <br />
关键字：begin end <br />
<br />
每个指令结束用;表示，--表示注释 <br />
<br />
<br />
--这是一个示例 <br />
declare <br />
i number:=5; y number:=6; <br />
begin <br />
i:=i+y; <br />
dbms_output.put_line(i); <br />
end; <br />
/ <br />
流程控制 <br />
--条件if......then...elseif.. .end if; <br />
declare <br />
i number:=50; <br />
begin <br />
if i=50 <br />
then dbms_output.put_line(i); <br />
elsif i&lt;50 <br />
then dbms_output.put_line(0); <br />
end if; <br />
end; <br />
/ <br />
-----使用loop循环(exit when 退出条件) <br />
declare <br />
i number; <br />
begin <br />
i:=0; <br />
loop <br />
exit when i=10; <br />
dbms_output.put_line(i); <br />
i:=i+1; <br />
end loop; <br />
end; <br />
<br />
-----使用while-loop循环 <br />
declare <br />
i number; <br />
begin <br />
i:=0; <br />
while i&lt;10 <br />
loop <br />
dbms_output.put_line(i); <br />
i:=i+1; <br />
end loop; <br />
end; <br />
/ <br />
<br />
-----使用for-loop循环 <br />
<br />
begin <br />
for i in 1..10 <br />
loop <br />
dbms_output.put_line(i); <br />
end loop; <br />
end; <br />
/ <br />
<br />
-----使用for-loop反序循环 <br />
<br />
begin <br />
for i in REVERSE 1..10 <br />
loop <br />
dbms_output.put_line(i); <br />
end loop; <br />
end; <br />
事务处理 <br />
隔离级别 脏读 不可重复读 虚读 <br />
读未提交 <br />
Read uncommitted 可以 可以 可以 <br />
读已提交 <br />
Read committed 不可以 可以 可以 <br />
可重复读 <br />
Repeatable read 不可以 不可以 可以 <br />
可串行化 <br />
Serializable 不可以 不可以 不可以 <br />
<br />
脏读是指当一个事务正在访问数据，并且对数据进行了修改，而这种修改还没有提交到数据库中，这时，另外一个事务也访问这个数据，然后使用了这个数据。 <br />
例如：你银行有1000块，你取出500，但没最终提交，你老婆这时通过ATM查帐，你放弃了取款，这时帐户应该还有1000，但是你老婆看到的是500，于是你老婆提交了，结果你损失了500 <br />
<br />
Ps: 用线程方式理解------读数据不加锁 <br />
<br />
不可重复读是指当事务两次读取同一行数据，但每次得到的数据都不一样时，就会发生这种事件。 <br />
例如：你用网络察看你银行帐户，你老婆这时用ATM察看，这时你取出了500，你老婆准备取1000块发现不够了&#8230;.. <br />
<br />
Ps: 用线程方式理解------读之前加锁，读完放锁 <br />
<br />
脏读和不可重复读的区别是，一个未提交读取，一个以提交读取 <br />
<br />
虚读是指一个事物查询两次，另一个事物在这两次之间插入了数据，导致两次查询的结果不同 <br />
Ps: 用线程方式理解------读之前加锁，读完不放锁，直到commit或rollback才放锁 <br />
<br />
串行化-----完全安全的数据访问模式 <br />
Ps: 用线程方式理解------读之前加条件锁，读完不放锁，直到commit或rollback才放锁 <br />
<br />
commit 提交上一个事物，开始下一个事物 <br />
savepoint var 保存点 <br />
rollback 回滚到事务开始处，或某保存处 <br />
存储过程 <br />
语法格式 <br />
create or replace procedure 过程名(参数 参数设置 参数类型) is <br />
声明语句段; <br />
begin <br />
执行语句段; <br />
exception <br />
异常处理语句段; <br />
end; <br />
参数设置 <br />
in参数：读入参数，主程序向过程传递参数值。 <br />
out参数：读出参数，过程向主程序传递参数值。 <br />
in out 参数：双向参数，过程与主程序双向交流数据。 <br />
调用存储过程方法 <br />
无返回参数 execute 过程名(参数); <br />
有返回参数的要在另一个过程中调用并赋值 <br />
<br />
例子: <br />
--赋值语句&lt; := &gt; <br />
create or replace procedure pro4(w in integer,h in integer) <br />
as <br />
width integer :=w; <br />
hight integer :=h; <br />
area real; <br />
begin <br />
area :=(width+hight)*2; <br />
dbms_output.put_line('area=' || area); <br />
end; <br />
/ <br />
<br />
--条件语句&lt;if .. then ... end if&gt; <br />
create or replace procedure myro5(num in integer) as <br />
n integer :=num; <br />
begin <br />
if n=5 then <br />
dbms_output.put_line('ok'); <br />
else <br />
dbms_output.put_line('not equals'); <br />
end if; <br />
end; <br />
/ <br />
<br />
--循环&lt;while ** loop *** end loop; for * in ***loop end loop;&gt; <br />
create or replace procedure mypro6(n in integer) as <br />
con integer :=0; <br />
begin <br />
dbms_output.put_line('while loop.========='); <br />
while con&lt;n loop <br />
dbms_output.put_line(con); <br />
con :=con+1; <br />
end loop; <br />
<br />
dbms_output.put_line('for loop =========='); <br />
con :=0; <br />
for con in 1..n loop <br />
for con in n..1 loop <br />
dbms_output.put_line('*'); <br />
end loop; <br />
end loop; <br />
end; <br />
/ <br />
<br />
<br />
--使SQLPLUS控制台可以输出 <br />
set serveroutput on <br />
set serveroutput off <br />
<br />
--控制台输出 <br />
declare <br />
begin <br />
dbms_output.put_line('this is '); <br />
end; <br />
/ <br />
<br />
<br />
declare <br />
aaa varchar2(100); <br />
begin <br />
dbms_output.put_line((2+3)*6); <br />
end; <br />
/ <br />
异常处理 <br />
自定义异常处理 <br />
<br />
1. 定义异常处理 <br />
定义异常处理的语法如下： <br />
declare <br />
异常名 exception; <br />
begin <br />
2. 触发异常处理 <br />
触发异常处理的语法如下： <br />
raise 异常名; <br />
3. 处理异常 <br />
触发异常处理后，可以定义异常处理部分，语法如下： <br />
Exception <br />
When 异常名1 then <br />
异常处理语句段1; <br />
When 异常名2 then <br />
异常处理语句段2; <br />
end; <br />
小技巧 <br />
raise_application_error(错误代码,错误原因) 函数可以直接抛异常 <br />
其中错误代码为-20000到-20999之间，错误原因为2000个以内的字符 <br />
触发器 <br />
触发器相当于java中的事件监听，当某事件发生时激活特定的事件并执行相应的逻辑 <br />
DML触发器中包含了三种事件 insert update delete <br />
语法格式 <br />
create [or replace] trigger 触发器名 <br />
{before| after | instead of} {insert|delete|update} <br />
on 表名 <br />
[for each row] <br />
when 条件 <br />
begin <br />
end; <br />
before 在事件开始前执行begin/end <br />
一般应用场合: <br />
1 判断触发事件(一般是一个DML 语句)是否应该被执行 <br />
2 在触发事件之前计算一个列的值 <br />
<br />
after 在事件开始后执行begin/end <br />
<br />
一般应用场合: <br />
1 完成触发事件 <br />
<br />
for each row 表示每操作一次都触发，称作行级，不写表示无论操作多少行，只触发一次，称作表级 <br />
<br />
when(条件) 必须是行级 <br />
小技巧： <br />
触发器中可以使用三个条件词 Inserting,deleting,updating <br />
触发器中可以使用两个变量 :old | :new 分别表示旧有的值和新值，必须是行级(在过程中加:) <br />
<br />
</span></span><span style="font-size: 24pt"><span style="font-size: 14pt"><span style="color: #ff6600">instead of 替代触发器: 只能作用在视图上，用于替代DML语句 ，行级，不可与when同用 <br />
</span><br />
两个任务: <br />
第一题 <br />
创建一张表 create table test(aa number primary key); <br />
执行10次 insert into test values(任意整数) ; 语句 <br />
查询此表，结果为 1 2 3 4 5 6 7 8 9 10 <br />
<br />
第二题 <br />
</span></span><span style="font-size: 24pt"><span style="font-size: 14pt"><span style="color: fuchsia">创建一触发器保证每周的周六周日，以及每天早八点前和晚六点后不允许对emp表进行任何的DML（insert,delete,update）操作。 <br />
第三题 <br />
实现emp表中的外键deptid的级联更新功能 </span><br />
游标 <br />
游标是从数据表中提取出来的数据，以临时表的形式存放在内存中，在游标中有一个数据指针，在初始状态下指向的是首记录，利用fetch语句可以移动该指针，从而对游标中的数据进行各种操作，然后将操作结果写回数据表中。 <br />
首先我们先看看emp表,select * from scott.emp ; <br />
<br />
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO <br />
------ ---------- --------- ---------- ---------- ---------- ---------- ---------- <br />
7369 SMITH CLERK 7902 1980-12-17 800 20 <br />
7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 <br />
我想查找sal&lt;1000得数据, <br />
select * from scott.emp where sal &lt;1000 <br />
<span style="color: fuchsia">返回若干行，返回的若干行事实上是一个临时表。游标的作用是对这个临时表进行逐行处理 </span><br />
<span style="color: #ff6600">游标通常用于在存储过程及客户端开发中 </span><br />
游标流程 <br />
<br />
声明游标；CURSOR cursor_name IS select_statement <br />
<br />
为查询打开游标；OPEN cursor_name <br />
<br />
取得结果放入PL/SQL变量中； <br />
FETCH cursor_name INTO list_of_variables; <br />
FETCH cursor_name INTO PL/SQL_record; <br />
关闭游标；CLOSE cursor_name <br />
游标的属性 <br />
mycursor%isopen --是否打开 <br />
mycursor%found --fetch有数据 <br />
mycursor%notfound &#8211;fetch没有数据 <br />
mycursor%rowcount --返回游标的行数,若返回值为0，没有提取出数据。 <br />
<br />
--最基本的游标 <br />
declare <br />
cursor mycursor is select * from scott.emp where sal &gt; 1000 ; <br />
temp mycursor%rowtype ; <br />
begin <br />
open mycursor ; <br />
fetch mycursor into temp ; <br />
dbms_output.put_line(temp.sal); <br />
close mycursor; <br />
end; <br />
/ <br />
<br />
--游标的滚动 <br />
declare <br />
num number; <br />
i emp%rowtype; <br />
--定义游标 <br />
cursor mycursor is <br />
select * from emp; <br />
begin <br />
select count(*) into num from emp; <br />
if num&gt;0 then <br />
open mycursor; --打开游标 <br />
loop <br />
fetch mycursor into i; --读取游标中的值到变量中 <br />
exit when mycursor%notfound; --没有取到记录时，就退出循环 <br />
dbms_output.put_line(i.sal); <br />
end loop; <br />
close mycursor; --关闭游标 <br />
else <br />
dbms_output.put_line('emp=0'); <br />
end if; <br />
end; <br />
日期函数 <br />
函数名: to_date(string) <br />
含义: 字符串转日期 <br />
示例: select to_date('2002-1-1'，'yyyy-MM-dd') from dual; <br />
结果: 2002-1-1 <br />
<br />
函数名: add_months(date,month) <br />
含义: 增加或减小月份 <br />
示例: select add_months(sysdate,1) from dual ; <br />
结果: xxxx-xx-xx <br />
<br />
函数名:sysdate <br />
含义:当前日期，可直接加减天数 <br />
示例:select sysdate+1 from dual <br />
结果:当前日期+1天 <br />
<br />
函数名: extract(year|month|day from dateType) <br />
含义:截取日期 <br />
示例: select extract(year from sysdate)"This year" from dual; <br />
结果: 2007 <br />
问题：获取几个月以后的年份 <br />
<br />
函数名: last_day(dateType) <br />
含义: 最后一天 <br />
示例: select last_day(sysdate) from dual ; <br />
结果: xxxx-xx-xx <br />
<br />
函数名: months_between(dateType,dateType) <br />
含义: 返回两个日期间的月份 <br />
示例: select months_between('2002-1-1','2003-1-1') from dual <br />
结果: -12 <br />
<br />
函数名: to_char(dateType,yyyy|dd|mm|hh{12|24}|mi|ss|day|ww|dy) <br />
含义: 把日期转换为字符串 <br />
示例: select to_char(sysdate,'yyyy-mm-dd-hh24:mi:ss') from dual; <br />
结果: xxxxxxxx <br />
问题: 两个日期间共有几星期 <br />
<br />
字符串函数 <br />
函数名: ASCII(char) <br />
含义: 返回与指定的字符对应的十进制数 <br />
示例: select ascii('孟') from dual; <br />
结果: 50127 <br />
<br />
函数名: CHR(int) <br />
含义: 给出整数,返回对应的字符 <br />
示例: select chr(50127) from dual; <br />
结果: 孟 <br />
<br />
函数名: CONCAT(string,string) <br />
含义: 连接两个字符串 <br />
示例: select concat('我是','孟庆晨') from dual; <br />
结果: 我是孟庆晨 <br />
<br />
函数名: INITCAP(string) <br />
含义: 返回字符串并将字符串的第一个字母变为大写 <br />
示例: select INITCAP('aaa') from dual; <br />
结果: Aaa <br />
<br />
函数名: INSTR(被搜索字符串,搜索的字符串,搜索的开始位置默认为1,第几次出现默认为1) <br />
含义: 在一个字符串中搜索指定的字符,返回发现指定的字符的位置 <br />
示例: select INSTR('我是孟庆晨','孟',1,1) from dual; <br />
结果: 3 <br />
<br />
函数名: LENGTH(string) <br />
含义: 返回字符串的长度 <br />
示例: select length('孟庆晨') from dual ; <br />
结果: 3 <br />
<br />
函数名: LOWER(string) <br />
含义: 小写形式 <br />
示例: select lower('AAA') from dual <br />
结果: aaa <br />
<br />
函数名: UPPER <br />
含义: 大写形式 <br />
示例: select upper('aaa') from dual ; <br />
结果: AAA <br />
<br />
函数名: RPAD &amp; LPAD <br />
含义: 黏贴字符串到目标字符串左右 <br />
示例: select lpad('a',10,'*') from dual ; <br />
结果: *********a <br />
<br />
函数名: ltrim &amp; rtrim <br />
含义: 删除左边（右边）的字符串 <br />
示例: select ltrim('abc','a') from dual ; <br />
结果: bc <br />
<br />
函数名: substr <br />
含义: 取字符串(原字符串,第几个开始,取几个) <br />
示例: select substr ('abcdefg',3,4) from dual <br />
结果: cdef <br />
<br />
函数名: REPLACE(string,string,string) <br />
含义: 替换字符串 <br />
示例: select replace('abcde' , 'abc' , 'aaa' ) from dual ; <br />
结果: aaade <br />
<br />
数学函数 <br />
函数名: abs <br />
含义: 返回指定值的绝对值 <br />
示例: select abs(-10) from dual <br />
结果: 10 <br />
<br />
自定义函数: <br />
<br />
--函数function <br />
create or replace function prices <br />
( <br />
proprice in number <br />
) <br />
return integer <br />
is <br />
pricecount integer; <br />
begin <br />
select count(price) into pricecount from product where price&gt;proprice; <br />
if(pricecount &gt;0) then <br />
return pricecount; <br />
else <br />
return 0; <br />
end if; <br />
end prices; <br />
<br />
declare <br />
counter number := 0; <br />
begin <br />
counter := prices(30); <br />
if counter &gt;0 then <br />
dbms_output.put_line('counts:'||counter ); <br />
else <br />
dbms_output.put_line('counts:'||counter ); <br />
end if; <br />
end; <br />
/ <br />
常见问题 <br />
1 不能启动监听 <br />
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleOraHome92TNSListener <br />
添加字符串项ImagePath,值为c:\oracle\ora90\bin\TNSLSNR <br />
2 启动时,监听器不启动或打开出错 <br />
错误现象： <br />
　　Oracle启动时，监听器不启动或打开出错；服务器端：用username/password登录正常，但用username/password@alias登录不成功；客户端：用username/password@alias登录不成功 <br />
　　解决方法 <br />
　　（1）如果是因为修改了NT的机器名，则把listener.ora文件中的host参数全部改为新的NT机器名，重新启动OracleTNSListener80服务即可。 <br />
　　 <br />
　　例如: <br />
　　 <br />
　　LISTENER = <br />
　　(ADDRESS_LIST = <br />
　　(ADDRESS = (PROTOCOL = TCP)(Host = NT_Name)(Port = 1521)) <br />
　　(ADDRESS=(PROTOCOL=TCP)(Host=NT_Name)(Port= 1526)) <br />
　　) <br />
<br />
3 运行oracle后tomcat运行出错 <br />
原因：端口冲突 <br />
解决方法 <br />
修改tomcat的conf.xml文件，查找8080，修改为其他 <br />
<br />
4 本地日期问题 <br />
找到注册表MACHINE/SOFTWARE/ORACLE/HOME0/ <br />
添加字符串 NLS_DATE_FORMAT 值为yyyy-mm-dd </span></span></span></p>
<img src ="http://www.blogjava.net/Justjava/aggbug/266208.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Justjava/" target="_blank">Justjava</a> 2009-04-17 19:21 <a href="http://www.blogjava.net/Justjava/archive/2009/04/17/266208.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>js常用55种技巧</title><link>http://www.blogjava.net/Justjava/archive/2009/04/17/266202.html</link><dc:creator>Justjava</dc:creator><author>Justjava</author><pubDate>Fri, 17 Apr 2009 10:40:00 GMT</pubDate><guid>http://www.blogjava.net/Justjava/archive/2009/04/17/266202.html</guid><wfw:comment>http://www.blogjava.net/Justjava/comments/266202.html</wfw:comment><comments>http://www.blogjava.net/Justjava/archive/2009/04/17/266202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Justjava/comments/commentRss/266202.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Justjava/services/trackbacks/266202.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;1.&nbsp;oncontextmenu="window.event.returnValue=false"&nbsp;将彻底屏蔽鼠标右键&nbsp;&lt;table&nbsp;border&nbsp;oncontextmenu=return(false)&gt;&lt;td&gt;no&lt;/table&gt;&nbsp;可用于Table &nbsp;2....&nbsp;&nbsp;<a href='http://www.blogjava.net/Justjava/archive/2009/04/17/266202.html'>阅读全文</a><img src ="http://www.blogjava.net/Justjava/aggbug/266202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Justjava/" target="_blank">Justjava</a> 2009-04-17 18:40 <a href="http://www.blogjava.net/Justjava/archive/2009/04/17/266202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>