从存储过程获取输出参数而不调用execute()

2023-12-30

我想通过实体管理器从 Java 程序中调用 PL/SQL 存储过程:

StoredProcedureQuery storedProcedureQuery = entityManager.createStoredProcedureQuery("someProcedure");

现在我的理解是,我必须在此storedProcedureQuery 上调用execute() 才能执行该过程并能够检索OUT 参数。但是,我可以检索这些值without通过简单地调用来调用execute()方法

someValue1 = (Integer)storedProcedureQuery.getOutputParameterValue(1);
someValue2 = (Integer)storedProcedureQuery.getOutputParameterValue(2);

这怎么可能 ?这段代码片段中的存储过程到底什么时候执行?是否会执行程序everygetOutputParameterValue() 被调用的时间?对于这种行为有任何官方文档吗?


我是他所在领域的新手,和你一样对这个问题感到好奇。不过我借此机会对其进行了测试,以下是我的观察结果,

According to the documentation execute() returns:
> Return true if the first result corresponds to a result set,
> and false if it is an update count or if there are no results
> other than through IN OUT and OUT parameters, if any.

因此我想说,返回的 true 或 false 并不意味着执行成功或失败。

同样,我们必须在调用之前注册参数getOutputParameterValue。如果我们研究一下执行情况getOutputParameterValue,我们将能够准确找到 hibernate 提供程序(在我的例子中是 JPA)调用实际执行的位置。

除了执行发生了多少次之外,我还通过插入调用过程内的另一个表来检查它的方式进行了测试。

create table test_procedure_call(msg varchar2(100));

CREATE OR REPLACE PROCEDURE test (
    p_in_1  IN    NUMBER,
    p_out_1 OUT   VARCHAR2,
    p_out_2 OUT   VARCHAR2
) AS
BEGIN
    insert into test_procedure_call values ('Executed..');
    commit;
    select 'FirstName'||' '||'LastName','HR' into p_out_1,p_out_2 
      from dual 
     where p_in_1=1;
END;
/

@Test
    public void testStoredProcedureQuery() {
        StoredProcedureQuery sp = em.createStoredProcedureQuery("test");
        // set parameters
        sp.registerStoredProcedureParameter("p_in_1", Integer.class, ParameterMode.IN);
        sp.registerStoredProcedureParameter("p_out_1", String.class, ParameterMode.OUT);
        sp.registerStoredProcedureParameter("p_out_2", String.class, ParameterMode.OUT);
        sp.setParameter("p_in_1", 1);

        String name = sp.getOutputParameterValue("p_out_1").toString();
        String dept = sp.getOutputParameterValue("p_out_2").toString();

        System.out.println("Name : " + name);
        System.out.println("Department : " + dept);
    }

select * from test_procedure_call;

MSG                                                                                                 
----------------------------------------------------------------------------------------
Executed..

