模块化代码有哪些好的实践?

2024-04-08

在 PL-SQL 中,有一些奇特的新概念,比如表函数、对象,可能还有其他我还没有发现的概念。

但话又说回来,还有简单的代码生成(动态 pl-sql),您可以“立即执行”。

这些可以帮助代码重用。

据我所知,表函数和对象可以帮助创建模块化代码,但仍然不足以删除整个代码(也许我没有使用其中最好的;我必须承认我的对象目前只包含数据,并且没有逻辑)。

另一方面,代码生成更加简单,并且可以更多地减少重复代码。但很难理解代码生成逻辑背后的实际业务。

我想要模块化且不重复的代码。我应该坚持使用纯代码生成吗?各自有哪些优点和缺点?


动态 SQL 通常比高级 PL/SQL 功能(例如表函数、对象关系类型、数据盒、ANY* 类型等)更好。通过一些简单的技巧,您可以避免动态 SQL 的陷阱并使用它来创建模块化系统。

高级 PL/SQL 功能很酷,在某些时候您至少必须使用它们。它们非常适合解决奇怪的具体问题。但您几乎肯定会后悔创建一个以这些功能之一为中心的 Oracle 系统。我已经在上述每个 PL/SQL 功能上浪费了数周或数月的时间。

动态SQL

Pro- 它总是有效。可能会很痛苦,但是有always一种使其在 SQL 中工作并使其运行速度更快的方法。

Con- 阅读和写作有点困难。

高级 PL/SQL

Pro- 很酷的功能,优雅的代码,可以完美解决某些问题。

Con- 会在关键时刻让你失望。

如果不写一本小说,就很难给出高级 PL/SQL 失败的例子。这些故事通常是这样的:“我们结合了功能 A、B、C……我们遇到了错误 X、Y、Z……每个人都很生气……我们花了一个月的时间重新编写它。”


动态 SQL 不一定那么糟糕。这只是需要一些纪律。

  1. 良好的格式化和检测。确保动态 SQL 看起来很漂亮并且可以轻松打印出来进行调试。遵循良好的编程习惯 - 缩进、添加注释、使用有意义的名称等。当 IDE 上的“美化器”按钮没有帮助时,点击式程序员会感到震惊。不要让任何人逃脱草率的代码 - 仅仅因为它在技术上是一个字符串,不应该允许任何人避免常见的样式规则。

  2. 替代报价机制。使用q语法以避免不断地转义事物。例如,q'[I'll use single quotes if I want to!]'代替'I''ll use single quotes if I want to!'.

  3. 模板而不是串联。在不间断的块中编写代码,然后替换动态部分。将其与q字符串以避免代码中一百万个引号和管道。例如:

    v_dynamic_sql_template constant varchar2(32767) :=
    q'[
        select a, b, $DYNAMIC_SELECT_LIST$
        from table1
        $DYNAMIC_JOIN_1$
        where table1.a > 1
            $DYNAMIC_WHERE_1$
    ]';
    
    ...
    
    v_dyanmic_sql := replace(v_dynamic_sql_template, '$DYNAMIC_SELECT_LIST$', v_variable);
    
    ...
    

(在这个问题中,我假设您是中级或高级 Oracle 开发人员。如果您是初学者,答案可能是静态 SQL 语句,但您还没有 已经看到足够多的 SQL 特性来认识到这一点。)

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

