Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何插入oracle 10g数据库并返回使用存储过程生成的ID

如何插入oracle 10g数据库并返回使用存储过程生成的ID
EN

Stack Overflow用户
提问于 2016-04-13 20:33:09
回答 1查看 119关注 0票数 0

我对oracle的sql开发人员(因为我们已经研究过mysql)和编程非常陌生。我在这个网站上搜索了我的问题的答案,但我真的无法理解所提供的解决方案。

我想要的是返回在将对象从java插入数据库后生成的ID。我用的是霉霉和甲骨文10g数据库。我已经创建了表及其列。

这是我的地图代码

<insert id="addUser" parameterType="User" statementType="CALLABLE"> { CALL addUserSP( #{user.surname, javaType=String, jdbcType=VARCHAR, mode=IN}, #{user.firstName, javaType=String, jdbcType=VARCHAR, mode=IN}, #{userId, javaType=Integer, jdbcType=NUMBER, mode=OUT} )} </insert>

这是我的存储过程(我已经创建了一个名为“CREATEUSER”的包)

代码语言:javascript
运行
AI代码解释
复制
PROCEDURE ADDUSERSP
( surname IN VARCHAR2, 
  firstName IN VARCHAR2,
  userId OUT NUMBER
) AS

BEGIN

INSERT INTO users("surname", "first_name")
VALUES (surname, firstName);
RETURNING user_id INTO userId;

END ADDUSERSP;

根据我在这里发现的,我似乎需要创建一个触发器(?)以及序列(?)每当我将新数据添加到表中时,user_id自动递增。但是,我不知道该怎么做。

以下是我的问题:我的存储过程正确吗?密码不完整吗?我的意思是,我还没有在映射器中声明包,我已经看到它是必需的(?),类似于这个{ CALL [CreateUser].[addUserSP]( blah blah...。我应该编写一个序列并触发,还是有一种简单的方法可以使主键user_id自动递增?请也检查一下语法。我在语法上有很多问题。

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-13 20:50:14

为了模仿甲骨文中的MySQL AUTO_INCREMENT,该模式(如您所发现)确实使用了一个序列对象和一个前置插入触发器。

作为演示,对sequence对象如下所示:

代码语言:javascript
运行
AI代码解释
复制
CREATE SEQUENCE myseq START WITH 1 INCREMENT BY 1 ;

对于前置插入触发器,如下所示:

代码语言:javascript
运行
AI代码解释
复制
CREATE TRIGGER users_bi
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
   IF :NEW.id IS NULL THEN
      SELECT myseq.NEXTVAL INTO :NEW.id FROM DUAL;
   END IF;
END

就过程而言,我不太喜欢包装SQL INSERT语句的额外PL/SQL块。

看来你在回来之前有一个额外的分号。该子句是INSERT语句的一部分,而不是单独的语句。

需要注意的一个大问题是PL/SQL块中的SQL语句可以同时引用列和PL/SQL变量。当变量具有与列相同的名称时,您可能会遇到意想不到的行为。

通常,PL/SQL对变量使用命名约定,以减少名称冲突的可能性。我们经常看到名为v_surname的变量。(就我个人而言,我使用的约定略有不同,但是变量名“看起来像”变量名,而不是列引用。并且我没有按照变量使用的模式命名列。)

标识符周围的双引号是可以接受的,但这确实使标识符区分大小写。当标识符不包含在双引号中时,Oracle将它们视为大写。只需确保您的表定义了小写列名。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36613948

复制
相关文章
性能测试调研:测试的目的是什么?
测试背景,是新系统还是旧系统改造,评估测试重点,新系统预估可能的性能瓶颈在哪里,旧系统有哪些历史性能问题,旧系统本次进行了哪些改造等。
互扯程序
2020/02/11
1.4K0
cdn测试是什么?Cdn测试的目的有哪些
很多大型网站都会利用加速技术来为用户访问提供更好的服务,但加速技术通常在搭建完成后需要对其进行系统的测试,确保其功能的正常,那么cdn测试是什么?Cdn测试的目的又有哪些呢?
用户8715145
2021/09/18
3.3K0
cdn测试是什么?Cdn测试的目的有哪些
渗透测试的目的是什么?有哪些测试技巧?
说到渗透测试,可能很多人对渗透测试并没有很好的了解,毕竟渗透测试根本就没有标准的定义,按照国外一些安全组织达成的共识来说的话,渗透测试就是通过模拟恶意黑客的常用攻击方法,来对计算机网络系统安全做一下评估,这个只是一种对系统安全的评估方法。那么渗透测试的目的是什么?有哪些测试技巧?
用户8739405
2021/07/09
3.3K0
工作流组件示例(全部开源)
1.概述 1.1简介 本文档旨在帮助开发人员快速使用工作流组件,完成OA或审批等涉及到工作流组件的系统开发工作 1.2组件构成 1.2.1组件层次图 组件的核心是工作流引擎,它负责存储工作流模板.
用户1219352
2018/02/01
3.1K0
工作流组件示例(全部开源)
大数据项目测试<二>项目的测试工作
 后端的测试重点,主要集中在数据的采集处理、标签计算效率、异常数据排查(功能),测试脚本编写(HiveQL)、自动化脚本编写(造数据、数据字段检查等)
互联网金融打杂
2019/01/24
8970
大数据项目测试<二>项目的测试工作
vue 递归组件使用示例
前文 我们需要做一个树形组件用来展示一些无限子级的数据时就要用到vue提供的递归组件 首页了解一下 vue 中 name属性 为什么 export 有name这个属性 name 类型:string 限制:只有作为组件选项时起作用。 详细: 允许组件模板递归地调用自身。 注意,组件在全局用 Vue.component() 注册时,全局 ID 自动作为组件的 name。 指定 name 选项的另一个好处是便于调试。有名字的组件有更友好的警告信息。另外,当在有 vue-devtools,未命名组
yangdongnan
2019/04/27
2K0
软件测试|测试金字塔是什么,它的目的是什么,以及它包含哪些层次?
测试金字塔是2009年Mike Cohn在他的著作《Succeeding with Agile》一书正式提出的。他是一个类比的概念,形容每一层,或者说不同集成阶段测试覆盖率和知行效率之间的一个相对关系。
霍格沃兹测试开发Muller老师
2023/03/31
1.4K0
如何测试云服务器?测试云服务器的目的是什么?
很多人在申请了云服务器后,都会在使用前利用专门的测试软件对云服务器的性能进行测试,但对于网络专业知识较为薄弱的用户来说,往往很难理解为什么要做这样的事情。那么如何测试云服务器?测试云服务器的目的是什么呢?
用户8715145
2021/08/27
10.9K0
翻译 | 使用A-Frame打造WebVR版《我的世界》
本文介绍了如何在 VR/AR 项目中使用 A-Frame 构建交互式场景,并分享了如何添加体素、创建自定义组件、集成 WebVR 等功能。同时,还介绍了一种基于注视点的光标控制方法,以及如何使用 A-Frame 组件将场景导出为 WebVR 格式。
iKcamp
2018/01/04
2.9K0
翻译 | 使用A-Frame打造WebVR版《我的世界》
是什么让测试工作如此辛苦?
大家好,我是测试君,下面来分享一篇文章《是什么让测试工作如此辛苦?》,希望此文能够让你有所收获,当然也希望能够结识一些在测试路上能够一起前行的朋友。
软件测试君
2019/12/05
5000
是什么让测试工作如此辛苦?
接口测试目的
3.有些参数是必填项, 有些参数是选填项, 如果必填项不填或者填错,会有什么结果都是需要考虑的
louiezhou001
2019/07/25
5900
资讯项 -组件封装
1.效果图 2.代码 <template> <view class="p-20"> <!-- 头像 --> <view class="flex align-center justify-between"> <view class="flex align-center justify-start"> <image class="border-radius-100" :src="item.userPic" st
名字是乱打的
2022/11/06
9360
资讯项    -组件封装
阿常:软件测试的目的
如果测试的目的是为了找bug,那么测试工作将变成一项无法完成,也无法衡量进度,而且部分无效的工作。
程序媛淼淼
2022/09/01
4050
synchronized关键字的工作原理以及使用示例
当我们谈论Java的线程安全时,synchronized关键字是一个重要的概念。它可以用于修饰方法或代码块,以确保线程安全。
一凡sir
2023/08/23
2530
synchronized关键字的工作原理以及使用示例
你学习的目的到底是什么?
上学时我们学习的目的基本上就是为了考试,大考、小考、模拟考,最后一考终极考—高考。
六小登登
2019/01/28
5840
React篇(053)-构造函数使用带 props 参数的目的是什么?
在调用super()方法之前,子类构造函数不能使用this引用。这同样适用于ES6子类。将props参数传递给super()的主要原因是为了在子构造函数中访问this.props。
齐丶先丶森
2022/12/05
1.4K0
使用导航组件: 对话框目的地 | MAD Skills
这是一个新的系列文章,我们称之为 "Modern Android Development 技巧",简称为 "MAD Skills"。本系列文章致力于帮助开发者们打造更好的现代 Android 开发体验,敬请关注。
Android 开发者
2021/02/23
1.4K0
使用LangChain和Qdrant进行无样板代码的问答
在人工智能兴起的当下,AI正在不断地重塑着每一个行业,而我也在不断地探索中。本文又将是一篇AI应用的干货,类似的文章之前也有过几篇,大家可以结合着来看:
山行AI
2023/08/10
1.1K0
使用LangChain和Qdrant进行无样板代码的问答
项目成员为什么觉得项目的工作不是他的工作 ?
首先根本原因是人家不会永远是项目的人,项目的临时性,这点没办法改变。所以没有归属感,也没办法改变。
PM吃瓜
2023/03/02
5070
项目成员为什么觉得项目的工作不是他的工作 ?
点击加载更多

相似问题

如何测试使用useQuery的组件的示例?

15

主干网.基于组件的大型web项目的web样板

23

测试Python项目的示例目录

24

编写A-Frame的测试规范

11

在此示例中使用空返回的目的是什么?

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档