SQL语句整理

字段描述增、删、改

添加字段的语法:

alter table tablename add (column datatype [default value][null/not null],….);

删除字段

alter table tablename drop (column);

修改字段

alter table tablename modify (column datatype [default value][null/not null],….);

//修改数据表列的类型
无数据时:ALTER TABLE INV.TRAN_INV_BILL MODIFY SERIALNO VARCHAR2(36)

有数据时:1、INV.TRAN_INV_BILL 表 2、进行修改列 SERIALNO 3、TEMP_ROWNAME临时列

ALTER TABLE INV.TRAN_INV_BILL RENAME COLUMN SERIALNO TO TEMP_ROWNAME;
ALTER TABLE INV.TRAN_INV_BILL ADD SERIALNO VARCHAR2(36);
UPDATE INV.TRAN_INV_BILL SET SERIALNO = CAST(TEMP_ROWNAME AS VARCHAR2(36));

ALTER TABLE INV.TRAN_INV_BILL DROP COLUMN TEMP_ROWNAME  

修改表名称语法: 

alter table cux.cux_xxx RENAME TO cux_xxx1;

修改表名称语法: 

           alter table cux.cux_xxx RENAME TO cux_xxx1;
添加主键(联合主键):

           constraint PK_tab PRIMARY key (ID1,ID2)  --主键(建表语句中写)
           alter table tab add constraint pk_tab2 primary key (id1,id2);--建好表后写

新增表修改表名称语法: alter table cux.cux_xxx RENAME TO cux_xxx1;

修改表名称语法: 

alter table cux.cux_xxx RENAME TO cux_xxx1;
create table 新表 as select * from 旧表 where rownum < 1; 

SQL执行顺序:

1. 先where 后select
2. 先where 再group 再having 后select
3. 先where 再group 再having 再select 后order
4. 先join  再where 后select

序列问题

Oracle中一般将自增sequence重置为初始1时,都是删除再重建,这种方式有很多弊端,依赖它的函数和
存储过程将失效,需要重新编译。
不过还有种巧妙的方式,不用删除,利用步长参数,先查出sequence的nextval,记住,把递增改为负的
这个值(反过来走),然后再改回来。
假设需要修改的序列名:seq_name*/
1、selectseq_name.nextval from dual; //假设得到结果5656
2、 alter sequenceseq_name increment by -5655; //注意是-(n-1)
3、 selectseq_name.nextval from dual;//再查一遍,走一下,重置为1了
4、  alter sequenceseq_name increment by 1;//还原
//可以写个存储过程,以下是完整的存储过程,然后调用传参即可: 
create or replace procedure seq_reset(v_seqname varchar2) as n number(10);
tsql varchar2(100);
 begin
 execute immediate 'select '||v_seqname||'.nextval from dual' into n;
  n:=-(n-1);
  tsql:='alter sequence '||v_seqname||' increment by '|| n;
  execute immediate tsql;
 execute immediate 'select '||v_seqname||'.nextval from dual' into n;
  tsql:='alter sequence '||v_seqname||' increment by 1';
 execute immediate tsql;
end seq_reset;

获取表从XX条到NN条的数据

查询时加rownum字段(update可以直接当过滤条件使用,查询不可以当过滤条件用)

SELECT t1.* FROM (SELECT rownum row_num, t.*
FROM (SELECT * FROM cux.temp_cux_inv_profitloss t
ORDER BY t.serialno) t) t1
WHERE t1.row_num > XX AND t1.row_num <= NN;

修改表名称语法: alter tablecux.cux_xxx RENAME TO cux_xxx1;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值