模块化代码有哪些好的实践? 的相关文章

  • 更新/删除不存在的行时出现 PL/SQL 异常

    我这些天正在学习 PL SQL 目前正在使用 oracle HR 模式处理过程和异常 这是我的简单过程 create or replace PROCEDURE DEL JOB p jobid jobs job id TYPE AS sqle
  • ORACLE SDO_GEOMETRY ToString()?

    我正在编写一个 Net 系统 它需要能够从数据库中检索 Oracle 几何字段 我的 SQL 语句中是否有任何方法可以将几何类型转换为字符串 以便我可以在 Net 端处理它 目前我无法取出数据 因为它不是放入 OLEDB 读取器的有效数据类
  • 具有 GIT 支持的 PL/SQL IDE

    我目前正在为我的公司开发 PL SQL 存储过程 我想使用代码修订控制系统来跟踪我和其他开发人员所做的更改 我喜欢 GIT 的所有优点 包括分布式 scm 功能 有没有支持GIT的PL SQL开发IDE 目前 我正在使用 JDevelope
  • 您能帮我在 Oracle 中编写一个过程,将数据从表假脱机到 CSV 文件吗?

    我正在编写一个过程来使用 Oracle 表中的数据创建 CSV 文件 我用了 spool filename 但错误来了 我可以用吗spool在 PL SQL 中 我认为在 Oracle 10g 11g 上有更好的方法来实现这一点 但这在 O
  • PLSQL 错误 - ORA-00984:此处不允许列

    我写了一个 PL SQL 块 DECLARE SchemaName VARCHAR2 50 REQ SUNIL 5750 userpassword VARCHAR2 50 XYZ stmt VARCHAR2 5000 BEGIN stmt
  • 具有两列的 LISTAGG 函数

    我有一张这样的桌子 报告 user id Department Position Record id 1 Science Professor 1001 1 Maths 1002 1 History Teacher 1003 2 Scienc
  • Oracle:指定对象类型列的默认值

    我有一个带有无参数构造函数的对象类型 但是当我将其指定为该类型的列的默认值时 我收到 ORA 00904 无效标识符错误 Example CREATE OR REPLACE TYPE test t AS OBJECT val NUMBER
  • 在 PL/SQL 存储过程中拆分逗号分隔的字符串

    我有 CSV 字符串 100 01 200 02 300 03 我需要将其传递给 Oracle 中的 PL SQL 存储过程 在过程中 我需要将这些值插入表中的数字列中 为此 我从这里得到了一个工作方法 如何在 oracle 9i 中最好地
  • 为分组依据字段创建索引?

    Oracle数据库中需要为group by字段创建索引吗 例如 select from some table where field one is not null and field two group by field three fi
  • 突出显示两个字符串之间的差异

    如果我有两个较长的字符串 VARCHAR2 是否有一种简单的方法或算法可以复制或移植到 PL SQL 来比较它们 插入标记 即 以便在网页中呈现时 差异将突出显示 例如 BEGIN DBMS OUTPUT put line markup d
  • 所有行值在一列中

    我想在一列中显示所有值 我可以怎样做呢 数据如下 user id degree fi degree en degree sv 3601464 3700 1600 2200 1020 100 0 0 3600520 100 1300 1400
  • Oracle PL/SQL:从字符串中删除“空格字符”

    在我的 Oracle 10g 数据库中 我想从表字段的值中删除 空格字符 空格 制表符 回车符 Is TRANSLATE 该怎么走 例如 MY VALUE TRANSLATE MY VALUE CHR 9 CHR 10 CHR 11 CHR
  • 如何在H2中定义Oracle Package procedure进行测试

    我正在测试一个 Spring Boot 应用程序 该应用程序将数据读取 写入 Oracle DB 该 Oracle DB 具有 Oracle 包以及这些包中的过程 在某些时候 Spring Boot应用程序通过实体存储库调用此过程 如下所示
  • PLSQL 中的 REAL 数据类型

    SET SERVEROUTPUT ON DECLARE A REAL 123456789123456789123456789123456789123456789123456789123456789123456789 BEGIN DBMS O
  • Oracle PL/SQL - NO_DATA_FOUND 异常是否对存储过程性能不利?

    我正在编写一个需要进行大量调节的存储过程 根据 C NET 编码中的常识 异常会损害性能 因此我也始终避免在 PL SQL 中使用它们 我在此存储过程中的调节主要围绕记录是否存在 我可以通过以下两种方式之一进行 SELECT COUNT I
  • PL/SQL select into - 如果数据存在

    仅当存在数据时 我才需要选择局部变量 SELECT column1 INTO local variable FROM table1 where column2
  • plsql编译时如何避免Σ变成S?

    我们正在尝试在 pl sql 包中使用 符号 当我们编译包并执行时 符号变成 S 有什么方法可以避免这种情况吗 这是一个例子 declare Local variables here i varchar2 10 begin dbms out
  • oracle日期序列?

    我有一个 oracle 数据库 我需要一个包含 2 年所有日期的表 例如来自01 01 2011 to 01 01 2013 首先我想到了一个序列 但显然唯一支持的类型是数字 所以现在我正在寻找一种有效的方法来做到这一点 欢呼骗局 如果您想
  • 将游标中的数据合并为一个

    我有一个存储过程 它多次执行另一个存储过程 我需要联合并返回数据 这是在执行第二个过程后得到的 我可以以某种方式将多个游标中的数据合并到另一个游标中吗 没有临时表或类表数据类型是否可能 编辑 联合的游标计数实际上是 n 其中 n 是 1 2
  • 使用 SYS_CONNECT_BY_PATH 的 Oracle 累积计数

    当我尝试对实际数据执行以下查询时 它返回了更多记录数 请帮助解决这个问题 下面是表 DM TEMP SUMMING DVC BY FW 中的实际数据 device count dmc id firmware version cg id im

