·? 介绍
?? 在编写PL/SQL程序时,可以定义变量和常量;在PL/SQL程序中包括有:
???????? ①标量类型
???????? ②复合类型
???????? ③参照类型
???????? ④lob
` 标量---常用类型
?? 在编写PL/SQL块时,如果要使用变量,需在定义部分定义变量。
?? PL/SQL中定义变量和常量的语法如下:
???????? ①定义一个变长字符串
??????????? v_ename?? varchar2(10);
???????? ②定义一个小数??? 范围-9999.99~9999.99
??????????? v_sal? number(6 , 2);
???????? ③定义一个小数并给一个初始值为5.4:=是pl/sql 的赋值号
??????????? v_sal2? number(6,2):=5.4
???????? ④定义一个日期类型的数据
??????????? v_hiredate? date;
???????? ⑤定义一个布尔变量,不能为空,初始值为false
????????????v_valid?? boolean? not null? default? false ;
??? 使用标量
????????? 在定义好变量后,就可以使用这些变量。这里需要说明的是pl/sql块为变量赋值不同于其它的编程语言,需要在等号
????前加冒号(:=)
??????????eg:
???????????????? declare
???????????????????? t_tax_rate number(3,2):=0.03;
?????????????????? ? --用户名
????????????????????? v_ename varchar2(5);
????????????????????? --v_ename emp.ename%type;--此字段和表字段大小一样
??????????????????? ? v_sal number(7,2);
??????????????????????v_tax_sal number(7,2);
???????????????? --执行
?????????????????begin
????????????????????? ?select ename,sal into v_ename,v_sal from emp where empno=&no;
??????????????? ?????? --pl/sql中可以使用+-*/
?????????????????????? --计算所得税
???????????????????????v_tax_sal:=v_sal*t_tax_rate;
?????????????????????? --输出
??????????????????????dbms_output.put_line('姓名:'||v_ename||'? 工资:'||v_sal||'? 交税:'||v_tax_sal);
??????????????? end;
·? 复合变量-------介绍
?????????用于存放多个值的变量。主要包括:
?????????①pl/sql记录
?????????②pl/sql表
?????????③嵌套表
?????????④varray
?
???????? 记录:
?????????????? 相当于高级语言中的结构体/类
???????????????? declare
??????????????????? type emp_record_type is record(
??????????????????????????? v_name emp.ename%type,
?????????????????????????? ?salary emp.sal%type,
??????????????????????????? title emp.job%type);
????????????????sp_record emp_record_type;
????????????????begin
?????????????????????? select ename , sal , job into sp_record from emp where empno=7788;
?????????????????????? dbms_output.put_line('员工名:'||sp_record.v_name);
??????????????? end;
????????? 表:
???????????????? 相当于高级语言里的数组
??????????????? declare
????????????????????? ?type sp_table_type is table of emp.ename%type?
???????????????????????index by binary_integer;
?????????????????????? sp_table sp_table_type;
??????????????? begin
????????????????????? ?select ename into sp_table(0) from emp where empno=7788;
?????????????????????? dbms_output.put_line('员工名:'||sp_table(0));
??????????????? end;
???????????????--说明:
?????????????? --sp_table_type?? 是pl/sql表类型
?????????????? --emp.ename%type? 指定了表的元素的类型和长度
?????????????? --sp_table? 为pl/sql表变量
?????????????? --sp_table(0)则表示下标为0的元素
·? 参照变量
???? 参照变量是指用于存放数值指针的变量,通过使用参照变量,可以使得应用程序共享相同对象,从而降低占用的空间。在编写PL/SQL程序时,可以使用游标变量和对象类型变量二种参照变量类型。
·? 参照变量?? 游标变量
?????????使用游标时,当定义游标时不需要指定相应的selec t语句,但是当使用游标时需要指定select语句,这样一个游标就与一个select语句结合了,实例如下:
?????????①请使用pl/sql编写一个块,可以输入部门号,并显示该部门所有员工姓名和他的工资。
?????????②在1基础上,如果某个员工的工资低于200元,就增加100元