Sybase
在使用数据库的时候,有时我们需要把一个表中的数据经过筛选插入另外一个表中。
Sybase提供一种特殊的方式来实现这一功能,
一、首先,我们来看一下insert into select语句
其语法形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1。
这里的要求就是Table2必须已经存在,如果不存在,系统则会提示对象无效。
例如
insert into boy
select id,name
from person
where type='boy'
通过insert .... select ...语句,select的结果会被直接插入表boy中,并且每个插入操作都会被记录到事务日志之中。
这里要求的是MyTable1不存在,因为在插入的时候,系统会自动创建MyTable1,如果之前MyTable1已经被创建,执行时会报错,系统就会提示已经存在表。
就是因为这个特性,就会给我们带来很多的方便,首先,我如果只想要MyTable2表中的ID列的话那我只需要将ID列select出来,然后加入到新表中即可。那如果我想要MyTable2中的Name列,那我也仅仅是需要把Name列select出来,然后添加到新表中即可。
应用范围由实践者自己找到答案
例如,
select id,name
into boy
from person
where type='boy'
这时一个拥有字段id和name的表boy会被自动创建,select的结果会被直接插入新建的表中,
但操作并不会被记录到事务日志,并且select..into只有在事务日志trun off 之后方可使用
用sybase central查看sa用户的权限,在“选项”中,select into及bcp等选项已经打开。
select * from kkk into #tmpkkk怎么就不行呢?试了试,原来是select * into #tmpkkk from kkk,晕倒。
当然如果insert into #tmpkkk select * from kkk,就需要先创建#tmpkkk了。
若将以上语句在存储过程中执行时,需:
declare @str varchar(200)
select @str="select * into tempdb..kkk from kzzz"
exec (@str)
此处方式执行。注意@str左右要加括号,不然会报错。
=============================================================================
Oracle中insert into select和select into的用法(异常0RA-00905:missing keyword的解决)
两张表进行数据的拷贝,最常用的拷贝语句是:
insert into select 和 select into from
但是请绝对的注意:
在Oracle中select into from不可以使用-----
原因很简单:select into是PL/SQL language 的赋值语句!如果使用则Oracle会抛出0RA-00905:missing keyword的异常!
但是可以用create table select代替该功能!!!具体参考下面测试代码!
但是在Sql Server中可以正常使用。
先做个小测试:
-- 建表
create table test1(
id number primary key,
testname varchar2(20),
createtime date,
falg varchar2(10)
);
create table test2(
id number primary key,
testname varchar2(20),
createtime date,
falg varchar2(10)
);
-- 插入测试数据
insert into test1 values(1,'测试数据1....1',sysdate-2,'N');
insert into test1 values(2,'测试数据1....2',sysdate-2,'N');
insert into test1 values(3,'测试数据1....3',sysdate-2,'N');
commit;
-- 使用insert into select 拷贝数据(注意红色部分,可以自动生成id序列值)
insert into test2(id,testname,createtime,falg)
select seq_test.nextval,t1.testname,t1.createtime,t1.falg from test1 t1;
-- 使用 create table select 创建被拷贝数据(注意要删除test2表先)
create table test2 as select t1.id,t1.testname,t1.createtime,t1.falg from test1 t1;
-- select into from 不可以,抛异常
select t1.id,t1.testname,t1.createtime,t1.falg into test2(id,testname,createtime,falg)
from test1 t1;
-- PL/SQL language 中select into赋值语句的测试使用
create or replace procedure test1_prod
is
aa varchar2(100);
begin
select t1.testname into aa from test1 t1 where id=1;
dbms_output.put_line('t1.testname= '|| aa);
end;
总结:
数据拷贝,建议使用insert into select;
使用insert into select时如果对拷贝表生成id序列值,需要在select中以查询出的形式从sequence中查询出,再插入拷贝表;比如:
insert into test2(id,testname,createtime,falg)
select seq_test.nextval,t1.testname,t1.createtime,t1.falg from test1 t1;
典型从test1表查询出数据插入test2表,test2要自动插入id,看上面代码,id要在select中先从sequence中查询出了!!
相关推荐
但是,标准的SQL命令,比如"Select"、 "Insert"、 "Update"、 "Delete"、 "Create"和 "Drop"常常被用于完成绝大多数数据库的操作。MS SQL Server 就是用的Transact- SQL。SQL语言有着非常突出的优点,SQL语言是非...
sybase 与oracle函数对比,一些常用的函数对比。
sybase库中导出全部表的oracle、mysql和sybase格式的建表语句
Sybase安装步骤及中文乱码解决办法,本人参考各种资料,然后自己解决成功无数次后总结的结果
通过Oracle访问Sybase数据库
Oracle向Sybase ASE迁移指南, 很详细的介绍。
vb6+Sybase+Oracle源代码
不同数据库平台的互连一般称之为数据库的异构服务,现在各大数据库之间都可以实现这样的异构互连,只是各厂商的具体实现技术不一样。本文介绍了Sybase到Oracle连接服务器的实现方法。
官方数据库迁移教程PPT migration sybase to oracle ,权威!
oracle 直接同步sybase中数据
介绍oracle和sybase的主要的区别,可以充分的认识到oracle和sybase数据库
八步精通Oracle访问Sybase数据库
Sybase数据库迁移到Oracle-11g手册【中文版】
Oracel数据库向Sybase ASE迁移向导
利用JAVA通过JDBC把Oracle数据转移到Sybase
针对powerdesigner工具的odbc驱动
JTDS是一个开放源代码的100%纯Java的,用于JDBC 3.0驱动Microsoft SQL Server (6.5 ,7 ,2000和2005版本)和Sybase(10 ,11 ,12 ,15 版本)的驱动程序 。 JTDS是基于freetds的,并且是目前最快的生产准备JDBC...
Oracle11gR2透明网关for sybase
sybase iq,oracle进行复杂算法计算如去年同期值,上月累计值时的分析函数样例。多用于业务报表中的计算
本白皮书针对由Sybase设计和执行的Sybase ASE用户调研结果进行分析。本调研结果明确表明:虽然Oracle在某些指标上的表现比Sybase略胜一筹,但绝大部分的案例都证明,ASE的总体拥有成本反而比Oracle占尽上风。