随机推荐

  • Android 可检查菜单项

    我的 Android 应用程序中有以下菜单布局 menu menu
  • hadoop 连接在端口 9000 上被拒绝

    我想设置一个伪分布式模式的hadoop集群进行开发 由于端口 9000 上的连接被拒绝 尝试启动 hadoop 集群失败 这些是我的配置 非常标准 站点核心 xml
  • PowerShell 和 $null 作为方法参数

    是 PowerShell 的 null相当于 NET的null 我有一个场景 其中我必须从 PowerShell 调用 NET 方法并传递null作为方法参数 截至目前 我在方法调用时遇到一些与程序集加载相关的错误 我想知道是否 null是
  • 读取 yaml 文件时出现 UnrecognizedPropertyException

    在使用 dropwizard 时 我的 dropwizard 服务读取 config yml 文件 public void run throws Exception this run new String server src main r
  • UIPopOverView 中的 TableView 问题

    我在 UIPopover 中遇到问题 我在 UIPopover 中添加了 UITableView 当我在iOS7 中运行时 运行良好如下 但是当我在iOS8中运行时 它显示如下 我的代码如下 CustomPopOverViewControl
  • Swift UIImageView 拉伸方面

    UIImageView 渲染图像的大小不正确 使用缩放纵横比 如果 UIImageView 是正方形 则图像的纵横比正确 并且图像未填充的区域具有透明度 Image is Square Correct Size var imageView
  • CSS 悬停时显示另一个元素

    我想用CSS来展示div id b 当我将鼠标悬停在div id a 但我不知道该怎么做 因为div a 在另一个里面div that div b 不在 div div Hover me div div div Show me div 我们
  • 我可以使用 stringstream 判断 std::string 是否表示数字吗?

    显然 这应该用于显示字符串是否是数字 例如 12 5 是 abc 否 然而 无论输入什么 我都会得到一个 否 std stringstream ss 2 double d ss gt gt d if ss good std cout lt
  • 在正态分布的数据集中生成随机值的示例算法?

    我正在尝试生成一些具有简单非均匀概率的随机数 以模仿逼真的数据以进行测试 我正在寻找一个接受 mu 和 sigma 作为参数并返回 x 的函数 其中 x 在一定范围内的可能性遵循标准钟形曲线或附近 它不需要非常精确 甚至不需要非常高效 生成
  • ORA-01403: 在 Oracle APEX 中使用主从 IG 时未找到数据

    在 Oracle APEX 5 1 中 我有一个交互式网格主详细信息页面 以下一系列步骤 用户有时会执行 会创建未处理的异常 ORA 01403 未找到数据 用户在主部分中创建无效记录 并在详细部分中创建相应记录 用户尝试保存 行处理 并由
  • 禁用 IE9 中的链接 - 原型 stop() 不起作用

    IE9 仍处于 Beta 阶段 但仍然有一个问题 使用prototype js 1 6 1 向链接添加点击事件并覆盖默认链接行为的正确形式是 mylink observe click function e doSomething e sto
  • 在 UNIX 中检查字符串是否包含数字字符

    我是 UNIX 新手 今天才在工作中开始使用它 但对 Java 有经验 并且有以下代码 bin bash echo Please enter a word read word grep i word 1 cut d f1 2 tr gt o
  • 如何在节点模块包上跳过打字稿的 noImplicitAny=true 规则?

    我正在使用 Typescript 2 和 Webpack 2 构建 Angular 2 应用程序 作为加载器 我使用 Awesome typescript loader 我在 tsconfig json 中设置了 noImplicitAny
  • 如何在 MySQL 中创建/使用变量

    我知道在 MySQL 中你可以做类似的事情SELECT foo AS bar FROM TABLE t 我正在尝试做一些事情来达到以下效果SELECT command1 FROM table1 AS foo command2 FROM ta
  • scss 选择器中的 & 意味着什么?

    什么是 在 scss 选择器中引用 Case 1 parent gt ul color red Case 2 parent gt ul gt li color blue Case 3 parent gt ul gt li color blu
  • Rails UJS:使用“ajax:before”阻止事件传播

    我很困惑如何ajax before使用时起作用Rails jquery ujs https github com rails jquery ujs 它是否等待中的任何给定函数ajax before在继续之前完成 如果 jQuery 中的事件
  • ListView 和隐藏的 Id。怎么可能呢?

    我正在开发一个 Android 应用程序 现在我已经实现了一个 ListView 它显示连接到数据库的课程列表 我想知道如何在名称中包含一个隐藏的 ID 来自数据库 以便一旦用户单击元素 应用程序就会转到所选课程的相对视图 如何在课程视图内
  • 列出目录中的所有文件夹(PHP)[重复]

    这个问题在这里已经有答案了 如何使我的代码仅显示文件夹的链接而不显示目录中的文件 d dir echo ul while false entry d gt read echo li a href entry entry a li echo
  • Django解决url中特殊字符的问题

    我们有一个由 Django 制作的网站 并且访问时没有问题 本地工作环境的网址如下 http site tags c 23 c 23 是 c 的urlencode 在本地工作正常 但是当我们将其部署到 Bluehost 托管服务器 apac
  • 模块化代码有哪些好的实践?

    在 PL SQL 中 有一些奇特的新概念 比如表函数 对象 可能还有其他我还没有发现的概念 但话又说回来 还有简单的代码生成 动态 pl sql 您可以 立即执行 这些可以帮助代码重用 据我所知 表函数和对象可以帮助创建模块化代码 但仍然不