oracle总结

来源:互联网 发布:龚琳娜山中问答知乎 编辑:程序博客网 时间:2024/06/07 13:18

–转换函数
select sysdate from dual;
select to_char(sysdate,’yyyy”年”mm”月”dd”日” HH12:MI:ss’) from dual;
select to_number(deptno) from dept;

–分析函数
–连续序号:返回连续的排位,不论值是否相等row_number()
select row_number() over (order by gender),empno,gender from emp;
–具有相等值的行排位相同,序数随后跳跃RANK()
select RANK() over (order by gender),empno,gender from emp;
–具有相等值的行排位相同,序号是连续的dense_rank()
select dense_rank() over (order by gender),empno,gender from emp;

–伪列rownum,rowid
select * from
(select emp.*,rownum rd from emp) e where e.rd>=1 and e.rd<=2;
–pl/sql
–基本类型的变量
Number 数字型 Int 整数型
Varchar2 变长字符型,最大2000个字符 Long 变长字符型,最长2GB Date 日期型
Boolean 布尔型(TRUE、FALSE、NULL三者取一)
2. 基本数据类型变量的定义方法 变量名 类型标识符 [not null]:=值;
1. 数值表达式 PL/SQL程序中的数值表达式是由数值型常数、变量、函数和算术运算符组成的,可以使用的算术运算符包括+(加法)、-(减法)、(乘法)、/(除法)和*(乘方)等。
PLSQL函数
PL/SQL程序中提供了很多函数供扩展功能,除了标准SQL语言的函数可以使用外,最常见的数据类型转换函数有以下3个。 To_char:将其他类型数据转换为字符型。 To_date:将其他类型数据转换为日期型。 To_number:将其他类型数据转换为数值型。

使用%type定义变量,为了让PL/SQL中变量的类型和数据表中的字段的数据类型一致,Oracle 9i提供了%type定义方法。这样当数据表的字段类型修改后,PL/SQL程序中相应变量的类型也自动修改。 %type和%rowtype
–查找多个字段的变量 declare v_id student.id%type;

if判断 declare v_b boolean:=true; begin if v_b then dbms_output.put_line(‘ok’); end if; end;

if else判断 declare v_b boolean:=true; begin if v_b then dbms_output.put_line(‘ok’); else dbms_output.put_line(‘false’); end if; end;

if elsif else判断 declare v_name varchar2(20):=’cheng’; begin if v_name=’0701’ then dbms_output.put_line(‘0701’); elsif v_name=’cheng’ then dbms_output.put_line(‘cheng’); else dbms_output.put_line(‘false’); end if; end;

loop循环,注意推出exit是推出循环,而不是推出整个代码块 declare v_i binary_integer:=0; begin loop if v_i>10 then exit; end if; v_i:=v_i+1; dbms_output.put_line(‘hehe’); end loop; dbms_output.put_line(‘over’); end;

loop简化写法 declare v_i binary_integer :=0; begin loop exit when v_i>10; v_i :=v_i+1; dbms_output.put_line(‘hehe’); end loop; dbms_output.put_line(‘over’); end;

while循环 declare v_i binary_integer:=0; begin while v_i<10 loop dbms_output.put_line(‘hello’||v_i ); v_i:=v_i+1; end loop; dbms_output.put_line(‘over’); end;

for循环,注意不需要声明变量 begin for v_i in 0..10 loop dbms_output.put_line(‘hello’||v_i); end loop; dbms_output.put_line(‘over’); end;

PLSQL异常处理:
1、声明异常 异常名 EXCEPTION; 2、抛出异常 RAISE 异常名 3、处理异常 抛出异常后的逻辑代码不会被继续执行。
–raise抛出异常,用此关键字,抛出后转到自定义的e_myException ,执行其里面的putline函数后,再跳到end处,结束PL/SQL块,raise接下面的2句不会继续执行。
PLSQL游标:
游标,从declare、open、fetch、close是一个完整的生命旅程。当然了一个这样的游标是可以被多次open进行使用的,显式cursor是静态cursor,她的作用域是全局的,但也必须明白,静态cursor也只有pl/sql代码才可以使用它。静态游标变量是在定义时就必须指定SQL语句。
游标的属性 %found,%notfound,%isopen,%rowcount。 %found:若前面的fetch语句返回一行数据,则%found返回true,如果对未打开的游标使用则报ORA-1001异常。 %notfound,与%found行为相反。 %isopen,判断游标是否打开。 %rowcount:当前游标的指针位移量,到目前位置游标所检索的数据行的个数,若未打开就引用,返回ORA-1001。
loop方式遍历游标:
while循环遍历游标,注意,第一次游标刚打开就fetch,%found为null,进不去循环
for循环遍历,最简单,用的最多,不需要 声明v_student,Open和Close游标和fetch操作(不用打开游标和关闭游标,实现遍历游标最高效方式)
Oracle存储过程:带一个参数的存储过程 输入参数in,输入参数不能进行:=赋值,但可以将它赋给as后面定义的变量; 输入参数in,可以作为变量进行条件判断; 默认不写就是in; 存储过程没有重载,这个有参的say_hello会替代已经存在的无参say_hello。

PLSQL中的function :FUNCTION和PROCEDURE的区别 1、函数有返回值,过程没有 2、函数调用在一个表达式中,过程则是作为pl/sql程序的一个语句 过程和函数都以编译后的形式存放在数据库中,函数可以没有参数也可以有多个参数并有一个返回值。过程 有零个或多个参数,没有返回值。函数和过程都可以通过参数列表接收或返回零个或多个值,函数和过程的 主要区别不在于返回值,而在于他们的调用方式,过程是作为一个独立执行语句调用的,函数以合法的表达 式的方式调用 create or replace function func(v_name in varchar2) return varchar2 is begin return(v_name||’ hello’); end;