oracle笔记 oracle 笔记
wptr33 2024-12-26 17:06 24 浏览
oracle笔记
mysql ---> oracle 全部要大写
int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT
"Id" int(11) NOT NULL AUTO_INCREMENT ----> "ID" NUMBER(11) NOT NULL PRIMARY KEY ("ID") 创建序列及触发器 自增ID
varchar ----> NVARCHAR2
int ----> NUMBER
text ----> NVARCHAR2(2000) CLOB
datetime ----> DATE
时间比较
to_date('2018-10-01 00:00:00','yyyy-mm-dd hh24:mi:ss')
----------------------------------------------------------------------------------------------------------------
添加字段
ALTER TABLE T_IDS_APPAUTH ADD (DYNAMICPASSLOGINENABLE NUMBER(1) DEFAULT '0' );
ALTER TABLE T_IDS_APPSYNCDETAIL ADD OPERCOUNT NUMBER(11) DEFAULT 1;
alter table T_USER add WeChat NVARCHAR2(100);
insert into T_IDSCONFIG(ID,IDSKEY,VALUE) values (20,'Second login','{"displayName":"二次登录","enabled":0}');
设置主键
ALTER TABLE test_tab ADD CONSTRAINT pk_test_tab PRIMARY key(id);
修改字段名:
alter table Student rename name to StuName;
修改数据类型:
alter table Student modify (id varchar2(64));
ALTER TABLE T_ORG MODIFY FIRSTLETTERS VARCHAR2(255) DEFAULT NULL;
在oracle中,如果已经存在的数据的某些列,假如要更换字段类型的话,有的时候会出现
错误:ORA-01439: column to be modified must be empty to change datatype
解决方法:把列数据复制出来,列置空后修改再恢复数据
例如:
alter table tablename add tempcolumn varchar2(100);--添加临时字段
tempcolumn update tablename set tempcolumn=colname;--将原字段数据复制到临时字段中
update tablename set colname=null;--将原字段数据清空
alter table tablename modify colname xxx ;--修改原字段类型为xxx
update tablename set colname= tempcolumn;--将临时字段数据复制到修改后的原字段
alter table tablename drop column tempcolumn;--删除临时字段
oracle创建外键约束有两种方法:
1、创建表时直接创建外键约束
create table books(
bookid number(10) not null primary key,
bookName varchar2(20) not null,
price number(10,2),
categoryId number(10) not null references Category(id) --外键约束
);
2、先创建表,表创建成功后,单独添加外键约束
create table books(
bookid number(10) not null primary key,
bookName varchar2(20) not null,
price number(10,2),
categoryId number(10) not null
);
ALTER TABLE books ADD CONSTRAINT FK_Book_categoryid FOREIGN KEY(categoryId ) REFERENCES Category(id);
三种外键约束的建立语法如下:
例如有两张表 父表T_INVOICE主键ID。子表T_INVOICE_DETAIL外键字段INVOICE_ID
1、普通外键约束:
ALTER TABLE T_INVOICE_DETAIL ADD CONSTRAINT FK_INVOICE_ID FOREIGN KEY(INVOICE_ID ) REFERENCES T_INVOICE(ID);
2、级联外键约束:
ALTER TABLE T_INVOICE_DETAIL ADD CONSTRAINT FK_INVOICE_ID FOREIGN KEY(INVOICE_ID ) REFERENCES T_INVOICE(ID) ON DELETE CASCADE;
3、置空外键约束:
ALTER TABLE T_INVOICE_DETAIL ADD CONSTRAINT FK_INVOICE_ID FOREIGN KEY(INVOICE_ID ) REFERENCES T_INVOICE(ID) ON DELETE SET NULL;
alter table unique_test add constraint email_unique unique(email);
----------------------------------------------------------------------------------------------------------------
一、调整oracle表中字段显示顺序:用系统用户
调整oracle表中字段显示顺序 此操作要在系统用户下执行,否则未授权错误 [Err] ORA-01031: insufficient privileges
1、查询出指定用户下的指定表的object_id
select object_id from all_objects where owner='test' and object_name='表名'
2、根据object_id查询出表字段实际的顺序
select obj#,col#,name from sys.col$ where obj#=79119 ;
3、通过update更改字段的实际顺序。
update sys.col$ set col#=7 where obj#=79119 and name='字段名'
update sys.col$ set col#=4 where obj#=(select object_id from all_objects where owner='ZS12_IMP' and object_name='T_IDS_APPAUTH' ) and name='RESPONSEIMPL';
二、调整oracle表中字段显示顺序:删除原表
如果要修改字段顺序,一般情况可以使用以下步骤(注意外键):
--(1)备份目标表数据
create table T_IDS_APPAUTH2 as select * from T_IDS_APPAUTH;
--(2)drop 目标表
drop table 目标表;
--(3)再重新按照要求的字段顺序建表;
create table 临时表 (col1,................coln);
--(4)之后用select将数据从临时表导回。
create table T_USER_EXTRAINFO_OLD as select * from T_USER_EXTRAINFO;
drop table T_USER_EXTRAINFO;
CREATE TABLE "T_USER_EXTRAINFO" (
"USERID" NUMBER(11) REFERENCES T_USER(ID) ON DELETE CASCADE,
"FIELD1" NVARCHAR2(2000) DEFAULT NULL,
"FIELD2" NVARCHAR2(100) DEFAULT NULL,
"FIELD3" NVARCHAR2(100) DEFAULT NULL,
"FIELD4" NVARCHAR2(100) DEFAULT NULL,
"FIELD5" NVARCHAR2(2000) DEFAULT NULL,
"FIELD6" NVARCHAR2(100) DEFAULT NULL,
"FIELD7" NVARCHAR2(100) DEFAULT NULL,
"FIELD8" NVARCHAR2(100) DEFAULT NULL,
"FIELD9" NVARCHAR2(100) DEFAULT NULL,
"FIELD10" NVARCHAR2(100) DEFAULT NULL,
CONSTRAINT T_USER_EXTRAINFO_UNIQUE UNIQUE (USERID)
)
;
insert into T_USER_EXTRAINFO("USERID","FIELD1", "FIELD2", "FIELD3", "FIELD4", "FIELD5","FIELD6", "FIELD7", "FIELD8", "FIELD9", "FIELD10") select "USERID","FIELD1", "FIELD2", "FIELD3", "FIELD4", "FIELD5","FIELD6", "FIELD7", "FIELD8", "FIELD9", "FIELD10" from T_USER_EXTRAINFO_OLD;
三、调整oracle表中字段显示顺序:删除原字段
* 由于oracle 不能调整字段顺序,也不能改变有数据的表的字段长度和类型。因此是采用如下方法来插入字段。
* 1、创建备份表; 2、删除多余字段(注意外键); 3、按顺序添加字段; 4、从备份表中复制原数据 (5、删除备份表)
* (如果表中没有数据,可以将表删除,然后按照需要的顺序创建新表)
* 某些日志文件数据比较大,如果采用上述方法,升级脚本速度可能相当慢。如果不需要日志文件,
* 可以在升级前将日志文件删除,涉及升级日志表有:认证日志( T_IDS_LOGINLOG )。
-- T_IDS_DATASOURCE 在 DbPassword 字段后添加 BaseDb
create table T_IDS_DATASOURCE_OLD as select * from T_IDS_DATASOURCE;
ALTER TABLE T_IDS_DATASOURCE DROP COLUMN MONITOR;
ALTER TABLE T_IDS_DATASOURCE DROP COLUMN MONITORNOTICEUSER;
ALTER TABLE T_IDS_DATASOURCE ADD "BASEDB" NUMBER(1) DEFAULT 0;
ALTER TABLE T_IDS_DATASOURCE ADD "MONITOR" NUMBER(1) DEFAULT 0;
ALTER TABLE T_IDS_DATASOURCE ADD "MONITORNOTICEUSER" NVARCHAR2(100) DEFAULT NULL;
ALTER TABLE T_IDS_DATASOURCE ADD "REMARK" NVARCHAR2(2000) DEFAULT NULL;
merge into T_IDS_DATASOURCE A using T_IDS_DATASOURCE_OLD B
on(A.id=B.id)
when matched then
update set A.MONITOR = B.MONITOR,A.MONITORNOTICEUSER = B.MONITORNOTICEUSER;
ORA-02270:no matching unique or primary key for this column-list(此列列表的唯一或主键不匹配)
错误说明:外键的定义必须是另外一张表的主键,否则就会报这个错
----------------------------------------------------------------------------------------------------------------
#创建序列
create sequence t_user_id_seq start with 1 increment by 1;
#查看序列
select * from user_sequences;
select * from user_sequences WHERE SEQUENCE_NAME='T_IDS_APPAUTH_SEQ';
#删除序列
DROP SEQUENCE T_IDS_APPAUTH_SEQ;
#创建触发器
create or replace trigger t_user_trigger
before insert on t_user
for each row
when(new.id is null)
begin select t_user_id_seq.nextval into:NEW.ID from dual; end;
#查看触发器
select * from user_triggers;
select * from user_triggers where TRIGGER_NAME='T_IDS_APPAUTH_TRIG';
#删除触发器
drop trigger T_IDS_APPAUTH_TRIG;
创建序列及触发器 自增ID
CREATE SEQUENCE T_TABLE_SEQ START WITH 1 INCREMENT BY 1;
CREATE OR REPLACE TRIGGER T_TABLE_TRIG
BEFORE INSERT ON T_TABLE
FOR EACH ROW
WHEN(NEW.ID IS NULL)
BEGIN SELECT T_TABLE_SEQ.NEXTVAL INTO:NEW.ID FROM DUAL; END
查看表的约束条件有三个视图:dba_constraints、all_constraints、user_constraints
其中:dba_constraints视图需要DBA权限才能查询;
all_constraints、user_constraints普通用户查询。
例:select * from user_constraints;
select * from user_constraints where constraint_name = 'SYS_C00185187';
禁用约束
ALTER TABLE T_ORGUSER DISABLE CONSTRAINT constraint_SYS_C00185187;
启用约束
ALTER TABLE table_name ENABLE CONSTRAINT constraint_name;
https://www.cnblogs.com/bingo1717/p/7792134.html
分页排序
select rownum rn ,a.* from USER_INFO a order by A.USERAGE desc;
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21
oracle dt = session.query(sql, new Integer[]{rowBeginIndex+rows,rowBeginIndex});
mysql dt = session.query(sql, new Integer[]{rowBeginIndex,rows});
create sequence HIBERNATE_SEQUENCE start with 1 increment by 1;
进程报错 maximum number of processes (150) exceeded :
sqlplus /nolog
conn /as sysdba;
show parameter processes;
alter system set processes = 2000 scope = spfile;
shutdown immediate;
startup;
----------------------------------------------------------------------------------------------------------------
select * from dba_directories;
SYS DATA_PUMP_DIR /opt/oracle/admin/orcl/dpdump/
sqlplus saiwen_imp/saiwen_imp
将 ids-2.0.oracle.dmp 文件上传到 /opt/saiwentech/imp_oracle/data目录,进入容器(不需要登录oralc)执行导入导出命令。
导入ids-2.0.oracle.dmp
cp /opt/dbdata/local/ids-2.0.oracle.dmp /opt/oracle/admin/orcl/dpdump/
impdp saiwen_imp/saiwen_imp DIRECTORY=DATA_PUMP_DIR DUMPFILE=ids-2.0.oracle.dmp REMAP_SCHEMA=saiwen_imp:saiwen_imp
--- impdp account/password DIRECTORY=DATA_PUMP_DIR DUMPFILE=ids-2.0.oracle.dmp REMAP_SCHEMA=form:to
导出ids-2.0.oracle.dmp
expdp saiwen_imp/saiwen_imp schemas=saiwen_imp dumpfile=ids-2.0.oracle.dmp directory=DATA_PUMP_DIR;
cp /opt/oracle/admin/orcl/dpdump/ids-2.0.oracle.dmp /opt/dbdata/local/
导入 Iframework_V4.2_scott_exp.dmp
cp /opt/dbdata/local/Iframework_V4.2_scott_exp.dmp /opt/oracle/admin/orcl/dpdump/
imp saiwen_imp/saiwen_imp BUFFER=64000 FILE=/opt/oracle/admin/orcl/dpdump/Iframework_V4.2_scott_exp.dmp FROMUSER=SCOTT TOUSER=saiwen_imp
说明: DATA_PUMP_DIR 为oralce创建的目录,可用如下命令查询:
select * from dba_directories;
登录
sqlplus /nolog
conn / as sysdba
sqlplus saiwen_imp/password
------------------------------
相关推荐
- 开发者必看的八大Material Design开源项目
-
MaterialDesign是介于拟物和扁平之间的一种设计风格,自从它发布以来,便引起了很多开发者的关注,在这里小编介绍在Android开发者当中里最受青睐的八个MaterialDesign开源项...
- 另类插这么可爱,一定是…(另类t恤)
-
IT之家(www.ithome.com):另类插图:这么可爱,一定是…OSXMavericks和Yosemite打破了苹果对Mac操作系统传统的命名方式,使用加州的某些标志性景点来替换猫...
- Android常用ADB命令(安卓adb工具是什么)
-
杀死应用①根据包名获取APP的PIDadbshellps|grep应用包名②执行kill命令...
- 微软Mac版PowerPoint测试Reading Order Pane功能
-
IT之家5月20日消息,微软公司昨日(5月19日)发布博文,邀请Microsoft365Insiders成员,测试macOS新版PowerPoint演示文稿应用,重点引入...
- Visual Studio跨平台开发实战(4):Xamarin Android控制项介绍
-
前言不同于iOS,Xamarin在VisualStudio中针对Android,可以直接设计使用者界面.在本篇教学文章中,笔者会针对Android的专案目录结构以及基本控制项进行介绍,包...
- 用云存储30分钟快速搭建APP,你信吗?
-
背景不管你承认与否,移动互联的时代已经到来,这是一个移动互联的时代,手机已经是当今世界上引领潮流的趋势,大型的全球化企业和中小企业都把APP程序开发纳入到他们的企业发展策略当中。但随着手机APP上传的...
- 谷歌P图神器来了!不用学不用教,输入一句话,分分钟给结果
-
Pine发自凹非寺量子位|公众号QbitAI当你拍照片时,“模特不好好配合”怎么办?...
- iOS文本编辑控件UITextField和UITextVie
-
记录一个菜鸟的IOS学习之旅,如能帮助正在学习的你,亦枫不胜荣幸;如路过的大神如指教几句,亦枫感激涕淋!细心的朋友可能已经注意到了,IOS学习之旅系列教程在本篇公众号的文章中,封面已经换成美女图片了,...
- Android入门图文教程集锦(android 入门教程)
-
Android入门视频教程集锦AndroidStudio错误gradientandroid:endXattributenotfound...
- 如何使用Android自定义复合视图(如何使用android自定义复合视图)
-
在最近的一个客户应用中,我遇到了一个需求,根据选定的值来生成指定数量的编辑框字段,这样用户可以输入人物信息。最初我的想法是把这些逻辑放到Fragment中,只是根据选中值的变化来向线性布局容器中增加编...
- 原生安卓开发app的框架frida常用关键代码定位
-
前言有时候可能会对APP进行字符串加密等操作,这样的话你的变量名等一些都被混淆了,看代码就可能无从下手...
- 教程10 | 三分钟搞定一个智能输入法程序
-
一案例描述1、考核知识点网格布局线性布局样式和主题Toast2、练习目标掌握网格布局的使用掌握Toast的使用掌握线性布局的使用...
- (Android 8.1) 功能与新特性(android的功能)
-
和你一起终身学习,这里是程序员AndroidAndroid8.1(API级别27)为用户和开发人员引入了各种新特性和功能。本文档重点介绍了开发人员的新功能。通过本章阅读,您将获取到以下内容:Andr...
- 怎样设置EditText内部文字被锁定不可删除和修改
-
在做项目的时候,我曾经遇到过这样的要求,就是跟百度贴吧客户端上的一样,在回复帖子的时候,在EditText中显示回复人的名字,而且这个名字不可以修改和删除,说白了就是不可操作,只能在后面输入内容。在E...
- 如何阻止 Android 活动启动时 EditText 获得焦点
-
技术背景在Android开发中,当活动启动时,EditText有时会自动获得焦点并弹出虚拟键盘,这可能不是用户期望的行为。为了提升用户体验,我们需要阻止...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
面试官:git pull是哪两个指令的组合?
-
git 执行pull错误如何撤销 git pull fail
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
-
- 开发者必看的八大Material Design开源项目
- 另类插这么可爱,一定是…(另类t恤)
- Android常用ADB命令(安卓adb工具是什么)
- 微软Mac版PowerPoint测试Reading Order Pane功能
- Visual Studio跨平台开发实战(4):Xamarin Android控制项介绍
- 用云存储30分钟快速搭建APP,你信吗?
- 谷歌P图神器来了!不用学不用教,输入一句话,分分钟给结果
- iOS文本编辑控件UITextField和UITextVie
- Android入门图文教程集锦(android 入门教程)
- 如何使用Android自定义复合视图(如何使用android自定义复合视图)
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)