oracle应付模块中的ov,oracle常用dba命令和知识下
--创建函数
create or replace function add_sal(sSal number)
return number
is
begin
if (sSal > 5000) then
return sSal + 51;
elsif (sSal > 3000) then
return sSal + 111;
else
return sSal + 222;
end if;
end;
select sal, add_sal(sal) from emp;
--触发器
create table deptLog(
uName varchar2(20),
action varchar2(20),
dTime date
);
--创建触发器
--for each row 可以触发多条,当你的语言影响多少条记录就会触发多少次
create or replace trigger trig_dept2
after insert or delete or update on dept2
begin
if inserting then
insert into deptLog values(user, 'insert', sysdate);
elsif updating then
insert into deptLog values(user, 'update', sysdate);
elsif deleting then
insert into deptLog values(user, 'delete', sysdate);
end if;
end;
select * from dept2;
select * from deptLog;
insert into dept2 values(55, 'SOFTWARE', 'cic');
update dept2 set loc = 'go' where deptno in(30);
delete dept2 where deptno = 55;
--触发器
create or replace trigger trig_emp
after update on dept for each row
begin
update emp set emp.deptno =: new.deptno where emp.deptno = :old.deptno;
end;
update dept set deptno = 11 where deptno = 10;
select * from emp;
---语句级触发器
create or replace trigger trg_ins_dept2
before insert
on dept2
begin
if user not in('SCOTT') then
raise_application_error(-20001, '只有SCOTT才能修改该表!');
end if;
end;
禁用、启用触发器
alter trigger tgr_Name disable | enable;
alter table tableName disable all trigger | enable all trigger;
------------------------抽象数据类型-----------
--创建地址类型,一定要加as object,还可以在类型中加过程或方法
create or replace type address as object (
province varchar2(10), --省份属性
city varchar2(10) --市属性
) not final; --not final表示该类型可以有子类型
--定义一个子类型
--under address说明这个类型继承至address类型
create or replace type detailAddress under address (
street varchar2(20) --街道属性 第3个成员
);
--创建员工信息表,最后一列是detailAddress类型
drop table empInfo
create table empInfo (
eName varchar2(20) , --员工姓名
eSex char(2), --性别
eAge int, --年龄
eAddress detailAddress --员工地址
);
--增加数据,只能用构造方法
insert into empInfo values('aaa', '男', 28, detailAddress('湖北', '襄樊', '八一路'));
insert into empInfo values('bbb', '男', 26, detailAddress('湖北', '武汉', '永清街'));
insert into empInfo values('ccc', '女', 29, detailAddress('湖北', '武汉', '光谷'));
--查询
select * from empInfo;
select * from empInfo where eSex = '男';
select * from empInfo e where e.eAddress.city = '武汉'; --如果查询条件包含属性必须用表的别名
--更新有2种方式:
--第一种方式:整体更新
update empInfo e set e.eAddress = detailAddress('湖北', '武汉', '武昌') where e.eName = 'ccc';
--第二种方式:只更新抽象类型的某一列
update empInfo e set e.eAddress.city = '武汉' where e.eName = 'ccc';
--删除
delete from empInfo e where e.eAddress.city = '武汉';
--为抽象数据类型的属性建立索引
create index idxemp on empInfo(eAddress.city);
--删除
drop table empInfo;
drop type address force; --强制删除抽象类型
-------------------------------抽象数据类型结束----------------------
------------------对象表,表中的每一行就是一个对象-----------------------
--创建抽象数据类型person,并作为基类型
create or replace type person as object (
pName varchar2(20), --姓名
pSex char(2), --性别
pAge int --年龄
) not final;
--创建子类型student,继承person
--后面不要加as object
create or replace type student under person (
stuId int
);
--创建对象表stuInfo
create table stuInfo of student;
--为对象表创建主键约束
alter table stuInfo add constraint pk_stuInfo primary key(stuId);
--插入数据,当普通表插入
insert into stuInfo values('aaa', '男', 29, 1001);
--插入数据,用构造方法
insert into stuInfo values(student('bbb', '男', 26, 1002));
insert into stuInfo values(student('ccc', '女', 29, 1003));
--查询,当普通表用
select * from stuInfo where stuId = 1002;
--更新和删除都用普通的sql语句即可
update stuInfo set pAge = 29 where pName = 'ccc';
delete from stuInfo where stuId = 1001;
rollback;
--ref(表别名)函数用来返回对象的OID,也就是对象标识符,对象表也有rowid
select ref(s) from stuInfo s;
select rowid, ref(s) OIDS from stuInfo s;
--创建学生分数表,注意外键
create table stuScore (
stu ref student, --stu这一列的值必须出现在stuInfo表中,且stu这一列存的对象的OID而不是对象本身
score int --分数
);
--向分数表插入数据,只能用select,不能用普通的values
--错误的做法:insert into stuscore values(select ref(s) from stuInfo where stuId = 1001, 90)
--正确的做法:
insert into stuscore select ref(s), 90 from stuInfo s where stuId = 1001;
insert into stuscore select ref(s), 80 from stuInfo s; --插入3行数据
insert into stuscore select ref(s), 70 from stuInfo s where stuId = 1003;
--查询
select * from stuScore;
--deref(列名)函数可以把OID还原为对象,主键列显示有问题
select deref(s.stu), score from stuScore s where s.stu.stuId = 1001;
--修改,以下2个都可以
update stuScore set score=100 where stu = (select ref(s) from stuInfo s where stuId = 1001);
update stuScore s set score = 99 where s.stu.stuId = 1001;
--删除,以下3个都可以
delete from stuScore where stu = (select ref(s) from stuInfo s where stuId = 1001);
delete from stuScore s where s.stu.stuId = 1001;
delete from stuScore where stuId = 1001;
----------------------------------对象表结束----------------------
----------------------------------对象视图-----------------------
--对象视图的作用:把已经存在的关系表转换为对象表来使用,原表没有变
--首先要创建一个和原表一样的类型
--然后创建视图
create table aaa
(a int);
create type aaaa as object
(a int);
create or replace view view_stu of aaaa with object oid(a)
as
select * from aaa;
select * from view_stu;
--增删改查都和对象表一样
-------------------------------对象视图结束-----------------------
--------------------------------抽象类型,包含过程和方法-------------
create or replace type ADDRESS as object (
province varchar2(10), --省份
city varchar2(10), --市,后面的,不能少
member function get_pro return varchar2, --函数,后面接,而不是;
member function get_city return varchar2,
member procedure set_pro(pro varchar2), --过程
member procedure set_city(cy varchar2)
);
create or replace type body ADDRESS--后面不能加 as object
as --后面不能加begin
member function get_pro return varchar2
is
begin
return province;
end get_pro;
member function get_city return varchar2
is
begin
return city;
end;
member procedure set_pro(pro varchar2)
is
begin
province := pro;
end;
member procedure set_city(cy varchar2)
is
begin
city := cy;
end;
end;
--测试上面的成员函数和过程
declare
addr address;
begin
addr := address('湖北', '武汉');
dbms_output.put_line(addr.get_city);
end;
--drop table stuInfo;
create table stuInfo (
stuId int primary key,
addr address
);
declare
addr address;
begin
addr := address('湖北', '武汉');
insert into stuInfo values(1, addr);
addr.set_city('郑州');
addr.set_pro('河南');
insert into stuInfo values(2, addr);
end;
select * from stuInfo;
--删除类型
drop type address force;
--------------------------抽象类型,包含过程和方法 结束-------------
----------------------------可变数组------------------------------
--就是一个可以存储多个值的有最大长度的数组,数组的成员可以是任意类型
--建立一个可变数组类型,长度是10,存放的数据类型是number(4)
create or replace type arrType as varray(10) of number(4);
create or replace type scoreType as object (
subName varchar2(10),
score int
);
--创建一个长度为10的可变数组,存放数据类型是scorType
create or replace type arrScoreType as varray(10) of scoreType;
--创建学生信息表
--drop table stuInfo;
create table stuInfo (
stuId int primary key,
score arrScoreType --可变数组,最多10个成员
);
--插入数据,用可变数组的构造函数
insert into stuInfo values(1, arrScoreType(
scoreType('sql', 50), scoreType('C#', 80), scoreType(';
oracle应付模块中的ov,oracle常用dba命令和知识下相关推荐
- 【模块】【通信】---http模块中req和res 常用的属性介绍
[模块][通信]---http模块中req和res 常用的属性介绍 const http = require("http"); const fs = require(" ...
- 常用DOS命令、Windows下安装IIS服务器、DNS服务器和DHCP服务器以及Windows和Linux防火墙的基本配置(Windows一)
目录 一.常用DOS命令 (1)DOS概述 (2)常用的DOS命令 a. ipconfig(查询本机IP地址) b. net user(查看本机账号情况) c. net localgroup(查看本地 ...
- oracle 应付模块ppt,应付帐款管理要点.ppt
内容摘要 Unit 1 简介及基本设置 Unit 2 供应商管理 Unit 3 发票 Unit 4 付款 Unit 5 预付款 Unit 6 报表.会计和审计 发票管理:Practice 发票管理:P ...
- oracle制造模块怎么跑mrp,Oracle EBS MRP模块之预测冲减
Oracle EBS MRP模块之预测冲减 基本概念 预测冲减的定义 基于原始预测,使用已计划的销售订单减少相应的预测数量,以得到当前预测. 当前预测=原始预测-客户订单. 预测冲减的方法 第一类,在 ...
- python3连接oracle教程,Pycharm中Python3连接Oracle
一.环境配置: 系统:win7.10 (64位) 软件:1.Python3.7.2 (64位) 2.instantclient-basic-windows.x64-11.2.0.4.0.zip(64位 ...
- oracle查找clob中的值,Oracle 查找带有CLOB字段的所有表
myBatis的一对多查询,主要利用resultMap实现一次查询多个结果集 日常开发中有这中场景,一个用户有多个角色,一个角色又有多个菜单,想查出一个用户的所有菜单.除了常见的关联查询之外,更使用的 ...
- oracle数据linux中的位置,Oracle中执行计划的存储位置
这两天我一直在想一个问题,那就是的执行计划到底存储在什么地儿?它会是一种什么样的格式? 这里我试图对这个问题做一点我自己认为的解释,这个解释可能是有问题的. 朋友们在看这篇文章之前,应该首先熟悉如下的 ...
- oracle查询过程中卡住,查看Oracle中存储过程长时间被卡住的原因
1:查V$DB_OBJECT_CACHE SELECT * FROM V$DB_OBJECT_CACHE WHERE name='CUX_OE_ORDER_RPT_PKG' AND LOCKS!='0 ...
- oracle nextval mysql_mysql中实现类似oracle中的nextval函数
我们知道mysql中是不支持sequence的,一般是建表的时间使这个字段自增. 如 create table table_name(id int auto_increment prima ...
- oracle查看表中记录数,Oracle 查询某一用户下所有表的记录数
要查询Oracle下某一个用户下所有表的记录条数,可以采用如下办法: 1.创建function count_tables_rows create or replace function count_t ...
最新文章
- 自动渗透测试工具集APT2
- 自学python还是报班-转行Python开发自学还是报班?老男孩全日制学习
- 别再瞎搞数仓了!BAT内部大神:数据仓库不是谁都可以建的
- tomcat如何配置文件读取路径
- 轻量级Java持久化框架,Hibernate完美助手,Minidao 1.6.2版本发布
- 信息奥赛一本通(1180:分数线划定)——插入排序
- 数理统计的统计量分布t分布_t分布:啤酒厂发现的关键统计概念
- 笨方法python3_“笨方法”学Python3,习题 43 。
- react-router4 + webpack Code Splitting
- 银行业DevOps状态:来自DOES 2018伦敦大会的报告
- structs中国际化小结
- 华为举办HDC.Cloud媒体预沟通会,为开发者提供ICT“黑土地”
- visio转换html,【转】5款替代微软Visio的开源免费软件
- Zint生成多种条码及二维码
- 花一天时间做一个高质量飞机大战游戏,过万字Unity完整教程!漂亮学妹看了直呼666!
- 聚类分析 距离 matlab,matlab聚类分析_matlab
- linux压缩文件命令_Linux 系统压缩和解压 zip 格式文件
- C/C++实现学生成绩管理系统
- Cocos2dx游戏教程(序):火爆抖音的网红口红机真能扎到口红吗?
- 0428-项目再开发2.0