您的位置:首页 > 数据库

SQL语句整理

2016-03-24 15:39 288 查看

字段描述增、删、改

添加字段的语法:

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: