Oracle(PLSQL)入门学习八(完结篇)

Oracle(PLSQL)入门学习八(完结篇)学习视频:https://www.bilibili.com/video/BV1tJ411r7EC?p=75 游标cursor:用于存放多条数据的容器。需要开始open和关闭close。游标下移使用“f

Oracle(PLSQL)入门学习八(完结篇)

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

游标cursor:用于存放多条数据的容器。需要开始open和关闭close。游标下移使用“fetch…into…”。

declare
  cursor myCursor is
    select * from emp;
  yb myCursor%rowtype;
begin
  open myCursor;
  for i in 1 .. 3 loop
    fetch myCursor
      into yb;
    dbms_output.put_line(yb.empno || yb.ename);
  end loop;
  close myCursor;
end;

代码100分

使用%found和%notfound属性判断游标是否有值,使用这两个属性的前提是游标必须经过下移。

代码100分declare
  cursor myCursor is
    select * from emp;
  yb myCursor%rowtype;
begin
  open myCursor;
  loop
    fetch myCursor
      into yb;
    dbms_output.put_line(yb.empno || "-" || yb.ename);
    exit when myCursor%notfound;
  end loop;
  close myCursor;
end;

declare
  cursor myCursor is
    select * from emp;
  yb myCursor%rowtype;
begin
  open myCursor;
  fetch myCursor
    into yb; --游标必须先经过下移,才能使用%found和%notfound属性
  while myCursor%found loop
    fetch myCursor
      into yb;
    dbms_output.put_line(yb.empno || "-" || yb.ename);
  end loop;
  close myCursor;
end;

智能游标:变量定义、自动开关、自动下移。

代码100分--智能游标
--变量自动定义
--游标自动开
--游标自动下移
--自动关闭

declare
  cursor myCursor is
    select * from emp;
begin
  for employee in myCursor loop
    dbms_output.put_line(employee.empno || "-" || employee.ename);
  end loop;
end;

异常:无法预测的程序错误。

declare
  employee emp%rowtype;
begin
  select * into employee from emp where empno = 70369;
exception
  when no_data_found then
    dbms_output.put_line("找不到数据");
  when others then
    dbms_output.put_line("默认异常,,,");
end;

存储过程:远程发送存储过程名,不需要发送具体的sql,避免发送过程中被截取、篡改sql。优点:提高效率,且更加安全。

create or replace procedure getmax(x number, y number) is
begin
  if x > y then
    dbms_output.put_line(x);
  else
    dbms_output.put_line(y);
  end if;
end;

call getmax(10,12);
exec getmax(11,12);
execute getmax(45,56);

调用存储过程三种方法call、exec、execute。

存储过程参数模式:in表示只读,out表示只写,in out表示可读可写。

--参数变量 参数模式 参数类型。 默认模式为in。
create or replace procedure getmax(x in number, y in number,z out number) is
begin
  if x > y then
    z:=x;
  else
    z:=y;
  end if;
end;

declare
  max_result number;
begin
  getmax(89, 85, max_result);
  dbms_output.put_line(max_result);
end;

函数:和存储过程不同的是可以返回值。

create or replace function fgetmax(x number, y number) return number is
begin
  if y > x then
    return y;
  else
    return x;
  end if;
end;
/

select fgetmax(45,44) from dual;

 定时任务:使用dbms_job包创建定时任务。sumbit提交定时任务,run运行定时任务,任务编号是自动生成的,这个任务编号很重要,最好记录下来,删除定时任务需要任务编号。如果不知道编号是多少,只能手动找到dbms_job下的对应定时任务,然后移除。移除使用remove方法。

create table xperson(
id number primary key,
name varchar2(30)
)

create sequence seq_id;

create or replace procedure addxperson is
begin
  insert into xperson values (seq_id.nextval, "bibi");
end;

declare
  taskid binary_integer;
