乐趣区

关于oracle:Oracle总结

Oracle 总结

1、Oracle 罕用 sql 命令

1、查看建表语句

select dbms_metadata.get_ddl('TABLE','COMMUNITY') from dual; 

COMMUNITY 为表名必须大写

2. 创立表

create table TEST
(id       VARCHAR2(30),
  name     VARCHAR2(30),
  sex      NUMBER(1),
  birthday TIMESTAMP(6)
)

3.insert

三种插入语法:

insert into 表名 values(值 1,值 2,......);
insert into 表名(列 1,列 2,......)values(值 1,值 2,......);
insert into 表 2 select * from 表 1;

能够用于批量插入

insert into test (id, name, sex)
select t.id,t.name,'0' from table_name_b t group by id;

4.delete

DELETE FROM 表名称 WHERE 列名称 = 值

5.update

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
update test set name='lucy' where name='tom'

// 多个列至更新
UPDATE 表名称 SET 列名称 1 = 新值 1, 列名称 2 = 新值 2, 列名称 3 = 新值 3  WHERE 列名称 = 某值

6.select

-- 查问指定列
SELECT 列名称 FROM 表名称 

-- 查问所有列
SELECT * FROM 表名称

select * from test

7.drop

删除表名

drop table 表名;

8.alter

ALTER TABLE (表名) ADD (列名 数据类型); 
ALTER TABLE (表名) MODIFY (列名 数据类型); 
ALTER TABLE (表名) RENAME COLUMN (以后列名) TO (新列名);  / 不须要括号
ALTER TABLE (表名) DROP COLUMN (列名); 
ALTER TABLE (以后表名) RENAME TO (新表名);

2、CSV 数据导入 Oracle

csv 文件中一行数据 多个字段按逗号宰割

1. 切换 oracle 用户
2. 将 csv 文件与 ctl 文件放入以后 oracle 用户下的目录里(个别是 /home/oracle)
3. 执行运行脚本 sqlldr control=\csvName.ctl
4. 输出用户名 明码
5. 期待插入完即可
6. 能够删除 ctl 与 csv 文件
7. 在可视化工具中进行查看后果

load data 
infile 'csvName.csv' "str'\r\n'"
append
into table test
fields terminated by ','
OPTIONALLY ENCLOSED BY '"'AND'"'
trailing nullcols
           (name VARCHAR2(20)
           )
  1. “str ‘\r\n’ 用途
    利用 sqlloader 导入会呈现 ORA-01722:invalid number 问题;

起因:因为数据文件是在 Windows 中编辑的,存在换行符,如果 integer 或者 number 类型的字段位位于表的最初,最初会有 CR/LF 的换行符,在应用 sqlldr 导入的时候换行符也蕴含在最初一个字段中,使得对应的导入的值与数据库中定义的数据类型不匹配,就会报 ORA-01722:invalid number 谬误。解决办法是在最初一个字段后加 TERMINATED BY WHITESPACE,或者在 INFILE 指导的文件名之后加上 “str ‘\r\n'”
————————————————
https://blog.csdn.net/qq_2579…

在 Windows NT 上,如果未 terminator_string 指定 no,则 SQL * Loader 应用 \n 或 \r\n 作为记录终止符,这取决于它在数据文件中最先找到的那个。这意味着,如果您晓得数据文件中的一个或多个记录已 \n 嵌入字段中,然而您想 \r\n 用作记录终止符,则必须指定它。

2.CTL 文件类型匹配:

另外,在 ctl 文件中指定字段类型
CHAR                字符型
INTEGER EXTERNAL    整型
DECIMAL EXTERNAL    浮点型
DATE 'YYYYMMDD'     日期型

3. 某些行含有空值解决
如果数据文件中的某些行含有空值,会导致这些行的数据无奈导入,这时只有加上

trailing nullcols

即可,它示意如果读不到相应的值,就以 NULL 代替

2、Oracle + Spring Boot + Ebean 配置 demo

3、Oracle 遇到的问题

1. 没有自增序列

oracle 建设的表中,没用加自增主键,导致连贯插入语句时,此字段没赋值而导致报错,提醒缺失自增序列,且代码中没用映射自增序列的注解
问题形容:
javax.persistence.PersistenceException:Error getting sequence nextval

解决方案:
1)表中减少自增序列 seq_name

create sequence seq_name increment by 1 start with 1 minvalue 1 nomaxvalue nocache;
// 注:seq_name 为起的序列的名

// 创立触发器
create or repalce trigger "TR_seq_name"
before insert on 用户名. 表名
for each row
begin
   if :new."ID" is null then
       select 用户名. 序列名.nextval into :new."ID" from dual;
end if;
end;
// 注:ID 为这个设置自增序列的列名

2)java 数据库实体自增序列上减少注解

    @Id
    @Column(name = "ID",nullable = false)
    @SequenceGenerator(name="seq_name",sequenceName="seq_name",allocationSize=1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_name")
    long id;

2.error[ORA-00942:table or view does not exst\n]

插入数据的时候,呈现 error[ORA-00942:table or view does not exst\n],提醒表名或者视图不存在

1)查看代码中 @Table(name=”table_name”)映射的表名是否在数据库中存在
2)如果存在,能够关上 sql 日志,看插入的语句是否正确,是否插入的表名谬误
logback.xml

<logger name="org.avaje.ebean.SQL" level="TRACE"></logger>

3)检错所连贯的数据库中该表是否存在。

3. 短少配置 addJar()

javax.persistence.PersistenceException: The Type [XXXXX 数据库表实体类] is not registered entity?If you don’t explicitly
list the entity classes to use Ebean will search for them in the classpath.If the entity is in a Jar check the ebean.search.jars property in ebean.properties file or check ServerConfig.addJar().

ServerConfig baseServerConfig = new ServerConfig();
····
 baseServerConfig.setJars(XXX);
 baseServerConfig.setPackages(XXX)

jars 和 packeges 的能够配置在数据库配置中,从配置中进行读取

退出移动版