在oracle中如何实现,一个function将传入的insert语句的rowid插入到临时表.

[code="java"]create or replace function f_myfunc(sqlstr varchar2)

is
pragma autonomous_transaction;
Result varchar2(2000);
begin
--sqlstr类似于 'insert into mytable (field1, field2) values ('1', '2')' ;
-- insert into mytable (field1, field2) values ('1', '2') returning rowid into Result; 这样是可以得到rowid的
execute immediate sqlstr ;
--如何将rowid插入到tmp_mytmp中?
insert into tmp_mytmp values(??);
commit;

end f_myfunc;[/code]

调用这个过程时
select f_myfunc ('insert into mytable (field1, field2) values ('1', '2')') from dual;
select * from tmp_mytmp 希望能查到那个rowid.

请问如何实现?

0

4个回答

[quote]这么做,运行 是会报语法错的呀.(ORA-00905: 缺失关键字). [/quote]我机上没有装ORACLE,但是我是模仿你写的来给你个建议,它报哪里错呢?
还有,你可以确定[quote]sqlstr := sqlstr || 'returning rowid into Result'; [/quote]执行完之后,新生成的记录的ID被存进了Result 了么?

0

[quote]
--如何将rowid插入到tmp_mytmp中?

insert into tmp_mytmp values(??);
[/quote]
你可以模仿这个[quote]insert into mytable (field1, field2) values ('1', '2')' ;[/quote]
[code="sql"]
sqlstr = 'insert into tmp_mytmp values(' + Result + ')';
execute immediate sqlstr ;

[/code]

0

[quote]execute immediate Result;[/quote]
你这个执行完之后,没有再执行
[quote]
Result := 'insert into tmp_mytmp values(' + ID+ ')';

execute immediate Result;
[/quote]
上面的 ID 就是你[quote]Result := 'insert into tmp_mytmp values('||sqlstr||')'; [/quote]执行产生的返回值啊。

0

我的意思是这个
[code="sql"]
create or replace function f_myfunc(sqlstr varchar2) return varchar2

as

pragma autonomous_transaction;

Result varchar2(2000);

begin

sqlstr := sqlstr || 'returning rowid into Result';

execute immediate Result;
sqlstr := 'insert into tmp_mytmp values(' || Result || ')';

execute immediate Result;
commit;

return '1';

