您的位置:首页 > 数据库 > Oracle

oracle的笔记,凑合着看吧!4.PL/SQL

2009-05-26 23:14 459 查看
PL/SQL是SQL的补充语言,相当于数据库内置的一种语言,用于写存储过程与触发器;

拥有功能:块结构,变量和类型,条件逻辑,循环,游标,保存查询返回结果,sql函数,存储过程,包;

1.存储过程:就是带有名字的PL/SQL的程序块,创建后可以直接调用,仅此而已;

语法:create or replace procedure 存储过程名(参数) is ..PL/SQL....

//如果没有此名字就建立,有就替换;replace 替换

//参数格式:变量名 in/out 类型,默认是in

调用: exec 存储过程名;

2.函数:相当于java的方法,拥有返回值;用户自己调用

特殊数据类型:%type , %rowtype, sqi%rowcount(影响了多少行);

注: PL/SQL中使用select语句,此select语句必须有返回的记录并且还必须只有一条,不然报错,记得要有into;

PL/SQL中使用增删改的语句,后面跟随一个commit;

PL/SQL中使用建表语句,格式为:execute immediate '建表语句';

例如:

declare

name emp.sal%type;

v_sal emp%rowtype;

//相当于表对应的类的类型

begin

name := 2450;

select * into v_sal from emp where sal = name;

//into是最重要的,呵呵,他是注入变量的;

dbms_output.put_line(v_sal.ename);

end;

他分为四个部分declare(可省略), begin, exception, end

普通:

1.简单输出'你好'的方法:

set serveroutput on;

//将内置的环境变量serveroutput设置为on,默认是off(不输出),

begin

dbms_output.put_line('你好');

end;

2.声明有变量的输出:

set serveroutput on;

declare

name varchar2(20);

//声明变量;

sex emp.ename%type;

//此变量随着emp.ename字段的类型;

begin

name := 'wang';

//赋值,注意是赋值是':='

dbms_output.put_line(name);

end;

3.有异常的写法:

set serveroutput on;

declare

name number(3,0);

begin

name := 2/0;

dbms_output.put_line(name);

exception

when others then

//任何异常都执行以下操作;

dbms_output.put_line('错误'||'wang');

//相当于Java中'错误'+'wang'

end;

复合变量,就是自定义的变量类型,分别是table, record ;

table :

语法: type 变量名 is table of 数据类型 index by 数据类型;

table有点类似于数组的数据类型,具体看例子吧:

set serveroutput on;

declare

type type_table_stt is table of number(4,0) index by binary_integer;

//type:声明是定义复合类型, index by binary_integer :下标为binary_integer类型;

name type_table_stt;

begin

name(0) := 12;

name(1) := 123;

name(-1) := 3;

bms_output.put_line(name(0));

end;

record :

语法: type 变量名 is record ( 声明变量);

record 是有点类似于java中的类的,可以他内部声明属性;

例子:

declare

type type_record_stt is record (

name varchar2(10),

sex varchar2(10)

);

name type_record_stt;

begin

name.name := '12';

name.sex := 'wang';

dbms_output.put_line(name.sex);

end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: