variables/functions/procedures/etc 名称会影响 PL/SQL 中的性能吗?

Does variables/functions/procedures/etc name affect performance in PL/SQL?

我几乎是一个从 "Java's World" 到 "PL/SQL World" 的新手,使用 "legacy" 存储过程,我有一个问题。 Java 命名的最佳实践包括诸如 "the names of variables, methods, classes, etc should be meaningful and auto-documented" 之类的技巧(我在 Clean Coder 书上读过)。 默认情况下,Oracle 的标识符长度为 30 个字符,但我发现缩写命名并不总是 "easy translatable",我不知道这是考虑到应用程序性能还是 "just a bad practice"。

假设我发现了这样的东西:

PROCEDURE PROCCALCTAXES(vVarNamTax VARCHAR2(2)) IS 
   vVarNamCouCalTax VARCHAR2(20);
   nVarCouId NUMBER;
   vVarNamTax VARCHAR2(20);
   vVarValTax VARCHAR2(10);
   nVarCouTaxTimPaid NUMBER;
   vVarExa30Cha VARCHAR2(10);
BEGIN
   --business logic
END PROCDOSTH;

如果我像这样重构代码,需要注意一些事情?

PROCEDURE P_CALCULATE_TAXES(vVarNamTax VARCHAR2(2)) IS 
   vCountryName VARCHAR2(20);
   nCountryId NUMBER;
   vTaxName VARCHAR2(20);
   vTaxValue VARCHAR2(10);
   nCountOfTimesPaid NUMBER;
   vAnExampleWith30CharactersLong VARCHAR2(10);
BEGIN
   --business logic
END P_CALCULATE_TAXES;

应用程序的性能是否有所下降?如果所有变量都像最后一个一样,有 30 个字符怎么办? function/procedure/trigger/etc 的名称何时会影响性能?这有标准吗?

谢谢!

你绝对应该使名称更具可读性、意义和自动记录。至少在性能方面,很难遇到任何语言,其中更具描述性的名称会不利(可能在某些 codegolf 特定语言中,由于长度限制)。 Sql 和 PL/Sql 没有区别。名称不影响性能。

不过有 30 个字符的限制,如果您所在的组织有多个开发人员,您绝对应该考虑采用参数名称、变量名称、全局变量以及任何类型的 prefixes/suffixes 视图标准、触发器、过程、包等

您可以访问 http://www.toadworld.com/platforms/oracle/w/wiki/8245.plsql-standards.aspx 以查看不同人为他们采用的标准的一些示例。没有硬性规定说某件事是正确的还是错的。但是有一些标准确实可以帮助您提高代码的可读性和可维护性,并可能有助于更快地编写未来的代码。

对于您的示例,我完全鼓励将名称从 PROCCALCTAXES 更改为更具可读性的名称,例如 CALCULATE_TAXES 或者如果您采用 P_PRC_,这取决于你,但在我看来是多余的,并且占用了 30 个字符 space 中宝贵的空间。

另一件我发现有用的事情是提出适用于我们公司的标准缩写列表。例如组织的 ORG、地址的 ADDR、客户的 CUST 等。有助于将单词限制在 30 个字符的限制内。

变量名对性能没有影响。

无论使用何种语言,变量名都应该清晰明了并且可以自我记录。然而,鉴于 PL/SQL 变量名限制在 30 个字符以内,使事情变得清晰和自我记录可能涉及某种一致的缩写。例如,如果我知道我将有许多不同的变量

order_id
order_line_id
order_line_amount
order_total_amount
order_sales_tax_rate
order_sales_tax_amount
order_sales_tax_taxing_entity_name
order_sales_tax_taxing_entity_fips_code

如果某些变量会超过 30 个字符,则一致地缩写所有变量通常比仅缩写那些超过 30 个字符的变量更有意义。在这种情况下,我可能希望始终将 "order" 缩写为 "ordr",将 "sales_tax" 缩写为 "stax",并将 "taxing_entity" 缩写为 "txety",以确保我所有的变量都少于 30 个字符。强迫开发人员了解这些缩写(并始终坚持使用它们)会降低代码的可读性,但效果可能不如强迫开发人员弄清楚您是否在一个变量中缩写了 "sales_tax" 而在另一个变量中没有缩写。

在我看来,为了显示它们是过程或 varchar 变量。默认情况下,几乎每个编辑器或 IDE 都会显示此类信息。使用字符提供更易读的名称。