-- 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;
                    
                
                
            
        
浙公网安备 33010602011771号