`

sybase与oracle中insert into select和select into的用法

 
阅读更多

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中,并且每个插入操作都会被记录到事务日志之中。

    

二、Sybase还提供了一种"select ... into"语句实现类似功能
select into from 语句,该语法形式为:SELECT value1, value2 into Table2 from Table1。

这里要求的是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中查询出了!!

分享到:
评论

相关推荐

    vb6+Sybase+Oracle

    标题中的“vb6+Sybase+Oracle”表明这是一个关于使用Visual Basic 6(VB6)编程语言与Sybase和Oracle数据库交互的项目。这个项目可能涉及到数据库连接、数据查询、数据更新以及用户界面的设计等核心内容。让我们深入...

    SQL.rar_SQL INSERT_drop_insert into_oracle_sybase

    但是,标准的SQL命令,比如"Select"、 "Insert"、 "Update"、 "Delete"、 "Create"和 "Drop"常常被用于完成绝大多数数据库的操作。MS SQL Server 就是用的Transact- SQL。SQL语言有着非常突出的优点,SQL语言是非...

    Oracle中数据装载与数据重组的研究.pdf

    第一种是使用INSERT命令直接装载数据,这种方法通过INSERT INTO SELECT语句绕过缓冲区,直接将数据写入数据文件,适用于非分区表和分区表,并且支持并发修改。然而,INSERT INTO VALUES命令不支持直接装载功能。这种...

    Sybase12中文手册

    ### Sybase 12中文手册:SQL入门与高级使用篇 #### SQL介绍及基础知识 - **SQL概述**:SQL(Structured Query Language)是一种用于管理关系数据库的标准语言,它被广泛应用于各种数据库系统中,包括Microsoft SQL...

    Sybase语法大全.pdf

    - **DML(Data Manipulation Language)**:用于插入、更新或删除数据的语句,例如INSERT INTO、UPDATE、DELETE FROM等。 - **DQL(Data Query Language)**:主要用于查询数据的语句,例如SELECT语句。 - **DCL...

    OracleSQL必须要掌握的知识点全面总结.pdf

    - **DML (Data Manipulation Language)**: 用于操纵数据的SQL命令,包括 SELECT、UPDATE、DELETE 和 INSERT INTO。 - **DDL (Data Definition Language)**: 用于定义和管理数据库结构的语言,包括 CREATE DATABASE、...

    oracle数据库实用教程1.ppt

    关系型数据库是Oracle数据库所支持的数据模型,它以表格的形式组织数据,如DB2、ORACLE、INFORMIX和SYBASE等都是知名的关系型数据库。在Oracle数据库中,数据文件(Datafile)是存储实际数据的物理文件,而RDBMS...

    我的oracle学习笔记

    根据提供的信息,我们可以总结出以下关于Oracle数据库学习的相关知识点: ### Oracle 数据库基础学习笔记 #### 一、数据库概述 ...通过这些基础知识的学习,可以帮助初学者更好地理解和掌握Oracle数据库的使用方法。

    oracle数据库的功能

    - **插入数据** (`INSERT INTO`):向表中添加新行。 - **更新数据** (`UPDATE`):修改现有行中的数据。 - **删除数据** (`DELETE FROM`):从表中移除行。 3. **查询数据** (`SELECT`): 从一个或多个表中检索数据...

    oracle数据库实用教程.pptx

    实验环境中,可以通过telnet连接到Oracle服务器,使用特定的用户名和口令(如:oracle8/oracle8)登录,然后通过sqlplus工具访问数据库。例如,登录scott用户并查询其拥有的表,可以使用`select table_name from ...

    sql各种语法

    SQL 语法详解 SQL(Structured Query Language...在本教程中,我们将详细介绍各种 SQL 语句的使用方法,包括 SELECT、UPDATE、DELETE、INSERT INTO 等语句的使用方法,以及如何使用 SQL 语言来创建和修改数据库结构。

    ORACLE数据库实用学习教程.pptx

    - 插入记录使用INSERT INTO语句,可以选择性地指定要插入的列和对应的值。 - 修改表结构包括ALTER TABLE语句,可以修改列的属性、添加新列或删除列。 - 更新和删除记录分别使用UPDATE和DELETE语句,可以根据特定...

    介绍WebSphere下Oracle.docx

    4. **测试环境**:本文中的所有示例均在以下环境中进行了测试:Windows 2003、WebSphere 5.1、Oracle 9i、SQL Server 2000、Sybase 12.5 和 MySQL 5.0。 #### 三、Oracle 连接池配置步骤 接下来详细阐述 Oracle ...

    SQL 教程.docx

    它被广泛应用于包括Oracle、Sybase、SQL Server、DB2、Access等在内的多种数据库管理系统中。SQL允许用户执行一系列操作,如查询、插入、更新、删除数据,以及创建和管理数据库对象,如表、存储过程和视图。 SQL的...

    本文介绍WebSphere下Oracle.docx

    本文将详细介绍在 WebSphere 应用服务器环境下配置 Oracle、SQL Server、Sybase 和 MySQL 数据库连接池的方法,并给出相应的配置示例。 #### 二、系统准备 在进行数据库连接池的配置之前,需要完成一些基础的准备...

    SQL SERVER

    DML包括查询(SELECT)、更新(UPDATE)、删除(DELETE)和插入(INSERT INTO)数据的操作。而DDL则用于创建(CREATE)、修改(ALTER)、删除(DROP)数据库结构,如创建表、索引等。 了解和掌握SQL是管理和维护...

Global site tag (gtag.js) - Google Analytics