赞
踩
if(...) then
PL/SQL语句;
elsif(...) then
PL/SQL语句;
else
PL/SQL语句;
end if;
1. for循环
语法格式: for 变量 in [revers] 变量初值..变量循环结束值 loop ...... end loop; 示例1: for i in 1..10 loop dbms_output.put_line(‘i = ‘ + i); end loop; 示例2: declare sum number :=0; begin for i in (select sal from emp where empno between 7000 and 8000) loop sum:=sum+i.sal; end loop; dbms_output.put_line('员工编号范围是7000到8000工资的和是'||sum); end;
2. while循环
语法格式: while 条件 loop 语句 end loop 示例: DECLARE i number; BEGIN i:=0; WHILE i<9 LOOP i:=i+1; DBMS_OUTPUT.PUT_LINE('内:i='||i); END LOOP; DBMS_OUTPUT.PUT_LINE('外:i='||i); END;
3. loop循环
语法格式: loop 循环语句 end loop; 示例: DECLARE i number; BEGIN i:=0; LOOP i:=i+1; EXIT WHEN i>9; DBMS_OUTPUT.PUT_LINE('内:i='||i); END LOOP; DBMS_OUTPUT.PUT_LINE('外:i='||i); END;
4. goto循环
示例:
DECLARE
i number;
BEGIN
i:=9;
<<repeat_loop>> --循环点
i:=i-1;
DBMS_OUTPUT.PUT_LINE(X);
IF i>0 THEN
GOTO repeat_loop; --当i的值小于9时,就goto到repeat_loop
END IF;
END;
1. in
where "列名" in ('value1','value2'...)
2. or 或、and 与
and的优先级大于or的优先级
可以用in避免使用or
where date ='1996,06,04' or date ='1998,01,26'
where date in('1996,06,04','1998,01,26')
3. like
like的模糊查询,其通配符如下:
% 表示零个或多个字符
_ 单一任意字符
\ 特殊字符
[ ] 在某种范围内的字符,如[0-9]、[abcd]
[^ ] 不在某种范围内的字符,如[^0-9]、[^abcd]
like '%a%' 是指字符串中有a都算,%是一个或多个字符
like '%a' 是指字符串中以a结尾
like 'a%' 是指字符串中以a开头
like '_a_' 是指字符串中有a都算,_只是一个字符
like '_a' 是指字符串中以a结尾
like 'a_' 是指字符串中以a开头
4. minus
minus 直接翻译为中文是 “减” 的意思,在Oracle中也是用来做减法操作的,只不过它不是传统意义上对数字的减法,而是对查询结果集的减法。A minus B就意味着将结果集A去除结果集B中所包含的所有记录后的结果,即在A中存在,而在B中不存在的记录。
Oracle的minus是按列进行比较的,所以A能够minus B的前提条件是结果集A和结果集B需要有相同的列数,且相同列索引的列具有相同的数据类型。此外,Oracle会对minus后的结果集进行去重。
1. +
where A.ID(+)=B.ID 右外连接 相当于A right outer join B on ( A.ID=B.ID);
where B.ID=B.ID(+) 左外连接 相当于A left outer join B on ( A.ID=B.ID);
哪边有(+)哪边就允许为空
2. ||
--字符串连接
相当于 mssql中的 +
例: ‘abc’ || 'def' 结果为:'abcdef'
相当于 ‘abc’ + 'def'
1.隐式游标
2.显示游标
3.ref 游标
oracle中open cursor for 和for cursor in的区别如下:
open cursor for是直接打开游标查询结果,适用于单表查询,
结果集一般不会太大,用法如下:
create or replace procedure zhazha.test(p_cursor out test.cursortype) as
begin
open p_cursor for //打开游标
select *from from test_table
end test;
-------------------------------------------------------------------------------
for cursor in是从大量数据中循环获取满足条件的记录,放入游标,用法如下:
1. where 1 = 1
1=1 是永恒成立的,意思无条件的,也就是说在SQL语句里有没有这个1=1都可以
后面不用判断有没有where条件,直接加and…
这个1=1常用于应用程序根据用户选择项的不同拼凑where条件时用的。
如:web界面查询用户的信息,where默认为1=1,这样用户即使不选择任何条件,sql查询也不会出错。如果用户选择了姓名,那么where变成了where 1=1 and 姓名=‘用户输入的姓名’,如果还选择了其他的条件,就不断在where 条件后追加 and语句就行了。如果不用1=1的话,每加一个条件,都要判断前面有没有where 条件,如果没有就写where …,有就写and语句,因此此时用1=1可以简化了应用程序的复杂度
2. count / distinct
使用count(1)、count(*)、count(rowid)统计行数 select count(1) from table1; 为null也算一条记录 select count(*) from table1; select count(row) from table1; // 表示不包括为 null 的并去掉重复的,若rowid可能为空时,查询结果比前两个少 select count(distinct row) from table1; distinct 去重(查询结果显示时去重) 查找名字对应(去重)的ID select *, count(distinct name) from table group by name 结果: id name count(distinct name) 1 a 1 2 b 1 3 c 2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。