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);
-- 工作上常遇到,当表中存在某一条数据就进行更新,如果不存在就得插入一条新数据
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)
回车是光标重新回到本行开头
换行 是光标往下一行(不一定到下一行行首)
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;