在pl/sql 中只能直接嵌入sql,dml,以及事务控制语句,而不能嵌入ddl语句如create。。和dcl 语句如grant
1 检索单行数据
1 使用游标变量接受数据
declare
v_ename emp.ename%type
v_sal emp.sal%type
begin
select ename,sal into v_ename,v_sal
from emp
2 使用记录变量接受数据
declare
type emp_record_type is record(
ename emp.ename%type,sal emp.sal%type
);
emp_record emp_record_type;
begin
select ename,sal into emp_record
from emp
3 嵌入 select 语句注意的事项:语句必须返回一条数据,且只能返回一条数据,否则回触发例外,或显示错误
1) no_data_found
2) too_many_rows
2 操纵数据
1 插入数据
1) 使用values子句插入数据
declare
v_deptno dept.deptno%type
v_dname dept.dname%type
v_deptno:=&no
v_dname:=&name;
insert into dept(deptno,dname)
values(v_deptno,v_danme);
2)使用子查询插入数据
declare
v_deptno emp.deptno%type:=no;
begin
insert into employee
select * from emp where deptno=v_deptno
3 更新数据
1)使用表达时更新列值
declare
v_deptno dept.deptno%type:=&no;
v_loc dept.loe%type:='&loc';
begin
update dept set loc=v_loc
where deptno=v.deptno;
end;
2) 使用子查询更新列值
declare
v_ename emp.ename%type:='&name';
begin
update emp set(sal,comm)=
(select sal ,comm from emp where ename=v_ename)
where job=(select job from emp where ename=v_ename);
3 sql 游标
1 sql%isopen 用于确定sql 游标是否已经打开。当在pl/sql 块中执行select into ,update 以及delete 语句
时oracle 会隐含的打开游标,并且在语句执行完之后会隐含的关闭游标。
2 sql/%found 用于确定sql 语句执行是否成功。
declare
v_deptno emp.deptno%type:=$no;
begin
update emp set sal=sal*1.1
where deptno=v_deptno;
if sql%found then
dbma_output.put_line('语句执行成功');
else
dbms_output.put_line('not success')
end if
end
3 sql%notfound
4 sql%rowcount 用于返回sql 语句所作用的总计行数
4