26. SQL keywords are right-aligned / left-aligned within a SQL command. Keep it consistent!PROCEDURE set_salary(p_empno_in IN emp.empno%TYPE) IS CURSOR l_emp_cur(p_empnoemp.empno%TYPE) IS SELECT ename ,sal FROM emp WHERE empno = p_empno ORDER BY ename; l_empl_emp_cur%ROWTYPE; l_new_salemp.sal%TYPE; BEGIN OPEN l_emp_cur(p_empno_in); FETCH l_emp_cur INTO l_emp; CLOSE l_emp_cur; -- get_new_salary (p_empno_in => in_empno , p_sal_out => l_new_sal); -- Check whether salary has changed IF l_emp.sal <> l_new_sal THEN UPDATE emp SET sal = l_new_sal WHERE empno = p_empno_in; END IF; END set_salary;
27. 2.2 Some SQL Style Examples SELECT e.job, e.deptno FROM emp e WHERE e.name = 'SCOTT' AND e.sal > 100000 SELECT e.job, e.deptno FROM emp e WHERE e.name = 'SCOTT' AND e.sal > 100000 SELECT e.JOB ,e.deptno FROM emp e WHERE e.name = 'SCOTT' AND e.sal > 100000 SELECT e.JOB , e.deptno FROM emp e WHERE e.name = 'SCOTT' AND e.sal > 100000 SELECT e.JOB, e.deptno FROM emp e WHERE e.name = 'SCOTT' AND e.sal > 100000
28.
29.
30. 2.5 View/Trigger Comment Block CREATE OR REPLACE TRIGGER tri_mytab_bi BEFORE INSERT ON mytab FOR EACH ROW DECLARE -- local variables here BEGIN NULL; END tri_mytab_bi /******************************************************************* Copyright YYYY by <Company Name> All Rights Reserved. <Short synopsis of trigger's purpose. Required.> <Optional design notes.> *******************************************************************/ ; /******************************************************************* Copyright YYYY by <Company Name> All Rights Reserved. <Short synopsis of trigger's purpose. Required.> <Optional design notes.> *******************************************************************/ CREATE OR REPLACE TRIGGER tri_mytab_bi BEFORE INSERT ON mytab FOR EACH ROW DECLARE -- local variables here BEGIN NULL; END tri_mytab_bi;
73. Always use COALESCE instead of NVL, if parameter 2 of the NVL function is a function call or a SELECT statement.
74. Always use CASE instead of NVL2 if parameter 2 or 3 of NVL2 is either a function call or a SELECT statement.
75. The NVL function always evaluates both parameters before deciding which one to use. This can be harmful if parameter 2 is either a function call or a select statement, as it will be executed regardless of whether parameter 1 contains a NULL value or not.