Local Copy of Employees
CREATE TABLE employees AS SELECT * FROM hr.employees
Table created.
Update Any Column In Table - Concatenation
CREATE OR REPLACE PROCEDURE updnumval (
col_in IN VARCHAR2
, start_in IN DATE
, end_in IN DATE
, val_in IN NUMBER
)
IS
c_format CONSTANT VARCHAR2 ( 100 ) := 'YYYYMMDDHH24MISS';
BEGIN
EXECUTE IMMEDIATE 'UPDATE employees SET '
|| col_in
|| ' = '
|| val_in
|| ' WHERE hire_date BETWEEN TO_DATE ('''
|| TO_CHAR ( start_in, c_format )
|| ''', '''
|| c_format
|| ''') AND TO_DATE ('''
|| TO_CHAR ( end_in, c_format )
|| ''', '''
|| c_format
|| ''')';
END;
Procedure created.
BEGIN
updnumval ('salary',
DATE '2002-01-01',
DATE '2002-12-31',
20000);
END;
Statement processed.
SELECT *
FROM employees
WHERE salary = 20000
EMPLOYEE_ID | FIRST_NAME | LAST_NAME | PHONE_NUMBER | HIRE_DATE | JOB_ID | SALARY | COMMISSION_PCT | MANAGER_ID | DEPARTMENT_ID | |
---|---|---|---|---|---|---|---|---|---|---|
108 | Nancy | Greenberg | NGREENBE | 515.124.4569 | 17-AUG-02 | FI_MGR | 20000 | - | 101 | 100 |
109 | Daniel | Faviet | DFAVIET | 515.124.4169 | 16-AUG-02 | FI_ACCOUNT | 20000 | - | 108 | 100 |
114 | Den | Raphaely | DRAPHEAL | 515.127.4561 | 07-DEC-02 | PU_MAN | 20000 | - | 100 | 30 |
203 | Susan | Mavris | SMAVRIS | 515.123.7777 | 07-JUN-02 | HR_REP | 20000 | - | 101 | 40 |
204 | Hermann | Baer | HBAER | 515.123.8888 | 07-JUN-02 | PR_REP | 20000 | - | 101 | 70 |
205 | Shelley | Higgins | SHIGGINS | 515.123.8080 | 07-JUN-02 | AC_MGR | 20000 | - | 101 | 110 |
206 | William | Gietz | WGIETZ | 515.123.8181 | 07-JUN-02 | AC_ACCOUNT | 20000 | - | 205 | 110 |
Well You Don't Need All Those Single Quotes
CREATE OR REPLACE PROCEDURE updnumval (
col_in IN VARCHAR2
, start_in IN DATE
, end_in IN DATE
, val_in IN NUMBER
)
IS
c_format CONSTANT VARCHAR2 ( 100 ) := 'YYYYMMDDHH24MISS';
BEGIN
EXECUTE IMMEDIATE 'UPDATE employees SET '
|| col_in
|| ' = '
|| val_in
|| q'[ WHERE hire_date BETWEEN TO_DATE (']'
|| TO_CHAR ( start_in, c_format )
|| q'[', ']'
|| c_format
|| q'[') AND TO_DATE (']'
|| TO_CHAR ( end_in, c_format )
|| q'[', ']'
|| c_format
|| q'[')]';
END;
Procedure created.
BEGIN
updnumval ('salary',
DATE '2002-01-01',
DATE '2002-12-31',
30000);
END;
Statement processed.
SELECT *
FROM employees
WHERE salary = 30000
EMPLOYEE_ID | FIRST_NAME | LAST_NAME | PHONE_NUMBER | HIRE_DATE | JOB_ID | SALARY | COMMISSION_PCT | MANAGER_ID | DEPARTMENT_ID | |
---|---|---|---|---|---|---|---|---|---|---|
108 | Nancy | Greenberg | NGREENBE | 515.124.4569 | 17-AUG-02 | FI_MGR | 30000 | - | 101 | 100 |
109 | Daniel | Faviet | DFAVIET | 515.124.4169 | 16-AUG-02 | FI_ACCOUNT | 30000 | - | 108 | 100 |
114 | Den | Raphaely | DRAPHEAL | 515.127.4561 | 07-DEC-02 | PU_MAN | 30000 | - | 100 | 30 |
203 | Susan | Mavris | SMAVRIS | 515.123.7777 | 07-JUN-02 | HR_REP | 30000 | - | 101 | 40 |
204 | Hermann | Baer | HBAER | 515.123.8888 | 07-JUN-02 | PR_REP | 30000 | - | 101 | 70 |
205 | Shelley | Higgins | SHIGGINS | 515.123.8080 | 07-JUN-02 | AC_MGR | 30000 | - | 101 | 110 |
206 | William | Gietz | WGIETZ | 515.123.8181 | 07-JUN-02 | AC_ACCOUNT | 30000 | - | 205 | 110 |
Switch to Binding with USING Clause
CREATE OR REPLACE PROCEDURE updnumval (col_in IN VARCHAR2,
start_in IN DATE,
end_in IN DATE,
val_in IN NUMBER)
IS
BEGIN
EXECUTE IMMEDIATE
'UPDATE employees SET '
|| col_in
|| ' = :val
WHERE hire_date BETWEEN :lodate AND :hidate'
USING val_in, start_in, end_in;
END;
Procedure created.
BEGIN
updnumval ('salary',
DATE '2002-01-01',
DATE '2002-12-31',
40000);
END;
Statement processed.
SELECT *
FROM employees
WHERE salary = 40000
EMPLOYEE_ID | FIRST_NAME | LAST_NAME | PHONE_NUMBER | HIRE_DATE | JOB_ID | SALARY | COMMISSION_PCT | MANAGER_ID | DEPARTMENT_ID | |
---|---|---|---|---|---|---|---|---|---|---|
108 | Nancy | Greenberg | NGREENBE | 515.124.4569 | 17-AUG-02 | FI_MGR | 40000 | - | 101 | 100 |
109 | Daniel | Faviet | DFAVIET | 515.124.4169 | 16-AUG-02 | FI_ACCOUNT | 40000 | - | 108 | 100 |
114 | Den | Raphaely | DRAPHEAL | 515.127.4561 | 07-DEC-02 | PU_MAN | 40000 | - | 100 | 30 |
203 | Susan | Mavris | SMAVRIS | 515.123.7777 | 07-JUN-02 | HR_REP | 40000 | - | 101 | 40 |
204 | Hermann | Baer | HBAER | 515.123.8888 | 07-JUN-02 | PR_REP | 40000 | - | 101 | 70 |
205 | Shelley | Higgins | SHIGGINS | 515.123.8080 | 07-JUN-02 | AC_MGR | 40000 | - | 101 | 110 |
206 | William | Gietz | WGIETZ | 515.123.8181 | 07-JUN-02 | AC_ACCOUNT | 40000 | - | 205 | 110 |