0

我几乎是一个从“Java 世界”到“PL/SQL 世界”的新手,使用“遗留”存储过程,我有一个问题。Java 命名的最佳实践包括诸如“变量、方法、类等的名称应该是有意义的和自动记录的”之类的提示(我在 Clean Coder 书中阅读过)。默认情况下,Oracle 的标识符长度为 30 个字符,但我发现缩写命名并不总是“易于翻译”,我不知道这是考虑到应用程序性能还是“只是一种不好的做法”。

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

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 个字符怎么办?函数/过程/触发器/等的名称何时会影响性能?有这方面的标准吗?

谢谢!

4

3 回答 3

4

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

虽然有 30 个字符的限制,如果您在一个有多个开发人员的组织中,您绝对应该考虑采用参数名称、变量名称、全局变量、视图、触发器、过程、包等的任何类型的前缀/后缀的标准.

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

至于您的示例,我完全鼓励将名称从更改为PROCCALCTAXES更具可读性的名称,CALCULATE_TAXES或者如果您采用标准来为程序添加前缀P_or PRC_,这取决于您,但在我看来是多余的,并且在30 个字符空间。

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

于 2015-03-13T16:03:28.900 回答
2

变量名对性能没有影响。

无论使用哪种语言,变量名称都应该清晰且自记录。然而,鉴于 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”而不是另一个变量。

于 2015-03-13T16:13:29.980 回答
0

在我看来,使用“ PROC CALCTAXES”或“ vVar NamTax”之类的名称来表明它们是过程或 varchar 变量是没有任何意义的。默认情况下,几乎每个编辑器或 IDE 都会显示此类信息。使用字符给出更易读的名称。

于 2015-03-13T17:35:13.433 回答