第6章:PL/SQL块
--6-19
begin
p3(var_job=>'SALESMAN',i,j,k);
end;
/
declare
cursor cur_emp(var_job in varchar2:='SALESMAN') is select empno,ename,sal from emp where job=var_job;
type record_emp is record
(
x emp.empno%type,
y emp.ename%type,
z emp.sal%type
);
emp_row record_emp;
begin
open cur_emp('MANAGER');
fetch cur_emp into emp_row;
while cur_emp%found loop
dbms_output.put_line(emp_row.x||emp_row.y||emp_row.z);
fetch cur_emp into emp_row;
end loop;
close cur_emp;
end;
/
完整结构:
[declare
变量,常量]
begin
执行部分
[exception
异常处理]
end;
/
简写形式:
begin
执行部分
...
end;
/
6.2变量与常量:
1.变量与常量定义必须在declare中。
合法标识:
必须以字母开头,长度不能超过30个字符。
标识符中不能包含减号“-”和空格。
Oracle标识符不区分大小写。
标识符不能是SQL保留字。
例题:
v_name varchar2(20) --对
2010_name varchar2(20) --错
v-name varchar2(20) --错
v name varchar2(20) --错
user varchar2(20) --错
2.基本数据类型
1)数值类型:
例题:
declar
num_mo number(5,2); --小数位2位,整数位3位
2)字符类型:
char
varchar2
例题:
declare
str varchar2(20);
begin
str:='hello,everyone';
dbms_output.put_line(str);
end;
/
3)日期类型:
declare
d1 date:= sysdate;
d2 date:='10-5月-2018';
或者d2 date:=to_date('10-5月-2018');
4)布尔类型boolean:取值true、false、null
实际使用:
3.变量与常量声明注意事项:
例题:
declare
v_ename varchar2(20);
v_sal number(6,2);
c_tax_rate constant number(3,2):=5.5; --声明常量时,必须为它赋初始值,并且数值不能改
v_hiredate date;
v_valid boolean not null default false;
begin
null; --begin与end之间至少有一条语句
end;
/
6.2.2特殊数据类型
1.%type类型
a)用基本数据类型:
declare
x varchar2(10);
y varchar2(9);
begin
select ename,job into x,y from emp where empno=7369;
sys.dbms_output.put_line(x||'的工作为'||y);
end;
/
b)%type类型
比如在system账户下:
declare
x scott.emp.ename%type;
y scott.emp.job%type;
begin
select ename,job into x,y from scott.emp where empno=7369;
sys.dbms_output.put_line(x||'的工作为'||y);
end;
/
比如在scott账户下:
declare
x emp.ename%type;
y emp.job%type;
begin
select ename,job into x,y from emp where empno=7369;
dbms_output.put_line(x||'的工作为'||y);
end;
/
2.record类型
a)用%type类型
declare
x emp.ename%type;
y emp.job%type;
z emp.sal%type;
begin
select ename,job,sal into x,y,z from emp where empno=7369;
dbms_output.put_line(x||y||z);
end;
/
b)用record类型
declare
type e_r is record
(
x emp.ename%type,
y emp.job%type,
z emp.sal%type
);
e e_r;
begin
select ename,job,sal into e from emp where empno=7369;
dbms_output.put_line(e.x||e.y||e.z);
end;
/
或者:
declare
type e_r is record
(
x varchar2(10),
y varchar2(9),
z number(7,2)
);
e e_r;
begin
select ename,job,sal into e from emp where empno=7369;
dbms_output.put_line(e.x||e.y||e.z);
end;
/
补充:&的用法
declare
x emp.ename%type;
y emp.job%type;
z emp.sal%type;
begin
select ename,job,sal into x,y,z from emp where empno=&员工编号;
dbms_output.put_line(x||y||z);
end;
/
或者:
declare
x emp.ename%type;
y emp.job%type;
z emp.sal%type;
m emp.empno%type;
begin
m:=&员工编号;
select ename,job,sal into x,y,z from emp where empno=m;
dbms_output.put_line(x||y||z);
end;
/
3.%rowtype类型
declare
e emp%rowtype;
begin
select * into e from emp where empno=7369;
dbms_output.put_line(e.ename||e.sal||e.job);
end;
/
6.3流程控制语句
6.3.1选择语句
if语句:
1)单分支
if 条件 then
语句序列;
end if;
2)双分支
if 条件 then
语句序列1;
else
语句序列2;
end if;
3)多分支
if 条件1 then
语句序列1;
SQL/Oracle——第六章 PL/SQL函数(作业3)
最新推荐文章于 2021-05-31 14:40:36 发布
本文介绍了多个Oracle PL/SQL编程实例,包括使用游标显示emp和dept表中的信息,根据用户输入显示部门详情,处理加薪策略,以及使用显式和隐式游标进行数据操作。示例涵盖了接受用户输入,使用%type属性,for和while循环,以及带参数的游标应用。
摘要由CSDN通过智能技术生成