通过表 test_procedure_call,我们可以确认它每次测试只执行一次。 (正如我们在上面的例子中看到的)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从存储过程获取输出参数而不调用execute() 的相关文章

  • 如何将所有父母的父母作为循环引用表中子对象的列?

    我有一个表格 其中有类似的列 entityID entityName parentID 我如何编写一个查询来返回实体的所有父级级别 以返回类似的内容 childentityname parentlevel1name parentlevel2
  • Android 自定义视图不能以正确的方式处理透明度/alpha

    我正在绘制自定义视图 在此视图中 我使用两个不同的绘画和路径对象在画布上绘画 我基本上是在绘制两个重叠的形状 添加 Alpha 后 视图中重叠的部分比图像的其余部分更暗 这是不希望的 但我不知道如何解决它 这是我的代码片段 用于展示我如何在
  • 从表中选择行,其中另一个表中具有相同 id 的行在另一列中具有特定值

    在 MySQL 中 如果我们有两个表 comments key value 1 foo 2 bar 3 foobar 4 barfoo and meta comment key value 1 1 2 1 3 2 4 1 我想得到来自以下人
  • 如何在 JSP 中导入类?

    我是一个完全的JSP初学者 我正在尝试使用java util List在 JSP 页面中 我需要做什么才能使用除以下类之外的类java lang 使用以下导入语句进行导入java util List 顺便说一句 要导入多个类 请使用以下格式
  • 如何在 SQL Server 2012 中选择除一列之外的所有列? [复制]

    这个问题在这里已经有答案了 有没有一种方法可以选择所有列 但只选择我不想选择的特定列 我的意思是有时我会遇到这样的问题 表有数百个字段 而我只需要删除一个字段 我需要重写所有列吗 有什么窍门吗 喜欢select
  • Java套接字:在连接被拒绝异常时重试的最佳方法?

    现在我正在这样做 while true try SocketAddress sockaddr new InetSocketAddress ivDestIP ivDestPort downloadSock new Socket downloa
  • 在 HTTP 标头中发送 UTF-8 值会导致 Mojibake

    我想使用 servlet 发送阿拉伯语数据HTTPServletResponse给客户 我正在尝试这个 response setCharacterEncoding UTF 8 response setHeader Info arabicWo
  • 无法在 Spring Boot 测试中模拟 persistenceContext

    我正在使用带有 Mockito 框架的 spring boot 测试来测试我的应用程序 存储库类 EntityManager 之一作为参考 我的班级如下所示 Repository Transactional Slf4j public cla
  • 基本的多对多sql选择查询

    我认为这应该很容易 但它却在逃避我 我的帐户和帐户组之间存在多对多关系 一个帐户可以位于零个或多个组中 因此我使用标准连接表 Accounts ID BankName AcctNumber Balance AccountGroups ID
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • 计算日期之间的天数差异

    在我的代码中 日期之间的差异是错误的 因为它应该是 38 天而不是 8 天 我该如何修复 package random04diferencadata import java text ParseException import java t
  • Spring Security OAuth2简单配置

    我有一个简单的项目 需要以下简单的配置 我有一个 密码 grant type 这意味着我可以提交用户名 密码 用户在登录表单中输入 并在成功时获得 access token 有了该 access token 我就可以请求 API 并获取用户
  • 重用 t-sql 游标的起始位置?

    我正在开发一个在临时表上使用游标的存储过程 我已经阅读了一些关于为什么不需要游标的内容 但在这种情况下我相信我仍然需要使用游标 在我的过程中 我需要遍历表的行两次 声明游标后 已经单步执行临时表并关闭游标 重新打开时游标的位置是否仍保留在表
  • Android Studio 将音乐文件读取为文本文件,如何恢复它?

    gameAlert mp3是我的声音文件 运行应用程序时 它询问我该文件不与任何文件类型关联 请定义关联 我选择TextFile错误地 现在我的音乐文件被读取为文本文件 我如何将其转换回music file protected void o
  • 为什么java中的for-each循环中需要声明变量

    for 每个循环的通常形式是这样的 for Foo bar bars bar doThings 但如果我想保留 bar 直到循环结束 我可以not使用 foreach 循环 Foo bar null Syntax error on toke
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • 如何从 Laravel 执行存储过程

    我需要在表单提交数据后执行存储过程 我让存储过程按照我想要的方式工作 并且我的表单正常工作 我只是不知道从 laravel 5 执行 sp 的语句 它应该是这样的 执行 my stored procedure 但我似乎在网上找不到类似的东西
  • Hibernate 和可序列化实体

    有谁知道是否有一个框架能够从实体类中剥离 Hibernate 集合以使它们可序列化 我查看了 BeanLib 但它似乎只进行实体的深层复制 而不允许我为实体类中的集合类型指定实现映射 BeanLib 目前不适用于 Hibernate 3 5
  • 嵌入式 Jetty - 以编程方式添加基于表单的身份验证

    有没有一种方法可以按如下方式以编程方式添加基于表单的身份验证 我用的是我自己的LdapLoginModule 最初我使用基本身份验证并且工作正常 但现在我想在登录页面上进行更多控制 例如显示徽标等 有没有好的样品 我正在使用嵌入式 jett
  • 启动Java项目时发生类冲突:ClassMetadataReadingVisitor将接口org.springframework.asm.ClassVisitor作为超类

    我正在使用最新的Spring框架版本 3 2 2 RELEASE 开发一个Java Web项目 但是现在项目启动时遇到了问题 详细错误是 java lang IncompleteClassChangeError 类 org springfr

