文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Oracle(PLSQL)入门学习七

2017-10-20 17:29

关注

Oracle(PLSQL)入门学习七

学习视频:https://www.bilibili.com/video/BV1tJ411r7EC?p=74

设计数据库步骤:

良好的数据库设计:节省空间,数据完整,方便开发。

步骤:1、收集信息 2、标识实体 3、标识实体属性 4、标识实体之间的关系 5、画E-R图,编写Sql

概念了解:

PL/SQL:

是一种过程语言,与结构化SQl结合的编程语言,对SQL语句的扩展。分为三个部分:声明,执行,异常。如果没有东西要声明可以不写declare,不捕获异常可以不写exception。注释分分单行“--”和多行“”,变量标识符最大长度31。

变量的声明以“变量名 类型 := 值”,注意“:=”是赋值用的,而“=”是判断用的。如果要声明常量,在变量名后加关键字“constant”即“变量名 constant 类型 := 值”,声明常量必须赋值。

 

属性类型:

属性类型有%Type、%RowType。应该了解的常见类型有:number(整型和浮点)、char、varchar2(可变长度)、date、boolean、binary_integer(整型)。“%Type”用于引用表格字段的类型,用法“表名.列名%Type”。

declare
  name varchar2(20) := "数据库";
  i constant number :=3;
  salary emp.sal%type:=1000;
begin
  dbms_output.put_line(name || "hahhah");
end;

record类型,就像定义C#中的类

declare
  type student is record(
  stuid emp.empno%type,
  stuname emp.ename%type
  );
  stu student;
begin
  stu.stuid:=11;
  stu.stuname:="bibi";
  dbms_output.put_line("学号" || stu.stuid);
end;

%rowtype ,就是一种引用表的record类型。

declare
  stu emp%rowtype; --emp是一个表,使用rowtype获取表的行类型。stu其实就是record类型
begin
  stu.empno := 5555;
  stu.ename := "bibi";
  dbms_output.put_line(stu.empno || stu.ename);
  select * into stu from emp where empno=7369;
   dbms_output.put_line(stu.empno || stu.ename);
end;

 table类型,类似C#的字典类型。

declare
  type myTable is table of number index by binary_integer;
  tableone myTable;
  x number;
begin
  tableone(0) := 100;
  tableone(1) := 200;
  tableone(2) := 200;
  tableone(4) := 200;
  tableone(3) := 200;
  dbms_output.put_line(tableone(0) || tableone(1));
  x := tableone.first(); --获取第一个key
  dbms_output.put_line("第一个key" || x);
  x := tableone.next(x); --获取当前key的下一个key
  dbms_output.put_line("第一个key的下一个key" ||  x);
  x := tableone.last(); --获取最后一个key 
  dbms_output.put_line("(自动)排序最后的一个key" || x);
end;

变量作用域:

declare
  i number := 90;
begin
  declare
  j number :=100;
  begin
    dbms_output.put_line(j); --使用内层变量
    dbms_output.put_line(i); --使用外层变量
    end;
end;

if分支:if...elsif..else ;if...;if...else..;if....elsif...elsif...各种组合。

declare
  i number := 10;
begin
  if i > 30 then
    dbms_output.put_line("ok啊");
  elsif i > 5 then  -- 注意是 elsif
    dbms_output.put_line("也ok啊");
  else --注意没有then
    dbms_output.put_line("不ok啊");
  end if;
end;
/

declare
  i number := 10;
begin
  if i > 30 then
    dbms_output.put_line("ok啊"); 
  else --注意没有then
    dbms_output.put_line("不ok啊");
  end if;
end;
/

declare
  i number := 10;
begin
  if i > 30 then
    dbms_output.put_line("ok啊");   
  end if;
end;
/

null值不参与比较运算,不会出现运算结果。如果用在if比较判断分支里,只能进else。

简单循环:loop...exit when;... end loop;要写退出条件,不然会陷入死循环。

declare
  i number := 0;
begin
  loop
    dbms_output.put_line(i);
    i := i + 1;
    exit when i = 10; --不写退出条件,会陷入死循环。
    --i := i + 1; 也可以在这里写条件
  end loop;
end;

普通循环:使用while,条件前置了。

declare
  i number := 0;
begin
  while i < 100 loop
    if mod(i, 2) = 0 then
      dbms_output.put_line(i);
    end if;
    i := i + 1;
  end loop;
end;

for循环:for的变量只能自增。但使用reverse,可以反转增长的序列。

begin
  for i in 1 .. 10 loop
    dbms_output.put_line(i);
  end loop;
end;
/
begin
  for i in reverse 1 .. 10 loop
    dbms_output.put_line(i);
  end loop;
end;
/

多重循环:如果要退出外层循环,应给外层循环起别名,“exit 外层循环”,纯粹的exit只能退出当前循环。

declare
  x number := 1;
  y number := 1;
begin
  <<wai>>
  while x <= 10 loop
    dbms_output.put_line("----" || x);
    y := 1;
    while y <= 5 loop
      dbms_output.put_line(y);
      if x = 7 and y = 3 then
        exit wai; --退出外层循环
      end if;
      y := y + 1;
    end loop;
    x := x + 1;
  end loop;
end;

goto:跳转,绕道而行。

begin
  dbms_output.put_line("1");
  dbms_output.put_line("2");
  dbms_output.put_line("3");
  goto hi;
  dbms_output.put_line("4");
  dbms_output.put_line("5");
  <<hi>>
  dbms_output.put_line("6");
  dbms_output.put_line("7");
end;
begin
  dbms_output.put_line("1");
  dbms_output.put_line("2");
  dbms_output.put_line("3");
  goto hi;
  dbms_output.put_line("4");
  dbms_output.put_line("5");
  <<hi>>
  null; 
end;

 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