避免動態SQL(二)

LuiseDalian發表於2014-01-16
案例2

說明如何在特定的情況下,將動態SQL修改為靜態SQL

點選(此處)摺疊或開啟

  1. CREATE OR REPLACE PROCEDURE proc1(p_cname VARCHAR2, p_empno NUMBER)
  2. IS
  3.   v_value VARCHAR2(100);
  4. BEGIN
  5.   --使用動態SQL
  6.   EXECUTE IMMEDIATE \'SELECT \' || p_cname || \' FROM emp WHERE empno = :x\' INTO v_value USING p_empno;
  7.   dbms_output.put_line(\'Dynamic SQL: \' || v_value);
  8.   --修改為靜態SQL
  9.   SELECT DECODE(UPPER(p_cname), \'ENAME\', ename, \'EMPNO\', empno, \'HIREDATE\', to_char(hiredate, \'YYYY-MM-DD\'))
  10.   INTO v_value FROM emp WHERE empno = p_empno;
  11.   dbms_output.put_line(\'Static SQL: \' || v_value);
  12. END;
  13. /

  14. set serveroutput on
  15. exec proc1(\'hiredate\', 7788);

  16. Dynamic SQL: 19-APR-87
  17. Static SQL: 1987-04-19


  18. exec proc1(\'ename\', 7788);

  19. Dynamic SQL: SCOTT
  20. Static SQL: SCOTT

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1071379/,如需轉載,請註明出處,否則將追究法律責任。

相關文章