概述
本篇博文中主要探讨以下内容:
- 记录变量(record复合数据类型)
- sql 属性(SQL%FOUND、SQL%NOTFOUND、SQL%ROWCOUNT)
- 输入一个部门号,按不同的部门进行加薪
- 一次取多个值用select into
- 取出全部列
1. 记录变量
record:
定义记录数据类型,将几个相关的、分离的、基本数据类型的变量组成一个整体的方法,即RECORD复合数据类型。
在使用记录类型变量时,需要在声明部分先声明记录的组成,记录的变量,然后在执行部分引用该记录变量本身或者其中的成员。
--记录变量
declare
type emp_record_type is record(v_name emp.ename%type,v_sal emp.sal%type);
emp_record emp_record_type;
begin
select ename ,sal into emp_record from emp where empno=&no;
dbms_output.put_line('name: ' || emp_record.v_name || ' sal: ' || emp_record.v_sal);
end;
declare
emp_record emp%ROWTYPE;
begin
select * into emp_record from emp where empno = &no;
dbms_output.put_line('name: ' || emp_record.ename || ' sal: ' || emp_record.sal);
exception
when NO_DATA_FOUND then
dbms_output.put_line('找不到此人');
when others then
null;
end;
2.sql 属性
--sql 属性
--SQL%FOUND和SQL%NOTFOUND
begin
update t set sal= &sal where empno= &no;
if SQL%FOUND then
dbms_output.put_line('更新完成');
else
dbms_output.put_line('没有找到数据');
end if;
end;
--为什么没有显示汉字信息?
declare
v_sal number;
begin
select sal into v_sal from emp where empno = 743;
if (SQL%FOUND) then
dbms_output.put_line('sal = ' || v_sal);
else
dbms_output.put_line('找不到此编号');
end if;
end;
ORA-01403: no data found
ORA-06512: at line 4
SQL%NOTFOUND 与上面相反
--返回作用的计数:SQL%ROWCOUNT
begin
update t set sal = 1 ;
dbms_output.put_line('has updated ' || SQL%ROWCOUNT || ' rows');
end;
3. 输入一个部门号,按不同的部门进行加薪
--输入一个部门号,按不同的部门进行加薪
declare
v_deptno emp.deptno%type;
begin
v_deptno := &no;
case v_deptno
when 10 then
update emp set comm = 100 where deptno = v_deptno;
when 20 then
update emp set comm = 80 where deptno = v_deptno;
when 30 then
update emp set comm = 50 where deptno = v_deptno;
else
dbms_output.put_line('不存此部门');
end case;
end;
4. 一次取多个值用select into
--一次取多个值用select into
declare
type emp_table_type is table of emp.ename%type index by binary_integer;
emp_table emp_table_type;
begin
select ename bulk collect into emp_table from emp;
for i in 1..emp_table.count loop
dbms_output.put_line(emp_table(i));
end loop;
end;
declare
type emp_table_type is table of emp.ename%type;
emp_table emp_table_type;
begin
select ename bulk collect into emp_table from emp;
for i in 1..emp_table.count loop
dbms_output.put_line(emp_table(i));
end loop;
end;
5. 取出全部列
--取出全部列
declare
type emp_table_type is table of emp%rowtype;
emp_table emp_table_type;
begin
select * bulk collect into emp_table from emp;
for i in 1..emp_table.count loop
dbms_output.put_line('name: ' || emp_table(i).ename || ' sal: ' || emp_table(i).sal);
end loop;
end;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~