PL/SQL编程基础知识(一)

--PL/SQL变量的声明和赋值
declare
  v_ename varchar2(30);--定义变量
begin
  v_ename:='&请输入名字';--接受键盘输入
  dbms_output.put_line(v_ename);
end;

--put_line :打印换行  ;  put :打印不换行

--接受数字输入,第一行输出若使用不换行打印造成输出失败
declare
 v_num number;
begin
  v_num:=22;--直接赋值
  dbms_output.put_line(v_num);
end;

--变量中接受表的类型
declare
  v_ename scott.emp.ename%type;--声明为scott用户emp表ename字段类型
begin
  select ename into v_ename from emp where empno=7369;--使用select into给变量赋值
  dbms_output.put_line(v_ename);
end;

--行结果集类型
declare
  v_emprow scott.emp%rowtype;--v_emprow的类型为scott用户emp表的行类型
begin
  select * into v_emprow from emp where empno=7369;
  dbms_output.put_line('员工姓名'||v_emprow.ename||'  员工薪水'||v_emprow.sal);--oracle字符连接使用||符号
end;

--if选择结构
declare
  v_score number;
begin
  v_score:='&请输入oracle数据成绩';
  if v_score>90 then dbms_output.put_line('奖励大大的');
  elsif v_score>80 then dbms_output.put_line('中等');--注意:oracle中的 elsif 和其他编程语言不一样:其中缺少一个e
  else dbms_output.put_line('继续努力');
  end if;--if语句块需要手动结束
end;


--case语句结构
declare
  v_ename scott.emp.ename%type;
  v_deptno scott.emp.deptno%type;
begin
  v_ename:='&请输入员工姓名';
  select deptno into v_deptno from emp where ename=v_ename;
  case v_deptno
    when 10 then dbms_output.put_line('10');
    when 20 then dbms_output.put_line('20');
    when 40 then dbms_output.put_line('30');
    else dbms_output.put_line('无');
    end case;
end;

select * from dept;
SELECT * FROM EMP;

create table grades(
       id number,
       name varchar2(30),
       course varchar2(30),
       grade number(5,2)
);
insert into grades(id,name,course,grade) values(1,'邹忌第','语文',90);
insert into grades(id,name,course,grade) values(2,'邹忌第','数学',90);
insert into grades(id,name,course,grade) values(3,'邹忌第','外语',90);
insert into grades(id,name,course,grade) values(4,'邹忌第','物理',90);
insert into grades(id,name,course,grade) values(5,'男生与我','语文',90);
insert into grades(id,name,course,grade) values(6,'男生与我','数学',90);
insert into grades(id,name,course,grade) values(7,'男生与我','外语',90);
insert into grades(id,name,course,grade) values(8,'海军','语文',90);
insert into grades(id,name,course,grade) values(9,'海军','数学',90);
insert into grades(id,name,course,grade) values(10,'海军','外语',90);

select * from grades;

--行转列

select name,
sum(case when course='语文' then grade else 0 end) as 语文,
sum(case when course='数学' then grade else 0 end) as 数学,
sum(case when course='外语' then grade else 0 end) as 外语,
sum(case when course='物理' then grade else 0 end) as 物理
 from grades group by name;
 
--LOOP循环  至少执行一次
declare
 v_num1 number;
 v_num2 number;
begin
  v_num1:='&请输入数值1';
  v_num2:='&请输入数值2';
  
  loop
    dbms_output.put_line(v_num1);
    v_num1:=v_num1+1;
    exit when v_num1>v_num2;--退出条件
   end loop;
exception
   when others then
     dbms_output.put_line('unknown exception occurred');
     dbms_output.put_line(sqlcode);--输出异常对应的编号
     dbms_output.put_line(sqlerrm);--输出异常对应的信息
end;

--while循环 使用最多 最为灵活

declare
     v_num1 number;
     v_num2 number;
begin
     v_num1:='&请输入数值1';
     v_num2:='&请输入数值2';
     
     while v_num1<v_num2 loop
       dbms_output.put_line(v_num1);
       v_num1:=v_num1+1;
      end loop;
exception
  when others then
     dbms_output.put_line('unknown exception occurred');
     dbms_output.put_line(sqlcode);--输出异常对应的编号
     dbms_output.put_line(sqlerrm);--输出异常对应的信息
end;


--for循环
declare
     v_num1 number;
     v_num2 number;
     
begin
     v_num1:='&请输入数值1';
     v_num2:='&请输入数值2';
     
     for v_result in v_num1.. v_num2 loop --for 变量名 in 循环的范围 loop
       dbms_output.put_line(v_result);--对变量进行操作
     end loop;
exception
  when others then
     dbms_output.put_line('unknown exception occurred');
     dbms_output.put_line(sqlcode);--输出异常对应的编号
     dbms_output.put_line(sqlerrm);--输出异常对应的信息
end;

猜你喜欢

转载自blog.csdn.net/qq_36443497/article/details/77450063