barriers / 阅读 / 详情

oracle中insert语句怎么嵌入select

2023-07-29 04:59:45
共1条回复
max笔记

insert into select可以将select 出来的N行(0到任意数)结果集复制一个新表中,select into

from只能将"一行"结果复制到一个变量中。这样说吧,select into是PL/SQL language

的赋值语句。而前者是标准的SQL语句。

做一个测试看两者差别。

首先创建两个表,一个作为源表,一个作为目标表。

create table t_source(

id number primary key,

testname varchar2(20),

createtime date,

flag varchar2(10)

);

create table t_target(

id number primary key,

testname varchar2(20),

createtime date,

flag varchar2(10)

);

接着,插入测试数据

insert into t_source values(1,"测试数据1....1",sysdate-2,"N");

insert into t_source values(2,"测试数据1....2",sysdate-2,"N");

insert into t_source values(3,"测试数据1....3",sysdate-2,"N");

commit;

测试insert into select 操作

insert into test2 select * from t_source where id=1;

commit;

测试select into 操作

因为select into是一个plsql语言中的复制语句,和:=实现的目标一样。

create or replace procedure sp_sync_test is

aa varchar2(100);

v_record t_source%rowtype;

begin

select t1.testname into aa from t_source t1 where id = 1;

dbms_output.put_line("普通变量 t1.testname= " || aa);

select t1.* into v_record from t_source t1 where id = 1;

dbms_output.put_line("记录变量 t1.testname= " || v_record.testname);

end;

这里增加了原始类型的变量和记录类型的变量

相关推荐

select into 怎么用

select into语句从一个表中选取数据,然后把数据插入另一个表中。把所有的列插入新表:SELECT *INTO new_table_name FROM old_tablename《SELECT INTO》语句可用于创建表的备份复件。SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。
2023-07-28 00:31:243

“select into ”怎么用?

结合以上回答select * into s1 from s 利用select 语句复制表,建立一个临时表,s1为新表名
2023-07-28 00:31:322

SQL select into 的用法,并举例说明

selectinto语句从一个表中选取数据,然后把数据插入另一个表中。selectinto语句常用于创建表的备份复件或者用于对记录进行存档。举例:所有的列插入新表:select*into新表from旧表制作备份附件:select*into表名from数据库名从一个数据库向另一个数据库中拷贝表select*into新数据库.表名from旧的数据库.表名
2023-07-28 00:31:421

oracle 中select into是什么意思

你如果表存在,就不用创建了直接select into就可以了
2023-07-28 00:31:504

Oracle中insert into select和select into的区别

insert into ... select是一条SQL语句。select ... into是PL/SQL的一条语句。
2023-07-28 00:32:161

小白初学PL/SQL 中关于SELECT INTO的问题如何解答?

这就是基本的语法啊,select 。。。into。。。from 就是一个语法格式,没什么特别的。其实你可以这样考虑。在存储过程中使用select的目的本身就是查询数据,既然要查询出来,那么肯定是要使用的,要想在过程中使用,就需要借助载体来获取到select查出的结果。这就是【变量】。通常有几种,单纯类型的变量,比如varchar2,number等等,还有就是集合,比如record,索引表等等。殊途同归,不论使用什么样的变量来获取值,都需要通过select into从数据库中把想要的只查询出来,直接赋值或者循环赋值。至于你说的sql server中没有这种语法,其实是不对的,sql server不是没有,只不过是写法不同罢了。sql server中的语法格式是:select @变量 = 列名 from 表名,其实和oracle的select into都是一个道理,只是写法形式上不同。希望对你有帮助。
2023-07-28 00:32:301

select * into索引会重建吗

select into 是将查询结果插入到一个新表中,新表的字段是select的字段。不会重建。大量使用select into不是个好习惯,它的影响和无限度的复制粘贴文件相似.所以为了避免数据库垃圾越来越多,最好在select into 的时候使用固定的命名风格. 比如增加统一的前缀.以便用一小段代码批量删除.
2023-07-28 00:32:381

Oracle中insert into select和select into的区别

Oracle中insert into select和select into的区别oracle中insert into select用语将数据插入到表中。select into 一般用于存储过程或函数等,将某个查询结果放入变量中。举例:1、insert into select12insert into a select * from b;commit;2、select intocreate or replace procedure p_testasv_begintime varchar2(20);v_endtime varchar2(20);v_str varchar2(10);beginv_begintime:=to_char(sysdate,"yyyy-mm-dd hh24:mi:ss");select "badkano" into v_str from dual;--其中这句是将某个值放入v_str变量中v_endtime:=to_char(sysdate,"yyyy-mm-dd hh24:mi:ss");dbms_output.put_line("开始时间为:"||v_begintime);dbms_output.put_line("结束时间为:"||v_endtime);end;
2023-07-28 00:32:461

