PL/SQL简介
declare
v_eno number;
v_ename varchar2(10);
begin
v_eno:=&empno;
select ename into v_ename from emp where empno=v_eno;
dbms_output.put_line('编号为:'||v_eno||'雇员的名字为:'||v_ename);
end;
变量的声明与赋值
declare
v_result varchar2(30);
begin
dbms_output.put_line('v_result的内容:'||v_result);
end;
declare
v_resultA number:=100;
v_resultB number;
begin
v_resultb:=30;
dbms_output.put_line('计算的结果是:'||(v_resultA+v_resultB));
end;
declare
v_resultA number not null:=100;
begin
dbms_output.put_line('v_resultA变量内容:'||(v_resultA));
end;
declare
v_resultA number not null;
begin
dbms_output.put_line('v_resultA变量内容:'||(v_resultA));
end;
declare
v_resultA constant number not null:=100;
begin
dbms_output.put_line('v_resultA变量内容:'||(v_resultA));
end;
declare
v_resultA constant number not null:=100;
begin
v_resultA:=20;
dbms_output.put_line('v_resultA变量内容:'||(v_resultA));
end;
使用%type声明变量类型
declare
v_eno emp.empno%TYPE;
v_ename emp.ename%TYPE;
begin
dbms_output.put_line('请输入雇员编号:');
v_eno:=&empno;
select ename into v_ename from emp where empno=v_eno;
dbms_output.put_line('编号为:'||v_eno||'雇员的名字为:'||v_ename);
end;
使用%ROWTYPE声明变量类型
declare
v_deptRow dept%ROWTYPE;
begin
select * into v_deptRow from dept where deptno=10;
dbms_output.put_line('部门编号:'||v_deptRow.deptno||',名称:'||v_deptRow.dname||',位置:'||v_deptRow.loc);
end;
运算符
赋值运算符
declare
v_info varchar2(50):='工大计算机学院';
v_url varchar2(50);
begin
v_url:='www.hut.edu.cn';
dbms_output.put_line(v_info);
dbms_output.put_line(v_url);
end;
连接运算符
declare
v_info varchar2(50):='工大计算机学院';
v_url varchar2(50);
begin
v_url:='www.hut.edu.cn';
dbms_output.put_line(v_info||',网址:'||v_url);
end;
关系运算符
declare
v_url varchar2(50):='www.hut.edu.cn';
v_num1 number:=80;
v_num2 number:=30;
begin
if v_num1>v_num2 then
dbms_output.put_line('第一个数字比第二个数字大');
end if;
if v_url like '%hut%' then
dbms_output.put_line('网址之中包含hut单词');
end if;
end;
逻辑运算符
declare
v_flag1 boolean:=true;
v_flag2 boolean:=false;
v_flag3 boolean;
begin
if v_flag1 and (not v_flag2) then
dbms_output.put_line('v_flag1 and (not v_flag2)=TRUE');
end if;
if v_flag1 or v_flag3 then
dbms_output.put_line('v_flag1 or v_flag3 = true');
end if;
if v_flag1 and v_flag3 is null then
dbms_output.put_line('v_flag1 and v_flag3的结果为null。');
end if;
end;
--数据库类型划分
--标量划分
--程序结构
declare
v_countResult number;
begin
select count(empno) into v_countResult from emp;
if v_countResult>10 then
dbms_output.put_line('emp表的记录大于10条。');
end if;
end;
declare
v_countResult number;
begin
select count(deptno) into v_countResult from dept;
if v_countResult>10 then
dbms_output.put_line('dept表的记录大于10条。');
else
dbms_output.put_line('dept表的记录小于10条。');
end if;
end;
declare
v_countResult number;
begin
select count(empno) into v_countResult from emp;
if v_countResult>10 then
dbms_output.put_line('emp表的记录大于10条。');
elsif v_countResult<10 then
dbms_output.put_line('emp表的记录小于10条。');
else
dbms_output.put_line('emp表的记录等于10条。');
end if;
end;
declare
v_empSal emp.sal%TYPE;
v_empName emp.ename%TYPE;
v_eno emp.empno%TYPE;
begin
v_eno:=&inputEmpno;
select ename,sal into v_empName,v_empSal from emp where empno=v_eno;
if v_empSal>3000 then
dbms_output.put_line(v_empName||'的工资属于高工资!');
elsif v_empSal>2000 then
dbms_output.put_line(v_empName||'的工资属于中等工资!');
else
dbms_output.put_line(v_empName||'的工资属于低工资!');
end if;
end;
declare
v_empSal emp.sal%TYPE;
v_dno emp.deptno%TYPE;
v_eno emp.empno%TYPE;
begin
v_eno:=&inputEmpno;
select deptno,sal into v_dno,v_empSal from emp where empno=v_eno;
if v_dno=10 then
if v_empSal*1.1>5000 then
update emp set sal=5000 where empno=v_eno;
else
update emp set sal=sal*1.1 where empno=v_eno;
end if;
elsif v_dno=20 then
if v_empSal*1.2>5000 then
update emp set sal=5000 where empno=v_eno;
else
update emp set sal=sal*1.2 where empno=v_eno;
end if;
elsif v_dno=30 then
if v_empSal*1.3>5000 then
update emp set sal=5000 where empno=v_eno;
else
update emp set sal=sal*1.3 where empno=v_eno;
end if;
else
null;
end if;
end;
--循环结构
LOOP循环
declare
v_i number:=1;
begin
loop
dbms_output.put_line('v_i='||v_i);
exit when v_i>=3;
v_i:=v_i+1;
end loop;
end;
declare
v_i number:=1;
begin
while(v_i<=3) loop
dbms_output.put_line('v_i='||v_i);
v_i:=v_i+1;
end loop;
end;
declare
v_i number:=1;
begin
for v_i in reverse 1..3 loop
dbms_output.put_line('v_i='||v_i);
end loop;
end;
declare
v_eno number;
v_ename varchar2(10);
begin
v_eno:=&empno;
select ename into v_ename from emp where empno=v_eno;
dbms_output.put_line('编号为:'||v_eno||'雇员的名字为:'||v_ename);
end;
变量的声明与赋值
declare
v_result varchar2(30);
begin
dbms_output.put_line('v_result的内容:'||v_result);
end;
declare
v_resultA number:=100;
v_resultB number;
begin
v_resultb:=30;
dbms_output.put_line('计算的结果是:'||(v_resultA+v_resultB));
end;
declare
v_resultA number not null:=100;
begin
dbms_output.put_line('v_resultA变量内容:'||(v_resultA));
end;
declare
v_resultA number not null;
begin
dbms_output.put_line('v_resultA变量内容:'||(v_resultA));
end;
declare
v_resultA constant number not null:=100;
begin
dbms_output.put_line('v_resultA变量内容:'||(v_resultA));
end;
declare
v_resultA constant number not null:=100;
begin
v_resultA:=20;
dbms_output.put_line('v_resultA变量内容:'||(v_resultA));
end;
使用%type声明变量类型
declare
v_eno emp.empno%TYPE;
v_ename emp.ename%TYPE;
begin
dbms_output.put_line('请输入雇员编号:');
v_eno:=&empno;
select ename into v_ename from emp where empno=v_eno;
dbms_output.put_line('编号为:'||v_eno||'雇员的名字为:'||v_ename);
end;
使用%ROWTYPE声明变量类型
declare
v_deptRow dept%ROWTYPE;
begin
select * into v_deptRow from dept where deptno=10;
dbms_output.put_line('部门编号:'||v_deptRow.deptno||',名称:'||v_deptRow.dname||',位置:'||v_deptRow.loc);
end;
运算符
赋值运算符
declare
v_info varchar2(50):='工大计算机学院';
v_url varchar2(50);
begin
v_url:='www.hut.edu.cn';
dbms_output.put_line(v_info);
dbms_output.put_line(v_url);
end;
连接运算符
declare
v_info varchar2(50):='工大计算机学院';
v_url varchar2(50);
begin
v_url:='www.hut.edu.cn';
dbms_output.put_line(v_info||',网址:'||v_url);
end;
关系运算符
declare
v_url varchar2(50):='www.hut.edu.cn';
v_num1 number:=80;
v_num2 number:=30;
begin
if v_num1>v_num2 then
dbms_output.put_line('第一个数字比第二个数字大');
end if;
if v_url like '%hut%' then
dbms_output.put_line('网址之中包含hut单词');
end if;
end;
逻辑运算符
declare
v_flag1 boolean:=true;
v_flag2 boolean:=false;
v_flag3 boolean;
begin
if v_flag1 and (not v_flag2) then
dbms_output.put_line('v_flag1 and (not v_flag2)=TRUE');
end if;
if v_flag1 or v_flag3 then
dbms_output.put_line('v_flag1 or v_flag3 = true');
end if;
if v_flag1 and v_flag3 is null then
dbms_output.put_line('v_flag1 and v_flag3的结果为null。');
end if;
end;
--数据库类型划分
--标量划分
--程序结构
declare
v_countResult number;
begin
select count(empno) into v_countResult from emp;
if v_countResult>10 then
dbms_output.put_line('emp表的记录大于10条。');
end if;
end;
declare
v_countResult number;
begin
select count(deptno) into v_countResult from dept;
if v_countResult>10 then
dbms_output.put_line('dept表的记录大于10条。');
else
dbms_output.put_line('dept表的记录小于10条。');
end if;
end;
declare
v_countResult number;
begin
select count(empno) into v_countResult from emp;
if v_countResult>10 then
dbms_output.put_line('emp表的记录大于10条。');
elsif v_countResult<10 then
dbms_output.put_line('emp表的记录小于10条。');
else
dbms_output.put_line('emp表的记录等于10条。');
end if;
end;
declare
v_empSal emp.sal%TYPE;
v_empName emp.ename%TYPE;
v_eno emp.empno%TYPE;
begin
v_eno:=&inputEmpno;
select ename,sal into v_empName,v_empSal from emp where empno=v_eno;
if v_empSal>3000 then
dbms_output.put_line(v_empName||'的工资属于高工资!');
elsif v_empSal>2000 then
dbms_output.put_line(v_empName||'的工资属于中等工资!');
else
dbms_output.put_line(v_empName||'的工资属于低工资!');
end if;
end;
declare
v_empSal emp.sal%TYPE;
v_dno emp.deptno%TYPE;
v_eno emp.empno%TYPE;
begin
v_eno:=&inputEmpno;
select deptno,sal into v_dno,v_empSal from emp where empno=v_eno;
if v_dno=10 then
if v_empSal*1.1>5000 then
update emp set sal=5000 where empno=v_eno;
else
update emp set sal=sal*1.1 where empno=v_eno;
end if;
elsif v_dno=20 then
if v_empSal*1.2>5000 then
update emp set sal=5000 where empno=v_eno;
else
update emp set sal=sal*1.2 where empno=v_eno;
end if;
elsif v_dno=30 then
if v_empSal*1.3>5000 then
update emp set sal=5000 where empno=v_eno;
else
update emp set sal=sal*1.3 where empno=v_eno;
end if;
else
null;
end if;
end;
--循环结构
LOOP循环
declare
v_i number:=1;
begin
loop
dbms_output.put_line('v_i='||v_i);
exit when v_i>=3;
v_i:=v_i+1;
end loop;
end;
declare
v_i number:=1;
begin
while(v_i<=3) loop
dbms_output.put_line('v_i='||v_i);
v_i:=v_i+1;
end loop;
end;
declare
v_i number:=1;
begin
for v_i in reverse 1..3 loop
dbms_output.put_line('v_i='||v_i);
end loop;
end;