在 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 不一定那么糟糕。这只是需要一些纪律。
良好的格式化和检测。确保动态 SQL 看起来很漂亮并且可以轻松打印出来进行调试。遵循良好的编程习惯 - 缩进、添加注释、使用有意义的名称等。当 IDE 上的“美化器”按钮没有帮助时,点击式程序员会感到震惊。不要让任何人逃脱草率的代码 - 仅仅因为它在技术上是一个字符串,不应该允许任何人避免常见的样式规则。
替代报价机制。使用q
语法以避免不断地转义事物。例如,q'[I'll use single quotes if I want to!]'
代替'I''ll use single quotes if I want to!'
.
-
模板而不是串联。在不间断的块中编写代码,然后替换动态部分。将其与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(使用前将#替换为@)