KEMBAR78
PL/SQL Coding Guidelines - Part 3 | PPTX
PL/SQL & SQL
CODING GUIDELINES – PART 3
Larry Nung
AGENDA
Numeric Data Types
Character Data Types
Boolean Data Types
Large Objects
Reference
Q & A
2
VARIABLES & TYPES
Numeric Data Types
18. AVOID DECLARING NUMBER VARIABLES
OR SUBTYPES WITH NO PRECISION.
BAD
DECLARE
v_number number;
BEGIN
...
END;
GOOD
DECLARE
v_number number(9, 2);
BEGIN
...
END;
19. TRY TO USE PLS_INTEGER INSTEAD OF
NUMBER FOR ARITHMETIC OPERATIONS WITH
INTEGER VALUES (NO DECIMAL POINT).
VARIABLES & TYPES
Character Data Types
20. AVOID USING CHAR DATA TYPE.
BAD
DECLARE
v_str char(4000) := 'test';
BEGIN
DBMS_OUTPUT.PUT_LINE(Length(v_str));
END;
GOOD
DECLARE
v_str varchar2(4000) := 'test';
BEGIN
DBMS_OUTPUT.PUT_LINE(Length(v_str));
END;
21. AVOID USING VARCHAR DATA TYPE.
BAD
DECLARE
v_str varchar(4000);
BEGIN
…
END;
GOOD
DECLARE
v_str varchar2(4000);
BEGIN
…
END;
22. NEVER USE ZERO-LENGTH STRINGS TO
SUBSTITUTE NULL.
BAD
DECLARE
v_str varchar2(4000) := '';
BEGIN
DBMS_OUTPUT.PUT_LINE(CASE WHEN v_str is
null THEN 'null' ELSE 'not null' END);
END;
GOOD
DECLARE
v_str varchar2(4000);
BEGIN
DBMS_OUTPUT.PUT_LINE(CASE WHEN v_str is
null THEN 'null' ELSE 'not null' END);
END;
23. ALWAYS DEFINE YOUR VARCHAR2
VARIABLES USING CHAR SEMANTIC.
BAD
DECLARE
v_str varchar(200);
BEGIN
...
END;
GOOD
DECLARE
v_str varchar(200 char);
BEGIN
...
END;
VARIABLES & TYPES
Boolean Data Types
24. TRY TO USE BOOLEAN DATA TYPE FOR
VALUES WITH DUAL MEANING.
BAD
DECLARE
v_IsBigger number(1) := 1;
BEGIN
DBMS_OUTPUT.PUT_LINE(CASE WHEN
v_IsBigger = 1 THEN 'True' ELSE 'False' END);
END;
GOOD
DECLARE
v_IsBigger BOOLEAN := true;
BEGIN
DBMS_OUTPUT.PUT_LINE(CASE WHEN
v_IsBigger THEN 'True' ELSE 'False' END);
END;
VARIABLES & TYPES
Large Objects
25. AVOID USING THE LONG AND LONG
RAW DATA TYPES.
REFERENCE
27
REFERENCE
 Trivadis PL/SQL & SQL Coding Guidelines Version
2.0
 http://www.trivadis.com/sites/default/files/downloads/PL
SQL_and_SQL_Coding_Guidelines_2_0_HiRes.pdf
28
Q&A
29
QUESTION & ANSWER
30

PL/SQL Coding Guidelines - Part 3

Editor's Notes

  • #5 If you do not specify precision NUMBER is defaulted to 38 or the maximum supported by your system, whichever is less. You may well need all this precision, but if you
  • #8 • PLS_INTEGER uses less memory • PLS_INTEGER uses machine arithmetic, which is up to three times faster than library arithmetic which is used by NUMBER. With ORACLE 11g, the new data type SIMPLE_INTEGER has been introduced. It is a sub-type of PLS_INTEGER and covers the same range. The basic difference is that SIMPLE_INTEGER is always NOT NULL. Another major difference is that you will never face a numeric overflow using SIMPLE_INTEGER as this data type wraps around without giving any error. SIMPLE_INTEGER data type gives major performance boost over PLS_INTEGER when code is compiled in ‘NATIVE’ mode, because arithmetic operations on SIMPLE_INTEGER type are performed directly at the hardware level.
  • #10 CHAR is a fixed length data type which should only be used when appropriate. CHAR columns/variables are always filled to the specified length, this may lead to side-effects.
  • #13 The VARCHAR data type is a subtype of VARCHAR2. There is a strong possibility, that the meaning of VARCHAR might change in future version of ANSI SQL Standard. ORACLE recommends that you avoid using VARCHAR and use VARCHAR2 instead. 目前VARCHAR是VARCHAR2的同義詞。工業標准的VARCHAR類型可以存儲空字符串,但是Oracle不這樣做,盡管它保留以後這樣做的權利。Oracle自己開發了一個數據類型VARCHAR2,這個類型不是一個標准的VARCHAR,它將在數據庫中varchar列可以存儲空字符串的特性改爲存儲NULL值。假如你想有向後兼容的能力,Oracle建議使用VARCHAR2而不是VARCHAR
  • #16 Today zero-length strings and NULL are handled similarly by ORACLE. There is no guarantee that this will still be the case in future releases, therefore if you mean NULL use NULL.
  • #19 Changes to the NLS_LENGTH_SEMANTIC will only be picked up by your code after a recompilation.
  • #23 The use of TRUE and FALSE clarifies that this is a boolean value and makes the code easier to read.
  • #27 LONG and LONG RAW data type support will be discontinued in future ORACLE releases.