Oracle数据库常用操作

Oracle数据库常用操作

1.常用基本操作

1.给表新增字段

格式:
alter table 表名 add (字段1名  字段类型 默认值 是否为空, 字段2名 字段类型  默认值 是否为空....);

2.修改表中的字段数据信息

格式:
ALTER TABLE table_name 
    MODIFY column_name datatype;

3.删除表中的字段

格式:
ALTER TABLE table_name
    DROP COLUMN column_name;

4.修改字段名字

格式:
ALTER TABLE table_name
    RENAME COLUMN column_name TO new_column_name;

5.给表中字段添加备注

格式: 
comment  on  column  表名.字段名   is  '注释内容';

6.修改表名

格式:
RNAME table_name TO new_table_name;

7.修改字段长度

格式:
alter table AWE_DO_CATALOG modify DONO varchar2 (64);

2.Oracle相关关键字用法

2.1 merge into

-- 工作上常遇到,当表中存在某一条数据就进行更新,如果不存在就得插入一条新数据
MERGE INTO table_name alias1
    USING (table | view | sub_query) alias2
ON (join condition)
  WHEN MATCHED THEN
      UPDATE SET col1 = col_val1, col2 = col2_val
  WHEN NOT MATCHED THEN
      INSERT (column_list) VALUES (column_values);

解释:
   1.using里面的表,可以和mege into的表相同,也可以不同,常用dual表来做参数的一些拼接。

2.when matched then和when not matched then可以只存在其中一个或同时存在。

3.update语句和insert语句中可见省略了表名,此处就是merge into的这张主表。

案例:

题目
   1.实现a表一天只有一条数据。

   2.如果a表中当天无数据,则insert插入一条数据,设置num为1。

   3.如果a表中当天有数据,则update更新当天的数据为num = num + 1

   4.num的最大值为5,当num值等于5时,则不更新。

建表语句

create table a(
  id integer,
  num integer,
  currdate varchar2(10)
);
alter table a add  constraint pk_a  primary key (id);
comment on table a is '测试表';
comment on column a.id is '主键id';
comment on column a.num is '数量,最大值5';
comment on column a.currdate is '日期,yyyymmdd,一天一条数据';

操作语句

merge into a t1
using (select to_number(to_char(current_timestamp, 'yymmddhh24miss') || substr(cast(dbms_random.value(100, 1000) as varchar2(10)), 1, 3)) id,
              to_char(sysdate, 'yyyymmdd') currdate
         from dual) t2
on (t1.currdate = t2.currdate)
when matched then
  update set t1.num = t1.num + 1 where t1.num < 5
when not matched then
  insert (id, num, currdate) values (t2.id, 1, t2.currdate)

2.2 换行与回车

回车是光标重新回到本行开头
换行 是光标往下一行(不一定到下一行行首)

Oracle 换行、回车详解(chr(10)、chr(13)):

符号 ASCII 码 释义 科普
\n 10 New Line(换行) 换到下一行(并不一定是 首行
\r 13 Carriage Return(回车) 回到 首行
with t_txt as
 (select '1111111111' || chr(10) || chr(13) || 
         'aaaaaaaaaa' txt 
    from dual)

select t.txt,
       replace(replace(t.txt, CHR(10), ''), 
               chr(13), '') txt_new
  from t_txt t;

注意点:

1. on后面不能直接加and,否则会查询不到正确的数据

你可能感兴趣的:(数据库开发)