plsql语句基础

-- plsql语言
三大块
declare -- 声明变量
begin -- 执行语块
exception -- 异常处理
end;
-- 属性,变量,变量类型引用
declare
v_empno number; -- 自定义变量属性,要与原属性一致,或同类型
v_job emp.job%type; -- 引用数据库某列类型
begin
select empno into v_empno from emp where empno=7788;

select job into v_job from emp where empno=7788;

dbms_output.put_line(v_empno||v_job);
end;


declare
v_emp emp%rowtype; -- 行变量,引用整行类型
begin
select * into v_emp from emp where empno=7788;

dbms_output.put_line(v_emp.empno||v_emp.job);
end;

-- if语句,{}改成then,else if改成elsif ,else后面{}then都不写,要用end if结尾,空语句要写null
declare
v_emp emp%rowtype;
begin
select * into v_emp from emp where empno=7788;
if(v_emp.sal between 2000 and 3000) then
dbms_output.put_line(666);
else
dbms_output.put_line(777);
end if;
end;

-- 三种循环loop,whileloop,forloop及跳转语句goto
declare
coun number:=0;
coun2 number:=10;
begin
loop
coun:=coun+1;
goto flag; -- 跳转语句
exit when coun=11;
dbms_output.put_line(coun);
end loop;
<<flag>>
loop -- 设定跳转标签
coun2:=coun2+1;
exit when coun2=21;
dbms_output.put_line(coun2);
end loop;
end;

-- 异常处理
1预定义错误处理

2非预定义错误

3自定义错误

-- 命令行操作
-- 备份导出
exp 用户名1/密码1@ORCL file="备份地址1"
-- 恢复导入
imp 用户名2/密码2@ORCL fromuser="用户名1" touser="用户名2" file="备份地址1"
-- 也可用图形化界面操作

-- 隐式游标sql,自动声明、开启、关闭
declare
begin
update emp set comm=1000 where empno=7788;
if(sql%found) then -- %found sql语句影响了一行或者多行,true,也就是sql语句能找到;对应也有%notfound
dbms_output.put_line(sql%rowcount); -- %rowcount sql语句影响行数
else
dbms_output.put_line(777);
end if;
/*if(sql%isopen) then -- %isopen 游标是否打开,隐式游标一直是false
dbms_output.put_line(666);
else
dbms_output.put_line(777);
end if;*/
end;

declare
begin
/* update emp set comm=1000 where empno=8888;
if(sql%found) then
dbms_output.put_line(666);
else
dbms_output.put_line(777);
end if;*/
if(sql%isopen) then -- %isopen 游标是否打开,隐式游标一直是false
dbms_output.put_line(666);
else
dbms_output.put_line(777);
end if;
end;


-- 不带参数显式游标
-- loop循环
declare
cursor cur_emp is select * from emp;-- 声明游标,说明游标是哪个结果集的
v_emp emp%rowtype;
begin
open cur_emp;
loop
fetch cur_emp into v_emp;
exit when cur_emp%notfound;
dbms_output.put_line(v_emp.empno||v_emp.ename);
end loop;
close cur_emp;
end;

-- whileloop循环
declare
cursor cur_emp is select * from emp;
v_emp emp%rowtype;
begin
open cur_emp;
fetch cur_emp into v_emp;
while cur_emp%found loop
dbms_output.put_line(v_emp.empno||v_emp.ename);
fetch cur_emp into v_emp;
end loop;
close cur_emp;
end;

-- forloop循环 注意:游标自动开启自动关闭
declare
cursor cur_emp is select * from emp;

begin
for v_emp in cur_emp loop
dbms_output.put_line(v_emp.empno||v_emp.ename);
end loop;

end;


-- 带参数显式游标
select * from emp where empno=7788;

declare
cursor cur_emp(v_empno emp.empno%type)
is select * from emp where empno=v_empno;
v_emp emp%rowtype;
begin
open cur_emp(7788);
fetch cur_emp into v_emp;
dbms_output.put_line(v_emp.empno||'姓名'||v_emp.ename);
close cur_emp;
end;

原文地址:https://www.cnblogs.com/21556guo/p/13561815.html