end f_myfunc;
[/code]

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Oracle11g之实用技术 将数据插入Oracle数据库时如何得到其rowId
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!                 O
实现将存储过程作为inser into的数据源,插入临时表
1、引言         今天项目制作报表需要实现一个功能,将执行一个存储过程后的数据表,作为数据源,插入到一张临时表里。由于这个临时表知识系统自动生成的字符串,并没有在数据库(SQL Server)定义,所以,做出各种尝试,均告失败。 2、两种T-SQL语法      1、select...into...from      2、insert into ... select
如何得到JDBC Insert 语句执行后插入数据库记录的主键
本文转自:http://blog.csdn.net/wwg2436/article/details/7638309 未作修改。 当插入一条记录时,我们很多时候都想马当前插入的主键返回出来. 别外.如果主键是自动生成的(大多数时候是这样),那么取回主键是一种比较困难的事. 可能对于一些特殊的数据库必须把insert into和select max(key)或什么序列当前值作为一个事务的原子来
Oracle将查询结果存入临时表的写法
有时候因为查询结果很大且需要再跟其它表进行不同形式的连表查询,这是如果整个sql写下来不仅看起来臃肿而且查询效率也很低,Oracle提供了一种将查询结果
把存储过程结果集SELECT INTO到临时表
把存储过程结果集SELECT INTO到临时表   在开发过程中,很多时候要把结果集存放到临时表中,常用的方法有两种。   一. SELECT INTO  1. 使用select into会自动生成临时表,不需要事先创建   select * into #temp from sysobjects select * from #temp  
插入数据到临时表及去重复语句
-----------------------------------原始表FirstTable---------------------------------- select IDENTITY(INT,1,1) as id,国内订单表.CrediteyesNO,国内订单表.客户报告编号, (CASE CH_主要财务比率.存货周转率  WHEN 0 THEN  null  WHEN null T
sql 创建临时表 并且插入多条数据
create table #Tmp --创建临时表#Tmp ( tar varchar(50), --修改后 的 目标值 res varchar(50), --修改前 的 值 );insert #Tmp select '爱尔兰','LXGJAEL01' union select '澳大利亚','LXXFAU001' union select '澳门','LXX
Oracle insert语句执行之后返回插入数据的sys_guid()
DECLARE  seq_id tb_ysgl_ysbz.ysbzid%TYPE; begin insert into tb_ysgl_ysbz (yskmid) values(seq_ysbz.nextval) returning ysbzid into seq_id; COMMIT; DBMS_OUTPUT.PUT_LINE('INSERT: ' || seq_id);  end;
ORACLE:SELECT语句里调用函数使用DML语句进行UPDATE/INSERT/DELETE操作
需求:公司一系统升级,要维护的数据库表中已有数据,该表没有序列、触发器等。此表要直接插入一些数据,插入的数据为了和以前的数据兼容(就是一样)。该表主键的生成以前是在代码中分两步进行的,即查询、更新(现在要直接插入数据,不用服务端JAVA代码,不能用这个)。做法:本人很懒,希望一条SQL完成上面的插入并更新。而本人oracle数据库(应该说所有数据库)很菜,不会啊,于是找度娘,发现如下两篇资料对我有
创建临时表,一条sql语句一次插入多条记录
create table #test11 ( id int not null , name varchar(20) )insert into #test11select 1,张三union allselect 2,李四select * from #test11 结果显示:补充说明:#代表局部临时表,##代表全局临时表。本地临时表仅在当前会
SQL Server 临时表的使用以及临时表数据插入问题
想把一个数据表里的某个字段筛选出来然后,循环的把值传给另一个存储过程,选择使用了临时表。 SQL代码如下: CREATE TABLE #Temp_TABLE (  ID INT IDENTITY(1,1), TRANSID VARCHAR(30), --出库单号 PRIMARY KEY (ID) ) INSERT INTO #Temp_TABLE SELECT TRANSID
SQL优化实战:临时表+分批提交+按日结存
  结存数据太慢怎么办?     (1)第1次优化     一开始,客户经理说客户,不想在多个查询中看数据,想在一个表中看所有的数据,也就是说需要把原有的多个查询的sql合并为一个,但是实际上合并后,每个月的原始数据量大概是100w条左右,然后进行计算,最后返回大概3w条左右,速度比较慢。 然后,客户反馈,在查询数据时非常慢,基本上查询1个月的数据,需要5分钟,于是对sql中涉及...
Oracle两种临时表的创建
1.会话级临时表: 会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,Oracle自动清除临时表中数据。 格式: Create Global Temporary Table Table_Name ( Col1 Type1, Col2 Type2 ... ) On Commit Preserve R
sql 脚本 向临时表中插入数据, 存储过程结果集插入到临时表中
IF OBJECT_ID('TEMPDB.dbo.#') IS NOT NULL DROP TABLE #CustProducts -- 向临时表中插入数据 SELECT DISTINCT cpli.ProductID INTO    #CustProducts FROM    dbo.MAPS_Customer_User AS cu
SQL 在OPENQUERY中使用传入参数和临时表获取参数
IF object_id('tempdb..#itemtype_temporary') IS NOT NULL  BEGIN   DROP TABLE #itemtype_temporary  END CREATE TABLE #itemtype_temporary (  itemtype NVARCHAR (30) ) DECLARE @part_no NVARCHAR(30
mysql 临时表 创建和插入
mysql 2张表插入到临时表里 一个项目用到多张表数据合计查询 by 夜色紫宸風 DROP TABLE IF EXISTS tmp_table; CREATE TEMPORARY TABLE tmp_table SELECT appid,uid FROM `sz_app_credit_log_201111`; INSERT INTO tmp_table SELECT appid,ui
Oracle:表批量插入另一个表的数据
-- DROP sequence lxf_id_seq; 创建一个sequence序列,因为oracle不像mysql那样可以id自增: CREATE SEQUENCE lxf_id_seq MINVALUE 1 NOMAXVALUE INCREMENT BY 1 START WITH 1 NOCACHE; CREATE OR REPLACE TRIGGER BeforeTestCr
游标的结果集放入临时表
/**** 将游标遍历的结果集放入临时表中,最后读取临时表 ****/ CREATE  PROCEDURE [dbo].[cc] AS DECLARE @sql VARCHAR(4000) DECLARE @id VARCHAR(10) DECLARE cc CURSOR FOR SELECT id FROM type  CREATE TABLE #lo (   id
存储过程学习总结(oracle多参数 insert)
平时做开发很少使用存储过程 本次工作中涉及多批量插入且带有参数的存储过程 所以又进行了一点学习 与简单的入门一样  在进行存储过程批量插入时 实例如下 create or replace procedure proc_result_insert(a in number,b in number,c in varchar2,d in varchar2,e in varchar2,f in
使用insert子句将查询结果插入到hive表
使用insert子句将查询结果插入到hive表 语法 标准语法: INSERT OVERWRITETABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)]select_statement1 FROM from_statement; INSERT INTO TABLEtablename1 [PARTITION (partc
oracle 批量更新(临时表的方式)
背景: 之前通过导入的方式在T1表中插入了数据(大于3000条),但后来发现有一列的值信息不全(有的是空着的),于是想将信息补全。 先建立一张临时表T2,通过oracle的导入将新的数据迁入,然后 update T1 set T1.列A= (select T2.列A from T2 where T1.列B = T2.列B and rownum
从Oracle数据库中读取数据,自动生成INSERT语句
--Create Table:DROP TABLE Advance_Query;CREATE TABLE Advance_Query( Tbl   VARCHAR2(30) NOT NULL, --表名称 PK Form   VARCHAR2(30) NOT NULL, --所属窗体名称 pk Field   VARCHAR2(30) NOT NULL, --字段名称 pk By_Name  
如何在oracle中用SQL创建临时表?
---------------------------------------------------------------     是TEMPORARY   CREATE  GLOBAL  TEMPORARY  TABLE  flight_schedule  (        startdate  DATE,          enddate  DATE,          cost  NUM...
使用bulk insert快速插入大批量数据
在Oracle 数据库中,需要插入大数据量到表中时,如一次性数据量为百万级别。通常想到的是加nologging append 等提示,提升插入数据的速度。 但还有一种方法,是从根本上改变记录的插入方式。它就是bulk insert 。 我们简单比较一下此方法和普通的插入方法的差别,主要是性能上的。在数据块层面的操作,以后再分析。 ...
oracle 插入临时数据
with tt as  ( select   1   as  id,   '901705119894261'   as  nums from dual union all select   2   as  id,   '901705119894338'  as nums  from dual  )  
多行数据插入,使用临时表
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Configuration; using System.Data; using
将查询出来的数据插入(oracle)
insert into inspectionstatistics select s_inspectionstatistics.nextval,m.* from ((select t.*, case when unSafeInspectsCount = 0 then 0 else round(rectifyInspectsCount/unSafeInspectsCount*1...
oracle用存储过程导出INSERT INTO 语句
前些天看到几个朋友做导出oracle中的数据,可以用PL/SQL Devoleper的和export tables功能批量将N个表的数据导出成insert into语句,但怎样用SQL语句导出呢,只有用sql构造出来,以下是我用存储过程实现的代码create or replace package PK_EXPORT_TABLE  is  type result is ref cursor;en
使用存储过程向Oracle数据库中插入BLOB文件
这段时间在做扬子石化的GIS开发,一直以来遇到一个最大的问题就是上传大文件类型(BLOB)超过32K就会从数据库中报出错来,十分头痛,前天在网上看到一个解决方案,是用SQL语句在界面中先插入一个empty_blob(),再通过update语句更新,感觉虽然解决问题,但一直觉得不是很方便,也不符合现在程序中使用三层架构在后台处理数据的要求,所以想了想,改成了存储过程,并且进行了简化,用一条语句实现了
SQL优化案例一则,insert到临时表的sql优化余地
问题SQL,报上来看有没优化的余地。 9i的t0epcis库, 这个sql是上生产了,但是没有开quartz开关;所以这次上线将会打开,需要优化该sql;请协助支持!   INSERT /* +APPEND */ INTO ECIF_GROP_DEPART_ADD_TMP     select distinct /*+ parallel(o,8)*/    o
Oracle生成某一用户下所有表数据的insert语句
功能:生成某一用户下所有数据表数据的insert语句,放入d:\insert.sql文件。限制:只支持number、char、varchar2、date、long、clob数据类型。提示:数据量小还可以,大了就别用这种方式了,会很慢。[sql] view plain copy/* Formatted on 2012-12-27 20:56:24 (QP5 v5.185.11230.41888) *
Sql查询插入临时表
if object_id('tempdb..#a) is not null Begin     drop table #a End Select * into #a From table where 条件
用PL/SQL Developer 把oracle表里的数据导成insert语句(不积跬步,无以至千里)
右键选择某个表,点击"Export date",出现右边所示窗口,选择相应表(可以多选,也是这种方式的优点), 选择SQL Inserts标签页,指定输出地点(Output file),点击"Export",完成导出
Oracle对一张表进行插入(Insert)和更新(Update) 使用一条Sql语句(Merge Into)
--更新表te_m_recheck_info ,如果表te_m_recheck_info 存在记录AAA 则执行更新操作,否则执行insert操作merge into te_m_recheck_info m--该表是需要更新或插入的表  using te_m_manualalert_info_new bb -- 关联表  on (m.s_manualertid ='AAA')--这种方式比较安全,...
mysql中实现行号,类似oracle中的rowid
 https://www.cnblogs.com/conanwang/p/5848021.html mysql中实现行号需要用到MYSQL的变量,因为MySql木有rownumber。   MYSQL中变量定义可以用 set @var=0 或 set @var:=0   可以用=或:=都可以,但是如果变量用在其他语句中,如:select那么必须用:=,因为=会被当作一
insert into 表, 插入变量
public void actionRemove_actionPerformed(ActionEvent e) throws Exception { if(BillStatusEnum.Audit.equals(this.editData.getBillStatus())){ MsgBox.showInfo("已审核的单据不允许删除!"); SysUti...
oracle存储过程含参数的插入数据
create or replace procedure proczipcodebyzipinsert(   i_zipcode  in  zipcode.zip%type,   i_city in zipcode.city%type,   i_state in zipcode.state%type ) as   v_zipcode zipcode.zip%type;
一个选查询后插入到一个临时表的oracle函数
一个选查询后插入到一个临时表的oracle函数
oracle-从一个表将数据插入到另一个表、自动插入序列、表数据结构不同
--临时表结构 create table RECOMMEND_SERVICE_TMP ( ID NUMBER not null, MEMBER_ID NUMBER not null, COMPANY_ID NUMBER not null, RECOMMEND_SERVICE NUMBER not n...
oracle insert 将一张表数据插入另外表中
将一张表的数据插入两外张表 以表B的数据插入表A, 表B有多少符合条件的数据, 表A就插入多少条数据 如表B符合条件有10条数据,表A也会添加10条数据 case 1 两张表的结构完全一样 insert into tableA select * from tableB case 2, 两张表的结构不一样,只获取表B中符合条件的一些列的数据 insert into t
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 如何实现云计算 云计算如何实现