//oralce定义标量(scalar)
declare v_name varchar(20); //定义一个varchar长度20的变量
declare v_number number(5,2); //定义一个number长度5,精度2的变量
declare v_no number(5,2):=999.99; //定义一个number长度5,精度2的变量,并附值999.99
declare date;//定义一个date日期类型
declare flag boolean not null default false;//定义一个boolean类型,不能为空,默认值是false
//oracle定义pl/sql复合类型变量(composite)
//表示定义一个user_record_type的类型,这个类型有name和pass二个字段,
//并且类型和name和user.username一样,pass和user.password一样
declear
type user_record_type is record(name user.username%type,pass user.password%type);
sp_record user_record_type; //这句话的意思是定义一个sp_record的 变量类型是user_record_type
--复合变量使用
begin
--执行部分
select username,passowrd into sp_record where usernaem='zhangsan';
--得到记录
dbms_output.put_line('名字'||sp_record.name||' 密码'||sp_record.pass); --得到值
end;
//oracle定义pl/sql复合类型表变量(composite)
//表示定义一个user_table_type的类型
//并且只有一个字段,类型和user.username一样,索引index是整数
declear
type user_table_type is table of user.username%type,user.password%type index by binary_integer;
sp_table user_table_type; //这句话的意思是定义一个sp_record的 变量类型是user_record_type
--复合变量使用
begin
--执行部分
select username,password into sp_table[0],sp_table[1] where id<=&id;
--得到记录 sp_table[0的下标可以是负数,但是取值和赋值一样,不然会报错
dbms_output.put_line('名字'|sp_table[0]||'密码'||sp_table[1]);
--sp_table[0]表示所有返回的name数组
--sp_table[1]表示所有返回的password数组
end;
//oracle使用一个游标类型
declare
--定义一个游标,名字是sp_user_cursor
type sp_user_cursor if ref cursor;
--定义一个游标
sp_user sp_user_cursor;
--定义两个变量,等循环用
v_username user.usernaem%type;
v_password user.password%type;
begin;
--执行部分
open sp_user for select username,password from user;
--取出数据
loop
fetch sp_user into v_username, v_password ;
--判断sp_user是否为空,问空时就退出
exit when sp_user$notfound then
--控制台输出
dbms_output.put_line('名字'||v_username||'密码 '||v_password);
end loop;
--关闭游标
close sp_user;
end;