在 Oracle 中调用另一个存储过程

2023-12-14

有谁知道一种方法,或者即使有可能,从另一个存储过程中调用存储过程?如果是这样,你会怎么做?

这是我的测试代码:

SET SERVEROUTPUT ON;

DROP PROCEDURE test_sp_1;
DROP PROCEDURE test_sp;

CREATE PROCEDURE test_sp
AS
BEGIN
    DBMS_OUTPUT.PUT_LINE('Test works');
END;
/

CREATE PROCEDURE test_sp_1
AS
BEGIN
    DBMS_OUTPUT.PUT_LINE('Testing');
    test_sp;
END;
/

CALL test_sp_1;

您的存储过程按编码工作。问题出在最后一行,它无法调用任何一个存储过程。

SQL*Plus 中的三个选择是:call, exec,以及一个匿名 PL/SQL 块。

call似乎是一个 SQL 关键字,并且记录在 SQL 参考中。http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG语法图表明即使没有参数传递给调用例程,也需要括号。

CALL test_sp_1();

匿名 PL/SQL 块是不在命名过程、函数、触发器等内部的 PL/SQL。它可用于调用您的过程。

BEGIN
    test_sp_1;
END;
/

Exec是一个 SQL*Plus 命令,是上述匿名块的快捷方式。EXEC <procedure_name>将被传递到数据库服务器BEGIN <procedure_name>; END;

完整示例:

SQL> SET SERVEROUTPUT ON
SQL> CREATE OR REPLACE PROCEDURE test_sp 
  2  AS 
  3  BEGIN 
  4      DBMS_OUTPUT.PUT_LINE('Test works'); 
  5  END;
  6  /

Procedure created.

SQL> CREATE OR REPLACE PROCEDURE test_sp_1 
  2  AS
  3  BEGIN
  4      DBMS_OUTPUT.PUT_LINE('Testing'); 
  5      test_sp; 
  6  END;
  7  /

Procedure created.

SQL> CALL test_sp_1();
Testing
Test works

Call completed.

SQL> exec test_sp_1
Testing
Test works

PL/SQL procedure successfully completed.

SQL> begin
  2      test_sp_1;
  3  end;
  4  /
Testing
Test works

PL/SQL procedure successfully completed.

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

在 Oracle 中调用另一个存储过程 的相关文章

