procedure update_sal(name varchar2, newsal number);
function annual_income(name varchar2) return number;
end;
/
实例2:
–给包sp_package实现包体
SQL>create or replace package body sp_package is
procedure update_sal(name varchar2, newsal number)
is
begin
update emp set sal = newsal where ename = name;
end;
function annual_income(name varchar2) return number is
annual_salary number;
begin
select sal * 12 + nvl(comm, 0) into annual_salary from emp
where ename = name;
return annual_salary;
end;
end;
/
如何调用包的过程或是函数
SQL> call sp_package.update_sal(‘SCOTT’, 1500);
2.4、触发器
常用的触发事件包括insert,update,delete语句,而触发操作实际就是一个pl/sql块。可以使用create trigger来建立触发器。
3.1、标量定义的案例
定义一个变长字符串
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;
案例1:
SQL> declare
c_tax_rate number(3,2):=0.03;
–用户名
v_ename varchar2(5);
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;
–计算所得税
v_tax_sal := v_sal*c_tax_rate;
–输出
dbms_output.put_line(‘姓名是:’||v_ename||‘工资:’||v_sal||’ 交税:'||v_tax_sal);
end;
/
输出的结果是:
姓名是:SCOTT工资:2900 交税:87
PL/SQL procedure successfully completed
案例2:
标量(scalar)——使用%type类型
比如上例的v_ename,这样定义: v_ename emp.ename%type;
3.2、复合变量(composite)
用于存放多个值的变量。主要包括这几种:
pl/sql记录
pl/sql表
嵌套表
varray
3.2.1、pl/sql记录
类似于高级语言中的结构体,需要注意的是,当引用pl/sql记录成员时,必须要加记录变量作为前缀(记录变量.记录成员)如下:
SQL>declare
–定义一个pl/sql记录类型emp_record_type,类型包含3个数据name,salary,title。说白了,就是一个类型可以存放3个数据,主要是为了好管理
type emp_record_type is record(
name emp.ename%type,
salary emp.sal%type,
title emp.job%type);
–定义了一个sp_record变量,这个变量的类型是emp_record_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.name);
end;
/
3.2.2、pl/sql表
相当于高级语言中的数组,但是需要注意的是在高级语言中数组的下标不能为负数,而pl/sql是可以为负数的,并且表元素的下标没有限制。实例如下:
SQL>declare
–定义了一个pl/sql表类型sp_table_type,该类型是用于存放emp.ename%type
–index by binary_integer 表示下标是整数
type sp_table_type is table of emp.ename%type
index by binary_integer;
–定义了一个sp_table变量,这个变量的类型是sp_table_type
sp_table sp_table_type;
begin
select ename into sp_table(-1) from emp where empno = 7788;
dbms_output.put_line(‘员工名:’ || sp_table(-1));
end;
/
说明:
sp_table_type 是pl/sql表类型
emp.ename%type 指定了表的元素的类型和长度
sp_table 为pl/sql表变量
sp_table(0) 则表示下标为0的元素
注意:如果把select ename into sp_table(-1) from emp where empno = 7788;变成select ename into sp_table(-1) from emp;则运行时会出现错误,错误如下:
ORA-01422:实际返回的行数超出请求的行数
解决方法是:使用参照变量
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后
总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习
还有更多学习笔记面试资料也分享如下:
V无偿领取!(备注Java)**
[外链图片转存中…(img-QlQhvaIo-1711151389602)]
最后
总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习
还有更多学习笔记面试资料也分享如下:
[外链图片转存中…(img-chDGptiD-1711151389603)]