--PL/SQL的写法
declare
/*申明部分:在此申明PL/SQL用到的变量,类型及游标,以及局部存储过程和函数*/
str varchar2(20);
i number;
begin
/*执行部分:过程及SQL语句,即程序的主要部分*/
str :='Hello Oracle';
i:='aa';
dbms_output.put_line(str);
exception
/*执行异常部分:错误处理*/
when others then
dbms_output.put_line('错误');
end;
declare
str varchar2(10):='Hello ';/*定义时赋值*/
str2 varchar2(10);
i constant number:=100;/*定义常量,但是必须在申明时赋值*/
begin
str2:= 'Oracle';/*在begin中赋值*/
dbms_output.put_line(str||str2);/*\\是Oracle的连接符*/
dbms_output.put_line(i);
exception
when others then
dbms_output.put_line('出错了');
end;
declare
v_stu_id number;
v_stu_name varchar2(10);
v_stu_age number;
begin
select stu_id,stu_name,stu_age
into v_stu_id,v_stu_name,v_stu_age/*这里查询出来要赋值给变量*/
from tab_stu;
end;
declare
v_stu_id number;
v_stu_name varchar2(10);
v_stu_age number;
begin
select stu_id,stu_name,stu_age
into v_stu_id,v_stu_name,v_stu_age
from tab_stu
where stu_id=1;
dbms_output.put_line('stu_id:'||v_stu_id);
dbms_output.put_line('stu_name:'||v_stu_name);
dbms_output.put_line('stu_age:'||v_stu_age);
end;
stu_id:1
stu_name:张三
stu_age:21
--插入
declare
begin
insert into tab_stu(stu_id,stu_name,stu_age) values(4,'赵六','22');
commit;/*记得提交*/
end;
--%type的使用
declare
v_stu_id tab_stu.stu_id%type;
v_stu_name tab_stu.stu_name%type;
v_stu_age tab_stu.stu_age%type;
begin
select stu_id,stu_name,stu_age
into v_stu_id,v_stu_name,v_stu_age
from tab_stu
where stu_id=1;
dbms_output.put_line('stu_id:'||v_stu_id);
dbms_output.put_line('stu_name:'||v_stu_name);
dbms_output.put_line('stu_age:'||v_stu_age);
end;
--%rowtype的使用
declare
v_tab_stu_row tab_stu%rowtype;
begin
select stu_id,stu_name,stu_age
into v_tab_stu_row.stu_id,v_tab_stu_row.stu_name,v_tab_stu_row.stu_age
from tab_stu
where stu_id=2;
dbms_output.put_line('stu_id:'||v_tab_stu_row.stu_id);
dbms_output.put_line('stu_name:'||v_tab_stu_row.stu_name);
dbms_output.put_line('stu_age:'||v_tab_stu_row.stu_age);
end;
第二种用法 --%rowtype的使用
declare
v_tab_stu_row tab_stu%rowtype;
begin
select *
into v_tab_stu_row
from tab_stu
where stu_id=3;
dbms_output.put_line('stu_id:'||v_tab_stu_row.stu_id);
dbms_output.put_line('stu_name:'||v_tab_stu_row.stu_name);
dbms_output.put_line('stu_age:'||v_tab_stu_row.stu_age);
end;
--可变数组的使用varray
declare
type strings is varray(6) of varchar(10);--这里其实就像定义了一个对象
var_array strings:=strings('张三','孙八','孙七','赵六','王五','李四');--这里就是这个对象的具体实现,和定义
begin
dbms_output.put_line(var_array(1));
dbms_output.put_line(var_array(2));
dbms_output.put_line(var_array(3));
dbms_output.put_line(var_array(4));
dbms_output.put_line(var_array(5));
dbms_output.put_line(var_array(6));
end;
输出 张三
孙八
孙七
赵六
王五
李四
--可变数据类型table
declare
type tableStrings is table of varchar2(10)
index by binary_integer;--定义table类型的下标是二进制类型的无限增长的
var_table tableStrings;--为定义好的类型,定义一个变量
begin
var_table(1):='Hello';--为变量的索引赋值
var_table(999):='Word';--为变量的索引赋值
dbms_output.put_line(var_table(1)||' '||var_table(999));
end;
输出:Hello Word--可变数据类型table的使用2
declare
type table_row is table of tab_stu%rowtype
index by binary_integer;
var_tab_stu table_row;
begin
select stu_id,stu_name
into var_tab_stu(100).stu_id,var_tab_stu(100).stu_name
from tab_stu
where stu_id=2;
dbms_output.put_line(var_tab_stu(100).stu_id ||' '|| var_tab_stu(100).stu_name);
end;
输出:2 李四--record理解为Java中的集合
declare
type v_record is record(
re_id number,--可以是普通变量
re_name tab_stu.stu_name%type,--可以是表中的一个字段的变量
r_tab_stu tab_stu%rowtype--也可以是表中的一行
);
v_r v_record;--需要赋给变量在使用时
begin
select stu_id,stu_name,stu_age
into v_r.re_id,
v_r.re_name,
v_r.r_tab_stu.stu_age
from tab_stu
where stu_id=1;
dbms_output.put_line(v_r.re_id);
dbms_output.put_line(v_r.re_name);
dbms_output.put_line(v_r.r_tab_stu.stu_age);
end;