随机推荐

  • Windows 上的 Qt 5.1.0 使用 minGW 4.8 需要很长时间来调试

    我已从 qt project 下载页面下载并安装了适用于 Windows 32 位 MinGW 4 8 的 Qt 5 1 0 我已经运行了安装程序 并且能够使用这些库和 minGW 4 8 32 位工具链来编译和运行应用程序 但是 我有一个
  • 为什么文件被放置在“C:\Users\<用户名>AppData\Local\VirtualStore\Program Files(x86)”中?

    我最近更新了我的视觉基本6 0应用程序 现在包含一个 exe manifest 文件以防止UAC虚拟化 应用此更新后 一些用户找不到他们的数据文件 AccessMDB 文件 经过系统搜索后 他们最终在C Users
  • 使用指针 C++ 实现双向链表

    我目前正在自学 C 并尝试使用部分完成的指针在 C 中实现双向链表 我知道代码当前无法处理悬空节点或输出错误 接下来我将实现这两 者 但是 代码至少应该能够构造一个列表对象并向其中添加元素 目前 当我尝试调用列表的构造函数时 出现错误 该错
  • 更新slot vuejs中的数据

    你好 我在 laravel 项目中使用 vuejs 这是我的 vuejs 代码 Vue component search and select template div div
  • 即使导出后,process.env 变量也未定义

    我正在编写一个 Node js Express 应用程序 并希望使用环境变量来设置服务器应运行的端口 但是 我似乎无法得到process env PORT阅读我的PORT环境变量 我已经使用定义了 PORT 环境变量export像这样 ex
  • 如何使用 Maven 插件从带有注释的现有实体生成 DDL?

    我有 Maven 项目 我想从现有实体生成 DDL 我怎样才能做到这一点 有没有可以生成 DDL 的 Maven 插件 我正在使用JPA 打开jpa openjpa maven plugin 插件提供了一个目标sql 使用此目标 可以从现有
  • 禁用 Windows 窗体上的所有事件

    有没有办法暂时禁用 Windows 窗体上的所有事件 我遇到的情况是 辅助线程上的处理被主线程上的事件破坏 主线程事件正在修改数据绑定到辅助线程使用的变量的控件的内容 寻找一种方法来 锁定 表单 直到辅助线程上的处理完成 显然 将处理移至主
  • 非规格化向量

    如何对已标准化的向量进行反标准化以获得标准化之前的原始值 例如 vec 0 5 1 0 0 0 vec length sqrt vec x 2 vec y 2 vec z 2 vec normalized vec x vec length
  • Visual Studio 设计时属性 - 表单列表下拉菜单

    编辑 需要明确的是 我知道如何通过反射获取表单列表 我更关心设计时属性网格 我有一个具有 Form 类型公共属性的用户控件 我希望能够在设计时从下拉列表中选择一个表单 我想从一组命名空间填充表单下拉列表 UI Foo Forms 如果您拥有
  • 如何从 Web 扩展弹出 JavaScript 中知道浏览器是 Chrome 还是 Firefox?

    我正在使用chromeChrome 和 Firefox 的命名空间 但想知道哪个浏览器正在运行网络扩展 扩展资源的链接在 Chrome 和 Firefox 中具有不同的方案 const isFirefox chrome runtime ge
  • 使用 float 格式说明符打印 int 变量

    int main int a 5 float b 7 5 printf d f n a b printf d f n a a return 0 当我在 gcc 编译器中编译它时 输出是 5 7 500000 5 7 500000 但是在 V
  • SQL Server中for循环的语法

    a 的语法是什么forSQL 中的循环 没有 for 循环 只有 while 循环 DECLARE i int 0 WHILE i lt 20 BEGIN SET i i 1 do some work END
  • HuggingFace 评估微调的零样本模型

    我正在微调 HuggingFacefacebook bart large mnli为了满足我的需要 我使用以下参数 training args TrainingArguments output dir model directory out
  • 使用深色透明度使标题栏和视图控制器无缝连接

    您好 我一直在互联网上查找并找到了有关此主题的各种有用信息 但似乎没有一个有效 if trying to get something like this 标题栏和窗口其余部分混合的地方 从互联网上得到的代码 iv 到目前为止在我的 view
  • 使用 php simplexml 显示 XML 数据

    我有一段 XML 如下
  • 如何更改 Chart.js 中使用的插值器?

    我一直在寻找一些有关图表库的替代方案 而符合我需求的方案是Chart js 但是 我无法使用它 因为 Chart js 中使用的插值器与 EJS 模板中使用的插值器相同Express like 我使用过其他一些库 例如下划线 js您可以在其
  • 我可以将 WCF DataContract 添加到复杂类型吗?

    我有一个复杂的数据类型 包括许多函数 以及常用的 get 和 get 方法 如果我可以使用 WCF 那么我的生活将会变得更加轻松 这样我的客户端也可以使用这种数据类型 Do I 忽略所有操作 将 DataMemeber 仅在需要的地方 将相
  • GDB 单步执行动态链接器(ld.so) 代码

    我想在我的正常使用中使用 ld so 的代码c代码 我正在尝试通过 GDB 中的代码流TUI当您单步执行代码时 您可以看到源代码和汇编代码 为此我还安装了libc dbg binutils source来自 ubuntu 包管理器的包 GD
  • 无法安装 Jekyll - “致命错误:找不到‘openssl/ssl.h’文件”

    我正在尝试在 Mac OS 上本地托管 Jekyll 站点 下载 Jekyll 后gem install jekyll我遇到了错误 current directory Users main rvm gems ruby 3 0 0 gems
  • 在 Oracle 中调用另一个存储过程

    有谁知道一种方法 或者即使有可能 从另一个存储过程中调用存储过程 如果是这样 你会怎么做 这是我的测试代码 SET SERVEROUTPUT ON DROP PROCEDURE test sp 1 DROP PROCEDURE test s