我的编程空间,编程开发者的网络收藏夹
学习永远不晚

DBMS_SQL 执行 PL/SQL 代码块示例

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

DBMS_SQL 执行 PL/SQL 代码块示例

DBMS_SQL 执行 PL/SQL 代码块示例

通常情况下,需要动态执行 PL/SQL 代码块尽量使用语法更简洁的 EXECUTE IMMEDIATE ...

但当绑定变量的数量甚至类型都可能变化时,还是需要使用更灵活的 DBMS_SQL 包,下面是使用 DBMS_SQL 执行 PL/SQL 代码块的示例:

-- SELECT * FROM Dba_Objects Do WHERE Do.Object_Name LIKE "EXEC_BLOCK_%";
DECLARE
  c_Function_Name CONSTANT VARCHAR2(30) := "EXEC_BLOCK_" ||
                                           To_Char(SYSDATE, "HH24MISS") ||
                                           "_TEST";
  l_c      INTEGER;
  l_Return NUMBER;
  l_s      VARCHAR2(2);
  l_d      DATE;
BEGIN
  -- 新建测试用的存储过程
  EXECUTE IMMEDIATE "CREATE FUNCTION " || c_Function_Name || "(p_n  IN NUMBER,
                                                  x_s  OUT VARCHAR2,
                                                  Px_d IN OUT DATE)
  RETURN NUMBER IS
BEGIN
  CASE
    WHEN p_n BETWEEN 1 AND 9 THEN
      x_s := p_n * 10 + p_n;
  END CASE;
  Px_d := Px_d + 1;
  RETURN To_Number(x_s || x_s);
END;";
  l_c := Dbms_Sql.Open_Cursor();
  -- 执行无输入输出代码块
  Dbms_Sql.Parse(l_c, "begin NULL; end;", Dbms_Sql.Native);
  Dbms_Output.Put_Line("EXECUTE: " || Dbms_Sql.Execute(l_c));
  -- 执行有输入输出的代码块
  Dbms_Sql.Parse(l_c"begin :x_return := " || c_Function_Name || "(:p_n, :x_s, :px_d); end;"Dbms_Sql.Native);
  Dbms_Sql.Bind_Variable(l_c, ":X_RETURN", 0); -- 输出参数,值可随意填写,仅用于确定类型
  Dbms_Sql.Bind_Variable(l_c, ":P_N", 3); -- 输入参数,填写要传入的值即可
  Dbms_Sql.Bind_Variable(l_c, ":X_S", "X", 2); -- 输出参数,值可随意填写,仅用于确定类型;不指定 VARCHAR2 长度时,默认为 1
  Dbms_Sql.Bind_Variable(l_c, ":PX_D", SYSDATE); -- 输入输出参数,填写要传入的值
  Dbms_Output.Put_Line("EXECUTE: " || Dbms_Sql.Execute(l_c));
  Dbms_Sql.Variable_Value(l_c, ":X_RETURN", l_Return); -- 输出参数,使用变量接收传出的值
  Dbms_Sql.Variable_Value(l_c, ":X_S", l_s); -- 输出参数,使用变量接收传出的值
  Dbms_Sql.Variable_Value(l_c, ":PX_D", l_d); -- 输入输出参数,使用变量接收传出的值
  Dbms_Output.Put_Line(l_Return);
  Dbms_Output.Put_Line(l_s);
  Dbms_Output.Put_Line(To_Char(l_d, "YYYY/MM/DD HH24:MI:SS"));
  Dbms_Sql.Close_Cursor(l_c);
  -- 删除测试用的存储过程
  EXECUTE IMMEDIATE "DROP FUNCTION " || c_Function_Name;
EXCEPTION
  WHEN OTHERS THEN
    EXECUTE IMMEDIATE "DROP FUNCTION " || c_Function_Name;
    Dbms_Output.Put_Line(Dbms_Utility.Format_Error_Backtrace || SQLERRM);
END;

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

DBMS_SQL 执行 PL/SQL 代码块示例

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

DBMS_SQL 执行 PL/SQL 代码块示例

通常情况下,需要动态执行 PL/SQL 代码块尽量使用语法更简洁的 EXECUTE IMMEDIATE ... 但当绑定变量的数量甚至类型都可能变化时,还是需要使用更灵活的 DBMS_SQL 包,下面是使用 DBMS_SQL 执行 PL/SQL 代码块的示例:
DBMS_SQL 执行 PL/SQL 代码块示例
2015-03-14

MyBatis特殊SQL的执行实例代码

这篇文章主要给大家介绍了关于MyBatis特殊SQL执行的相关资料,文中通过实例代码和图文介绍的非常详细,对大家学习或者使用MyBatis具有一定的参考学习价值,需要的朋友可以参考下
2023-01-30

Java 普通代码块静态代码块执行顺序(实例讲解)

如下所示:class B { public B() { super(); System.out.println("构造器B"); } { System.out.println("普通的代码块B"); } static{ System
2023-05-31

weblogic 远程代码执行漏洞的示例分析

本篇文章给大家分享的是有关weblogic 远程代码执行漏洞的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。0x00 漏洞概述今天,Oracle已经发布了季度补丁更新。
2023-06-19

java中静态代码块与构造方法执行顺序判断的示例分析

这篇文章将为大家详细讲解有关java中静态代码块与构造方法执行顺序判断的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。静态代码优先于非静态的代码,是因为被static修饰的成员都是类成员,会随着J
2023-05-30

SQL行列转置以及非常规的行列转置示例代码

目录一、准备工作二、行转列三、列转行四、特殊的列转行/行转列总结 一、准备工作# 创建数据表CREATE TABLE ChengJi(Name varchar(32),Subject varchar(32),Result in
SQL行列转置以及非常规的行列转置示例代码
2024-08-18

Kotlin构造函数、成员变量和init代码块执行顺序实例分析

本文小编为大家详细介绍“Kotlin构造函数、成员变量和init代码块执行顺序实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Kotlin构造函数、成员变量和init代码块执行顺序实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路
2023-07-04

Mybatis中注入执行sql查询、更新、新增及建表语句案例代码

这篇文章主要介绍了Mybatis中注入执行sql查询、更新、新增以及建表语句,主要说明一个另类的操作,注入sql,并使用mybatis执行,结合案例代码详解讲解,需要的朋友可以参考下
2023-02-13

Java多线程执行处理业务时间太久解决方法代码示例

背景:在政府开发了一个应用系统,主要功能是让企业填写企业资质信息,然后通过给定的公式,统计这一系列的信息,以得分的形式展示给政府领导查看。目前有1300家企业填报。由于得分是实时显示的,所以导致统计功能很慢。代码运行流程:1、查出1300企
2023-05-30

编程热搜

目录