plsql编程中变量的声明
创建第一个程序hello world
begin
dbms_output.put_line(‘Hello world’);
end;
/
set serveroutput on;(输出语句到dos窗口的命令)
begin
dbms_output.put_line(‘Hello world’);
end;
/
就可以在dos窗口中看到Hello world;
(简单变量的声明)
声明变量:
declare
v_name varchar2(20);(变量名在前,类型在后)
begin
v_name := ‘myname’;(给变量进行赋值)
dbms_output.put_line(v_name);
end;
/
(异常处理)
declare
v_num number := 0;
begin
v_num := 2/v_num;
dbms_output.put_line(v_num);
exception
when others then
dbms_output.put_line(‘error’);
end;
变量声明的规则:
1 变量名不能使用保留字:(from,select)
2 第一个字符必须是字母
3 变量名最多包含30个字符
4 不要与数据库的表或者列同名
5 每一行只能声明一个变量
常用类型变量:
binary_integer :整数,主要用来计数而不是用来表示字段类型,(提高效率)
number;数字类型
char:定长字符串;
date:日期;
long:长字符串,最长2G;
boolean 布尔类型,可以取值true,false,null值;
常量的练习;
declare
v_temp number(1);
v_count binary_integer :=0;
v_sal number(7,2) :=4000.00;
v_date date := sysdate;
v_pi constant number(3,2) := 3.14;
v_valid boolean :=false;
v_name varchar2(20) not null :=’MyName’;
begin
dbms_output.put_line(‘v_temp value’ || v_temp);(||连接符)
end;
/
注释一句用’–‘ 注释一段/* */
dbms_output.put_line()不能打印boolean 变量
使用%type属性:
declare (变量声明类型依据 表的类型变化)
v_empno number(4);
v_empno2 emp.empno%type;
v_empno3 v_empno2%type;
begin
dbms_output.put_line(‘Test’);
end;
复合变量的声明:
第一种:
Table变量类型(相当于java的数组)
declare
type type_table_emp_empno is table of emp.empno%type index by binary_integer;
v_empnos type_table_emp_empno;
begin
v_empnos(0) := 7369;
v_empnos(2) := 7839;
v_empnos(-1) := 9999;–(下标可以是小于0的)(注释)
dbms_output.put_line(v_empnos(-1));
end;
Record变量类型:(相当于java的类)
declare
type type_record_dept is record
(
deptno dept.deptno%type,
dname dept.dname%type,
loc dept.loc%type
);
v_temp type_record_dept;
begin
v_temp.deptno :=50;(相当于引用去访问成员变量)
v_temp.dname :=’aaaa’;
v_temp.loc := ‘bj’;
dbms_output.put_line(v_temp.deptno || ‘ ‘|| v_temp.dname);
end;
使用%rowtype声明record 变量;
declare
v_temp dept%rowtype;
begin
v_temp.deptno := 50;
v_temp.dname := ‘aaaa’;
v_temp.loc := ‘bj’;
dbms_output.put_line(v_temp.deptno || ‘ ‘ || v_temp.dname);
end;
SQL(select)语句在PlSQL中的应用:
declare
v_ename emp.ename%type;
v_sal emp.sal%type;
begin –plsql语句中select语句中必须有into ,必须保证返回记录
select ename,sal into v_ename,v_sal from emp where empno = 7369;
dbms_output.put_line(v_ename || ‘ ‘ || v_sal);
end;
declare
v_emp emp%rowtype;
begin
select *into v_emp from emp where empno = 7369;
dbms_output.put_line(v_emp.empno);
end;
其他SQL 语句在plsql中的应用:
declare
v_deptno dept.deptno%type := 50;
v_dname dept.dname%type :=’aaaa’;
v_loc dept.loc%type := ‘bj’;
begin –插入数值;
insert into dept2 values(v_deptno,v_dname,v_loc);
commit;
end;
declare
v_deptno emp2.deptno%type := 10;
v_count number;
begin
update emp2 set sal=sal/2 where deptno =v_deptno;
–select deptno into v_deptno from emp2 where empno = 7369;
— select count(*) into v_count from emp2;
— sql表示刚刚执行完的那条语句,(执行完这条语句后,有多少记录被 影响)
dbms_output.put_line(sql%rowcount || ‘条记录被影响’);
commit;
end;