Oracle 在函数或存储过程中执行一条插入语句并返回主键ID值
有时,我们需要往一张表插入一条记录,同时返回主键ID值。
假定主键ID的值都是通过对应表的SEQUENCE来获得,然后进行ID赋值
这里有几种情况需要注意:
1)如果建表语句含有主键ID的触发器,通过触发器来实现主键ID的自增,实现方式如下:
INSERT INTO GP_MONTH_BILL (
MONTH,
BONUS_VALUE,
CUR_WAY,
CUR_TIME,
STATUS,
IS_USE,
CREATE_TIME)
VALUES (
CUR_MONTH,
CUR_BONUS_VALUE,
'包函数固化',
SYSDATE,
'固化中',
1,
SYSDATE)
RETURNING ID
INTO CUR_MONTH_BILL_ID; --CUR_MONTH_BILL_ID为变量,接收返回的ID值
关键语法: INSERT INTO TABLE VALUES(,) RETURNING ID INTO VAL
补充:此种情况,触发器的语句可能如下
CREATE OR REPLACE TRIGGER GPS.TR_EM_FILES
before insert on "GPS"."EM_FILES"
for each row
begin
select "GPS"."SQ_EM_FILES".nextval into :new."ID" from dual;
end;
/
或
oralce12c,主键是通过default设置SEQUENCE下一个值
CREATE TABLE C##EM.GP_TARGET_TYPE
(
ID NUMBER(19) DEFAULT "C##EM"."ISEQ$$_124895".nextval NOT NULL, --DEFAULT默认值为seq的下个值
NAME NVARCHAR2(50) NOT NULL,
REMARK NVARCHAR2(200),
CREATE_TIME DATE NOT NULL,
CREATE_UID NUMBER(19),
DELETE_UID NUMBER(19),
DELETE_TIME DATE,
IS_DELETE NUMBER(1) NOT NULL,
UPDATE_TIME DATE,
UPDATE_UID NUMBER(19)
)
2)如果主键ID的值由用户自主获得SEQUENCE的值,然后赋值,实现方式可以如下:
SELECT YOUR_SEQ.NEXTVAL INTO MID_ID FROM DUAL; --MID_ID为变量 INSERT INTO TABLE(ID) VALUES(MID_ID);
补充:此种情况,可以有触发器,语句可能如下:
CREATE OR REPLACE TRIGGER C##WL.TR_BULLETIN BEFORE INSERT
ON C##WL.WL_BULLETIN
FOR EACH ROW
WHEN (
NEW.ID IS NULL OR NEW.ID = 0
)
BEGIN
SELECT WL_BULLETIN_SEQ.NEXTVAL INTO :NEW.ID FROM DUAL;
END;
/
当前插入的主键ID为空值或0时,获取对应SEQUENCE 的NEXTVAL值来赋值主键ID
Oracle 在函数或存储过程中执行一条插入语句并返回主键ID值的更多相关文章
- Oracle 在函数或存储过程中执行sql查询字符串并将结果值赋值给变量
请看黄色部分 --区县指标 THEN TVALUE_SQL := 'SELECT TO_CHAR(' || CUR_ROW.MAIN_FIELD || ') FROM ' || CUR_ROW.END ...
- C#中使用MySqlCommand执行插入语句后获取该数据主键id值的方法
.net中要连接mysql数据库,需要引用MySql.Data.dll文件,这文件在mysql官网上有下载. 接着通过MySqlCommand执行插入语句后想要获取该数据主键id值的方法如下: lon ...
- c#中执行多条sql语句【ORA-00911: 无效字符】
问题描述: 在plsql里执行多条sql语句的时候,使用“,”(逗号)分隔,测试可以执行多条,而在C#执行多条sql语句的时候[ORA-00911: 无效字符]. 有时我们需要一次性执行多条sql语句 ...
- MyBatis在Oracle中插入数据并返回主键的问题解决
引言: 在MyBatis中,希望在Oracle中插入数据之时,同一时候返回主键值,而非插入的条数... 环境:MyBatis 3.2 , Oracle. Spring 3.2 SQL Snipp ...
- [oracle] 如何使用myBatis在数据库中插入数据并返回主键
在MyBatis中,希望在Oracle中插入数据的同时返回主键值,而非插入的条数. ① oracle使用 selectKey. U_USER_INFO_SEQ 是在数据库中定义好的这张表关联的序列se ...
- SSM-MyBatis-12:Mybatis中添加单个对象返回主键id列
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 实体类 public class Book { private Integer bookID; private ...
- mybatis插入数据并返回主键(oracle)
通常我们执行一个inser语句,即使有返回,也只是会返回影响了多少条数据 @insert("insert into t_user (id,name) values (suser.nextva ...
- MyBatis-执行插入语句的时候返回主键ID到传入的参数对象中
<!-- 保存项目信息 --> <insert id="saveItem" parameterType="pd" useGeneratedKe ...
- mysql日期函数及批量循环返回主键ID
实际项目中总是会遇到各种时间计算查询等等许多时候是特别麻烦前阵子公司有个需求大致是要查询当前日期与数据库存储日期之差,本来写了个工具类调用的但是最后觉得这样不好就想着能不能用函数解决,没想到还真有这里 ...
随机推荐
- java.io.IOException No space left on device
磁盘空间不足 1.df -k,发现程序所在的工作目录/data,居然到了100%. 1604050 free allocated Kb 535144219 used allocated Kb 100 ...
- 【读书笔记】iOS-照相机与摄像头
一,增强现实 增强现实(AR)是一种实时地计算摄影机影像的位置及角度并加上相应图像的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动.这种技术估计由1990年提出.随着随身电子产品运算能 ...
- SD从零开始71 业务信息仓库(BW)
SD从零开始71 业务信息仓库(BW)概念 在线事务处理的环境OLTP Environment 在事务处理中,我们不断地填充用于跟踪我们的业务流程的数千个不同步骤的特定的表: 例如,销售凭证行条目来自 ...
- [20180316]为什么不使用INDEX FULL SCAN (MIN/MAX).txt
[20180316]为什么不使用INDEX FULL SCAN (MIN/MAX).txt --//链接:http://www.itpub.net/thread-2100456-1-1.html.自己 ...
- WebDriverTest
using OpenQA.Selenium.Firefox; using System; using System.Collections.Generic; using System.Linq; us ...
- HashMap探究
HashMap 前置 //初始化容量 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; //容器最大容量 static final i ...
- CentOS7.4下编译Hadoop-2.7.6
1. 使用系统和软件 操作系统:CentOS Linux release 7.4.1708 (Core) 64位 使用软件如下: jdk1.8.0_112.tar.gz hadoop-2.7.6-sr ...
- 八皇后问题的Python实现和C#实现
看到八皇后问题的解决思路, 感觉很喜欢. 我用C#实现的版本之前贴在了百度百科上(https://baike.baidu.com/item/%E5%85%AB%E7%9A%87%E5%90%8E%E9 ...
- Lua 与 C 交互值 函数调用(2)
@(语言) Lua和C 函数间的使用,都是通过栈来交互,并且基于遵守一定的规则,按照这个规则来就可以了. 1. 调用Lua函数 调用Lua方法过程 将被调用的函数入栈: 依次将所有参数入栈: 使用 l ...
- Alpha冲刺博客汇总(麻瓜制造者)
目录 Alpha冲刺报告 Github项目地址 测试报告与用户反馈博客地址 课程展示博客地址 事后诸葛亮 Alpha冲刺报告 Alpha冲刺报告(1/12)(麻瓜制造者) Alpha冲刺报告(2/12 ...