草庐IT

Oracle存储过程的几种调用方式

zhangbeizhen18 2023-12-26 原文

记录:284

场景:Oracle存储过程调用方式,包括PL/SQL的SQL窗口中调用、在PL/SQL的命令窗口、在Procedures菜单列表中选中存储过程名称右键点击测试、在Package Bodies菜单列表中选中存储过程名称右键点击测试、在Jobs菜单列表选中已经配置Job的存储过程右键中点击运行、Java代码调用存储过程。

版本:Oracle Database 11g

工具:PL/SQL Developer

一、案例场景

1.基础环境

本例环境,使用Packages和Packages bodies管理存储过程Procedure。

Packages和Packages bodies名称:PKG_ZBZ_PORTAL

Procedure名称:PRO_INSERT_INFO_ARGS

完整SQL:

--包定义
CREATE OR REPLACE PACKAGE PKG_ZBZ_PORTAL IS
  PROCEDURE PRO_INSERT_INFO_ARGS(IN_DATE IN VARCHAR2 := NULL,
        FLAG OUT NUMBER,
        FAIL_INFO OUT VARCHAR2);
END PKG_ZBZ_PORTAL;
--包体
CREATE OR REPLACE PACKAGE BODY PKG_ZBZ_PORTAL IS
  PROCEDURE PRO_INSERT_INFO_ARGS(IN_DATE   IN VARCHAR2 := NULL,
        FLAG  OUT NUMBER,
        FAIL_INFO OUT VARCHAR2) IS
  BEGIN
    DECLARE
      V_DATE DATE := TRUNC(SYSDATE - 1);
    BEGIN
      FLAG      := 1;
      FAIL_INFO := '';
      IF (IN_DATE IS NOT NULL) THEN
        V_DATE := TO_DATE(IN_DATE, 'YYYYMMDD');
      END IF;
      INSERT INTO B_LOG_INFO
        SELECT SEQ_DEMO_ID.NEXTVAL,V_DATE,
               SYSDATE,'1','执行成功',50,'DUAL'
          FROM DUAL;
      COMMIT;
    EXCEPTION
      WHEN OTHERS THEN
        FLAG      := 0;
        FAIL_INFO := '此次执行: ' || IN_DATE || ' 输出结果: FLAG = ' || FLAG ||
                     '异常信息:  ' || SQLERRM;
        ROLLBACK;
    END;
  END PRO_INSERT_INFO_ARGS;
END PKG_ZBZ_PORTAL;

注意以下测试,存储过程或者包都必须编译通过,即如下。

 2.SQL窗口中调用存储过程

在PL/SQL Developer工具,菜单路径依次:文件->新建->SQL 窗口,即可以进入SQL窗口中。

场景:在存储过程提交后,直接在SQL 窗口执行,调用存储过程验证和测试存储过程。

DECLARE
FLAG NUMBER;
FAIL_INFO VARCHAR2(512);
BEGIN
  PKG_ZBZ_PORTAL.PRO_INSERT_INFO_ARGS( '20220710',
        FLAG,FAIL_INFO);
  dbms_output.put_line('FLAG=' || FLAG); 
  dbms_output.put_line('FAIL_INFO=' || FAIL_INFO); 
END;

3.命令窗口中调用存储过程

在PL/SQL Developer工具,菜单路径依次:文件->新建->命令窗口,即可以进入命令窗口中。

场景:在存储过程提交后,直接在命令窗口执行,调用存储过程验证和测试存储过程。

var FLAG NUMBER;
var FAIL_INFO VARCHAR2(512);
exec PKG_ZBZ_PORTAL.PRO_INSERT_INFO_ARGS( '20220710',:FLAG,:FAIL_INFO);

4.Procedures菜单列表中调用存储过程

在PL/SQL Developer工具,在左侧对象导航窗口,菜单路径依次:Users->用户名称->Objects->Procedures,选中需要测试的存储过程,右键选中,点击测试,即进入测试窗口,根据需求填写参数(如果有入参)。注意,能出现测试菜单前提是存储过程必须先编译提交。

场景:在存储过程提交后,直接在Procedures菜单列表中选中存储过程,调用存储过程验证和测试存储过程。

 5.Package或Package Bodies菜单列表中调用存储过程

在PL/SQL Developer工具,在左侧对象导航窗口,菜单路径依次:Users->用户名称->Objects->Package或Package Bodies,选中需要测试的存储过程,右键选中,点击测试,即进入测试窗口,根据需求填写参数(如果有入参)。注意,能出现测试菜单前提是存储过程必须先编译提交。

场景:在存储过程提交后,直接在Package或Package Bodies菜单列表中选中存储过程,调用存储过程验证和测试存储过程。

5.1 右键包名称,选择菜单:查看说明与体。即进入包里存储过程。

 5.2 右键存储过程名称,选择测试,即进入测试窗口。

 6.Jobs菜单列表调用存储过程

在PL/SQL Developer工具,在左侧对象导航窗口,菜单路径依次:Users->用户名称->Objects->Jobs,选中需要运行的job任务,右键选中,点击运行。

场景:在存储过程提交后,直接在Jobs菜单列表中选中存储过程,调用存储过程验证和测试存储过程。

7.Java代码中调用存储过程

本例引用:https://blog.csdn.net/zhangbeizhen18/article/details/100127703

场景:

使用Java代码调用oracle的存储过程,本例使用JdbcTemplate模板类操作.

以上,感谢。

2022年7月12日

有关Oracle存储过程的几种调用方式的更多相关文章

  1. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  4. ruby-on-rails - 正确的 Rails 2.1 做事方式 - 2

    question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参

  5. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  6. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  7. ruby - 调用其他方法的 TDD 方法的正确方法 - 2

    我需要一些关于TDD概念的帮助。假设我有以下代码defexecute(command)casecommandwhen"c"create_new_characterwhen"i"display_inventoryendenddefcreate_new_character#dostufftocreatenewcharacterenddefdisplay_inventory#dostufftodisplayinventoryend现在我不确定要为什么编写单元测试。如果我为execute方法编写单元测试,那不是几乎涵盖了我对create_new_character和display_invent

  8. ruby - Rack:如何将 URL 存储为变量? - 2

    我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.

  9. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  10. C51单片机——实现用独立按键控制LED亮灭(调用函数篇) - 2

    说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时

随机推荐