随机推荐

  • java swing 单选按钮 - java.lang.NullPointerException

    我正在尝试掌握 java swing 并正在测试单选按钮 我的代码是 import java awt import javax swing import javax swing ButtonGroup public class Scafho
  • 如何让 Rails 根据 headers 响应 json

    我正在使用 Rails 4 构建一个 API 并在我的控制器中使用respond to来区分html and json请求一切正常 在 Postman 中测试我的 API 时 我添加了以下标头 Content Type applicatio
  • Powershell 相当于 F# Seq.forall

    我写了这个 有效 function ForAll BEGIN allTrue true PROCESS if lt 1 allTrue false END allTrue aList 0 4 bList 1 4 aList ForAll r
  • UWP 检查当前页面的名称或实例

    在我的 UWP 应用程序中 我从协议或 toast 启动 在 onactivated 方法中 我想检查应用程序的主视图是否打开或正在显示哪个页面 全部来自 App xaml cs 我想做这样的事情 If Mainpage is not sh
  • JFreeChart:鼠标单击获取数据源值

    我有一个显示进程内存状态的 JFreeChart 实例 初始化如下 m data new TimeSeriesCollection TimeSeries vmsize new TimeSeries VMSize TimeSeries res
  • java.security.InvalidKeyException:密钥长度不是 128/192/256 位

    我是 Java 新手 尝试使用混合加密 使用 AES 128 对称加密 然后对生成的对称密钥使用 RSA 1024 非对称加密 有人可以帮助我为什么会收到此异常吗 我已经关注了其他帖子 并在相应的文件夹中下载了 Java 加密扩展 JCE
  • R图上的纸张边框

    不确定 R 的plot ly 函数是否具有此功能 我还没有找到它 但我想我会问 Plot ly 确实有一个 paper bgcolor 参数 可以更改绘图所在纸张的颜色 如下所示 mydf data frame x 1 5 y 1 5 pl
  • 没有意图过滤器的 Android BroadcastReceiver

    我在一些 Android 广告网络 sdks 中看到他们声明BroadcastReceiver没有意图过滤器 像这样的事情
  • 从容器连接到主机服务的示例

    我是 Docker 和无人机编程的新手 我能够将 python 脚本 包含 Dronekit 代码 部署到 Windows 10 上的 docker 容器 要运行该脚本 我需要连接到主机上的服务 我在下面提供了一个片段 Windows 有一
  • android:无法制作多线芯片组

    我在相对布局中有一个芯片组以及一个文本视图 其代码如下所示
  • 使用 C++ 静态控制背景颜色

    我正在使用 Windows API 创建一个基本的 GUI 但遇到了一个问题 它从一个主窗口开始 该窗口以我设置的自定义背景颜色打开 RGB 230 230 230 然后 它使用静态控件在左上角显示文本 settingstext Creat
  • 如何在 Windows 上挂载 docker 套接字?

    我正在尝试使一个仅在 Unices 上开发的应用程序在 Windows 上运行 它全部是 dockerized 的 并且使用 traefik 负载均衡器 用于运行 traefik 的 docker 的卷如下所示 volumes var ru
  • Photoshop 沿 y 轴移动图层

    我正在编写一个脚本 该脚本将向右 向左 向上或向下移动图层 这取决于图层的哪个边缘位于画布内 我已经设法使用bounds 0 和bounds 2 使图层左右移动 x轴 但是当我尝试让它向上或向下移动时 它仍然向左 向右移动 难道是我的边界数
  • PHP Zend Route Config.ini - 类似模式

    我正在使用配置文件在我的应用程序中路由我的请求 我有以下条目 路线 deal route deal id 路线 deal defaults controller 交易 路线 deal defaults action 索引 路线 deal r
  • Azure - 在 Powershell 中断开 VNet 集成

    通过 Azure 门户 我可以断开 VNet 集成 如下所示 我需要使用 Az 模块在 Powershell 脚本中执行此操作 这可能吗 只需使用下面的命令 它在我这边工作得很好 Remove AzResource ResourceGrou
  • axios 不发送参数的 POST 请求

    我正在尝试使用以下代码将一些数据从 Vue js 发布到基于 Symfony 的后端 updateQuestion function axios post staff question api this id id test name sr
  • IOError:[Errno 2]没有这样的文件或目录[重复]

    这个问题在这里已经有答案了 我在尝试对文件夹中的许多文件运行迭代时遇到问题 这些文件存在 如果我从文件打印文件 我可以看到它们的名称 我对编程很陌生 你能帮我一下吗 亲切的问候 import os for path dirs files i
  • 如何设置 javapns(iOS 推送通知)?

    我查看了 javapns 的文档 wiki http code google com p javapns http code google com p javapns 不幸的是 本应显而易见的事情对我来说却并非如此 如何设置有效的推送通知服
  • ‘(’ 标记之前预期的构造函数、析构函数或类型转换

    编译polygone h and polygone cc给出错误 polygone cc 5 19 error expected constructor destructor or type conversion before token
  • 从存储过程获取输出参数而不调用execute()

    我想通过实体管理器从 Java 程序中调用 PL SQL 存储过程 StoredProcedureQuery storedProcedureQuery entityManager createStoredProcedureQuery som