Oracle中insert into select和select into的区别

ect * into target_table from source_table;insert into target_table(column1,column2) select column1,5 from source_table;以上两句都是将源表source_table的记录插入到目标表target_table,但两句又有区别。第一句(select into from)要求目标表target_table不存在,因为在插入时会自动创建。第二句(insert into select from)要求目标表target_table存在,由于目标表已经存在,所以我们除了插入源表source_table的字段外,还可以插入常量,如例中的:5。
2023-07-28 00:33:062

SELECT INTO 语句可以创建本地或全局临时表吗?

可以。SQL Server临时表有两种类型:本地和全局。它们在名称、可见性以及可用性上有区别。本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 SQL Server 实例断开连接时被删除。全局临时表的名称以两个数字符号 (##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除。如果数据库会话创建了本地临时表 #temtable,则仅会话可以使用该表,会话断开连接后就将该表删除。如果创建了 ##temtable全局临时表,则数据库中的任何用户均可使用该表。如果该表在您创建后没有其他用户使用,则当您断开连接时该表删除。如果您创建该表后另一个用户在使用该表,则SQL Server 将在您断开连接并且所有其他会话不再使用该表时将其删除。如果本地临时表由存储过程创建或由多个用户同时执行的应用程序创建,则SQL Server 必须能够区分由不同用户创建的表。为此,SQL Server 在内部为每个本地临时表的表名追加一个数字后缀。存储在tempdb 数据库的 sysobjects 表中的临时表,其全名由 CREATE TABLE 语句中指定的表名和系统生成的数字后缀组成。为了允许追加后缀,为本地临时表指定的表名table_name不能超过 116 个字符。当存储过程完成时,将自动除去在存储过程中创建的本地临时表。由创建表的存储过程执行的所有嵌套存储过程都可以引用此表。但调用创建此表的存储过程的进程无法引用此表。临时表位于tempdb系统数据库。使用SELECT INTO语句可以把任何查询结果集放置到一个新表中,还可以通过使用SELECT INTO语句解决复杂的问题。例如,需要从不同数据源中得到数据集,如果一开始先创建一个临时表,那么在该表上执行查询比在多表或多数据库中执行查询更简单。在使用SELECT INTO语句时,应该注意如下的事项和原则:可以使用SELECT INTO语句创建一个表并且在单独操作中向表中插入行。确保在SELECT INTO语句中指定的表名是惟一的。如果表名出现重复,SELECT INTO语句将失败。可以创建本地或全局临时表。要创建一个本地临时表,需要在表名前加符号(#);要创建一个全局临时表,需要在表名前加两个符号(##)。本地临时表只在当前的会话中可见,全局临时表在所有的会话中都可见。当使用者结束会话时,本地临时表的空间会被回收。当创建表的会话结束且当前参照表的最后一个Transact-SQL语句完成时,全局临时表的空间会被回收。使用SELECT INTO语句的基本语法如下:SELECT <select_list>INTO new_tableFROM {<table_source>}[,…n]WHERE <search_condition>例如:select * into #newTable from news where s_date>"2010-3-1"利用SQL Server的全局临时表防止用户重复登录 在我们开发商务软件的时候,常常会遇到这样的一个问题:怎样防止用户重复登录我们的系统?特别是对于银行或是财务部门,更是要限制用户以其工号身份多次登入。可能会有人说在用户信息表中加一字段判断用户工号登录的状态,登录后写1,退出时写0,且登录时判断其标志位是否为1,如是则不让该用户工号登录。但是这样那势必会带来新的问题:如发生象断电之类不可预知的现象,系统是非正常退出,无法将标志位置为0,那么下次以该用户工号登录则不可登入,这该怎么办呢?或许我们可以换一下思路:有什么东西是在connection断开后可以被系统自动回收的呢?对了,SQL Server的临时表具备这个特性!但是我们这里的这种情况不能用局部临时表,因为局部临时表对于每一个connection来说都是一个独立的对象,因此只能用全局临时表来达到我们的目的。好了,情况已经明朗话了,我们可以写一个象下面这样简单的存储过程:create procedure gp_findtemptable -- 2001/10/26 21:36 zhuzhichao in nanjing/* 寻找以操作员工号命名的全局临时表* 如无则将out参数置为0并创建该表,如有则将out参数置为1 * 在connection断开连接后,全局临时表会被SQL Server自动回收* 如发生断电之类的意外,全局临时表虽然还存在于tempdb中,但是已经失去活性* 用object_id函数去判断时会认为其不存在. */@v_userid varchar(6), -- 操作员工号@i_out int out -- 输出参数 0:没有登录 1:已经登录asdeclare @v_sql varchar(100)if object_id("tempdb.dbo.##"+@v_userid) is nullbeginset @v_sql = "create table ##"+@v_userid+"(userid varchar(6))"exec (@v_sql)set @i_out = 0endelseset @i_out = 1在这个过程中,我们看到如果以用户工号命名的全局临时表不存在时过程会去创建一张并把out参数置为0,如果已经存在则将out参数置为1。这样,我们在我们的应用程序中调用该过程时,如果取得的out参数为1时,我们可以毫不客气地跳出一个message告诉用户说”对不起,此工号正被使用!”判断方法范例:select @sTmpWareA="tempdb..[##MARWareA"+ @ComputerName+"]"if exists (select * from tempdb..sysobjects where id = object_id(@sTmpWareA) and type = "U")beginset @sTmpWareA="[##MARWareA"+ @ComputerName+"]"exec( "drop table " )endelseset @sTmpWareA="[##MARWareA"+ @ComputerName+"]"@sTmpWareA 就是临时表的名称,过程中使用exec来操作
2023-07-28 00:33:131

oracle 中SQL 语句开发语法 SELECT INTO含义

和sqlserver中的不一样一般在oracle中 select into用于存储过程中如:select count(*) into v_count from table_name where id=1;意思就是把id=1的数量放到一变量v_count中,在后续的过程中调用这个变量
2023-07-28 00:33:232

大量使用select into之后

回答者: yahahi修改一点点小错误哈========或者直接删除后再复制 if exists (select * from sysobjects where [name]="要复制的表名") drop table 要复制的表名 select * into 要复制的表名 from 源数据表
2023-07-28 00:33:313

pb编程中select into的用法

pb9中,select max(flowno) into :flowno:id from bil_flowlist,id是用来做指示变量的,当flowno正常取值时,id的值为0,去空值的话id为-1,发生类型转换错误时,id为-2,还有不清楚的联系我
2023-07-28 00:33:401

SQL中select into 中的into 有等同于"="号的意思么

into和"="怎么可以等同呢,into是集合操作,"="是值操作,再说在集合操作中into也没有包含"="的含义,into是值将一个集合插入另一个集合中
2023-07-28 00:33:541

oracle中select into 与fecth into 在给变量赋值时的区别在哪儿?

前者直接赋值变量,后者游标
2023-07-28 00:34:042

SQL select into语句向另一个数据库中拷贝表

按照你的意思应该是 select * INTO 数据库1 from 数据库2你的 多了一个“in”
2023-07-28 00:34:154

mysql 支持 select into 吗

MYSQL不支持: Select * Into new_table_name from old_table_name; 这是sql server中的用法替代方法: Create table new_table_name (Select * from old_table_name);
2023-07-28 00:34:331

select* into ss from stu 这个语句的作用是什么?

SELECT INTO 语句从一个表中选取数据然后把数据插入另一个表中。 SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档 这个语句会在数据库中用和你所指定的列类型和标题创建一个新的表。
2023-07-28 00:34:511

oracle一直提示select后缺少into

PL/SQL语句块里,单独的select语句必须和into语句成对出现。语法如此返回结果集 需要用到游标。单独的过程不能是一个查询语句。即使这样 也报错的 begin select * from tablea ; end;这样:as cursor c_cur is select * from tablea;begin open c_cur;end ;
2023-07-28 00:34:591

SQL:select into写法

if (select column1 from table rownum=1 )=1..这样
2023-07-28 00:35:153

sql存储过程语句select * into

select * into @tablename ,这个不清楚啊
2023-07-28 00:35:233

Oracle 中如何用select into备份文件

select * from oldtablename into newtablename或者insert into newtablename (select * from lodtablename);用下面的我一般都成功了。
2023-07-28 00:35:321

SELECT INTO 语句的源表和目的表不能相同

如果你只是要保存中间数据的临时表可以用#table或者@table表变量或者你可以直接拿select出的结果集作为派生表,与InspectionEvent_table表再进行关联
2023-07-28 00:35:402

关于oracle存储过程select into 未找到数据问题

按我的理解,第一个图 不会执行到 update,第二个图会执行。
2023-07-28 00:35:482

select into from到底啥意思?

update table1 set bbb = aaa where 写明你的条件
2023-07-28 00:35:553

db2中有select into吗?我想将几个值同时插入到几个变量

if exists(SELECT t.HM, substr(t.zh,7,3),replace(char(t.KHRQ),"-",""),t.ZHLB INTO :v_table_accname,:v_table_brno,:v_table_khrq,:v_table_zhxz FROM BRAS.FHDGCKFHZ t WHERE t.ZH=new.ACCNO) then当然不行,INTO是给变量赋值,你要判断变量是否有值,在IF THEN 中判断
2023-07-28 00:36:191

关于ORACLE中SELECT INTO 语句有使用集合函数时不会出现no data found 异常

循环读取数据,test给个初始值吧
2023-07-28 00:36:304

如何用 SELECT INTO 语句从A表中的指定字段复制到B表中的指定字段?高手给个示例谢谢

insert into b(B1,B2...) (select A1,A2... from A)
2023-07-28 00:36:372

oracle存储过程select语句必须带into吗

不是啊,语法有问题,干脆不用 VV,试试这个:SELECT * FROM "T_SBRECORD_copy" WHERE SB_ID=(SELECT SB_ID FROM "T_SBRECORD_copy" WHERE SB_ID=spName);
2023-07-28 00:36:453

execute immediate 动态sql中如何使用select into 变量,变量是也是动态的,如acct_N,N=1^10.

什么意思
2023-07-28 00:36:552

存储过程select into 列表中的表达式类型错误

为什么有2个from select id into test_v from test1;----是要这样吧
2023-07-28 00:37:031

sql中插入一列,列值取自另一张表的 列值怎么写语句?

insert into table (a) value select a from table
2023-07-28 00:37:444

SQL 语句中select into与to的区别

select colA into @vA from ....这个是把 从表中 选择列的值 赋给变量 @vA 的语法。to 是什么语法? 举个例子?
2023-07-28 00:38:301

oracle中select缺少into?

select语句的语法是没有into的。sql:select * from tablename where 条件。解释:以上语句就是select的用法,是没有into关键字的。扩展一:insert 语句是有into的。sql: insert intotablename(id) values(12);扩展二:存储过程中有into语句,表示赋值。sql:select name into 变量 from tablename ;
2023-07-28 00:38:383

pb 中使用 select into 语句

表1必须是个已定义的变量
2023-07-28 00:38:452

如何解决oracle存储过程select into问题

把存储过程贴出来,把你的要求说出来
2023-07-28 00:38:532

SQL中select into in有问题,in附近有语法错误?

把in那段去掉不行?
2023-07-28 00:39:002

关于ORACLE 存储过程开始SELECT INTO 中的 INTO ?

把查询结果赋值给变量v_fee_date
2023-07-28 00:39:071

数据库 SQL中用SELECT INTO语句创建的新表保存在什么位置 怎么才能看到 谢谢!

当前使用的DB。
2023-07-28 00:39:186

oracle触发器select into和cursor用法的区别

楼主您好cursor多用于定义遍历一个结果集之前的查询。然后用fetch into或是for循环遍历(loop)此游标select into多用于查询出单个值(不是绝对的 比如有bluk collect into)并给自己自定义的变量赋值。这俩其实没太大关系,一般对比cursor和ref cursor,select into 和 :=赋值的区别
2023-07-28 00:39:351

select into 变量,但是表名是动态的,请问怎么实现

可以是变量,但是变量的值必须是真实有效的表名; 如果不存在的表,查询语句会报错的;
2023-07-28 00:40:202

存储过程中的select into from是干什么的

into后边应该还有个变量名,into前面也还要带上筛选字段,例如select count(*) into v_count from dual;这条语句的意思是查询dual表的所有记录数,将查询结果存入v_count变量中,也就是给变量设值的用法
2023-07-28 00:40:281

在oracle select 的条件后面跟上into是什么意思

不是条件后面吧select * into 表名1 from 表名 where 条件是不是这样的,这个是生成一个新表
2023-07-28 00:40:372

abap 中 select.....into 和 move.......to 的区别!

马林·索列斯库 /冯志臣译即使落满岁月的尘埃实际上吞噬着这些细瘦的铁栅,你就会感到它的力量。为么他说,他们只是想立一座纪念碑,但出了什么差错:现在已不重要。另一种海洋
2023-07-28 00:40:455

oracle中,select count into什么意思

应该是,你用select*from表1where字段1=条件时,系统查询的是优化后的条件索引,而count(*),必须完整地走完所有数据.
2023-07-28 00:40:582

ACCESS中提示“不允许在select into语句中使用多值字段”

提示很清楚, 你首先要弄清楚数据表里哪些字段被称为多值字段, 然后对这些字段进行单独处理
2023-07-28 00:41:063

select into from 多个into

这就是应该到底层了吧,但可以这样吧:select a,d into b ,e from tab_c
2023-07-28 00:41:131

请教下各位达人,mysql里面用select into给变量赋值时,怎么处理查询结果为空的异常

select n1 into var1 from tab1 where n1 is not null
2023-07-28 00:41:271

db2中不能用类似select …into…from…的语句吗?

你丢人吗。问的select into你回答insert into
2023-07-28 00:41:473

oracle有select into临时表的用法吗

1、创建空表create table a_tmp as select * from a where 1=2;2、实例insert into a_tmp select * from a where create_time > sysdate-1;
2023-07-28 00:41:541