begin
  dbms_job.submit(taskid,
                  "addxperson();",
                  sysdate,
                  "sysdate+10/(24*60*60)");
  dbms_output.put_line(taskid);
  dbms_job.run(taskid);
end;

触发器:某个事件引发些什么操作。DML操作,DDL操作,数据库的启动和关闭可以触发。加for each row表示行级触发器,每增删改一条数据,就触发一次,多条就多次。不加 for each row,则表示表级触发器

insert into xperson values(99,"bibi");

--不需要is 行级触发器,xperson表每增加一条数据,触发一次
create or replace trigger triggerone after insert on xperson
for each row
begin
  dbms_output.put_line("数据添加了");
end;


--不需要is 行级触发器,xperson表每删除一条数据,触发一次
create or replace trigger triggerone after delete on xperson
for each row
begin
  dbms_output.put_line("数据添加了");
end;

触发器的新旧数据获取: “:old.列名”,“:new.列名”。行级触发器才有新旧数据,表级触发器没有。insert操作只有新数据,没有旧数据。update操作有旧有新。

delete只有旧数据。

--行级触发器才有新旧数据
create or replace trigger triggerone after update on xperson
for each row
begin
  dbms_output.put_line("就名字" || :old.name || " 新数据" || :new.name);
end;

update xperson set name = "bibibiib";

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8616.html

(0)
上一篇 2023-02-25 12:00
下一篇 2023-02-25

相关推荐

  • 如何在Linux上卸载Python 3

    如何在Linux上卸载Python 3Python是一种非常流行的编程语言,常用于数据处理、Web应用程序和自动化脚本。在Linux系统中,Python通常是默认安装的,但是有时候需要移除或卸载Python 3。在本文中,我们将会探讨如何在Linux上卸载Python 3。

    2024-09-03
    22
  • Python中的小于号"<"的使用方法

    Python中的小于号"&lt;"的使用方法小于号”<“是Python中使用到的一个运算符,通常用于比较两个数的大小关系,返回一个布尔值True或False。

    2023-12-26
    113
  • MySQL数据库设计规范

    MySQL数据库设计规范具体 小数类型 // 附录2 6. 【强制】小数类型为 decimal,禁止使用 float 和 double。 说明:在存储的时候,float 和 double 都存在精度损失的问题,很可能在比较…

    2023-03-27
    151
  • 用Python判断列表是否相同

    用Python判断列表是否相同列表是Python中最常用的数据类型之一,通常用于存储一组有序的数据。在某些情况下,我们需要判断两个列表是否相同,比如在测试中验证函数的输出是否正确,或者在比较用户提交的数据和标准答案时。本文将介绍如何使用Python判断两个列表是否相同。

    2024-05-13
    62
  • 1.4 Apache Hadoop完全分布式集群搭建-hadoop[亲测有效]

    1.4 Apache Hadoop完全分布式集群搭建-hadoop[亲测有效]1.4 Apache Hadoop 完全分布式集群搭建 软件和操作系统版本 Hadoop框架是采用Java语言编写,需要java环境(jvm) JDK版本:JDK8版本 集群: 知识点学习:统一使用v

    2023-06-18
    131
  • 建立表的sql命令是什么_为某个数据库创建表

    建立表的sql命令是什么_为某个数据库创建表学习要点 表通过 CREATE TABLE 语句创建而成。 表和列的命名要使用有意义的文字。 指定列的数据类型(整数型、字符型和日期型等)。 可以在表中设置约束(主键约束和 NOT NULL 约束等)

    2023-04-25
    138
  • Python中int的用法

    Python中int的用法int是一种Python中的数据类型,代表整数。在Python中,int类型的数据是不可变的,即无法更改它们的值。

    2024-08-04
    27
  • 如何在python中使用?

    如何在python中使用?Python是一种强大、直观、易于学习的编程语言,因此在各行各业都有广泛的应用。无论你是一个新手还是一个有经验的开发人员,高效地使用Python将使你的工作更加轻松、快捷。

    2024-05-04
    66

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注