SQL/Oracle——第六章 PL/SQL函数(作业3)

本文介绍了多个Oracle PL/SQL编程实例,包括使用游标显示emp和dept表中的信息,根据用户输入显示部门详情,处理加薪策略,以及使用显式和隐式游标进行数据操作。示例涵盖了接受用户输入,使用%type属性,for和while循环,以及带参数的游标应用。
摘要由CSDN通过智能技术生成
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:取值truefalsenull

实际使用:
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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值