12.07.2015 Views

Oracle SQL Developer

Oracle SQL Developer

Oracle SQL Developer

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Utilizing the Main Features of PL/<strong>SQL</strong>Example 7–28 illustrates several uses of dynamic <strong>SQL</strong>.Example 7–28Examples of Dynamic <strong>SQL</strong>-- create a standalone procedureCREATE OR REPLACE PROCEDURE raise_emp_salary (column_value NUMBER,emp_column VARCHAR2, amount NUMBER) IScolumn VARCHAR2(30);sql_stmt VARCHAR2(200);BEGIN-- determine if a valid column name has been given as inputSELECT COLUMN_NAME INTO column FROM USER_TAB_COLSWHERE TABLE_NAME = 'EMPLOYEES' AND COLUMN_NAME = emp_column;sql_stmt := 'UPDATE employees SET salary = salary + :1 WHERE '|| column || ' = :2';EXECUTE IMMEDIATE sql_stmt USING amount, column_value;IF <strong>SQL</strong>%ROWCOUNT > 0 THENDBMS_OUTPUT.PUT_LINE('Salaries have been updated for: ' || emp_column|| ' = ' || column_value);END IF;EXCEPTIONWHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE ('Invalid Column: ' || emp_column);END raise_emp_salary;/DECLAREplsql_block VARCHAR2(500);BEGIN-- note the semi-colons (;) inside the quotes '...'plsql_block := 'BEGIN raise_emp_salary(:cvalue, :cname, :amt); END;';EXECUTE IMMEDIATE plsql_block USING 110, 'DEPARTMENT_ID', 10;EXECUTE IMMEDIATE 'BEGIN raise_emp_salary(:cvalue, :cname, :amt); END;'USING 112, 'EMPLOYEE_ID', 10;END;/DECLAREsql_stmtVARCHAR2(200);columnVARCHAR2(30) := 'DEPARTMENT_ID';dept_id NUMBER(4) := 46;dept_nameVARCHAR2(30) := 'Special Projects';mgr_id NUMBER(6) := 200;loc_id NUMBER(4) := 1700;BEGIN-- note that there is no semi-colon (;) inside the quotes '...'EXECUTE IMMEDIATE 'CREATE TABLE bonus (id NUMBER, amt NUMBER)';sql_stmt := 'INSERT INTO departments VALUES (:1, :2, :3, :4)';EXECUTE IMMEDIATE sql_stmt USING dept_id, dept_name, mgr_id, loc_id;EXECUTE IMMEDIATE 'DELETE FROM departments WHERE ' || column || ' = :num'USING dept_id;EXECUTE IMMEDIATE 'ALTER SESSION SET <strong>SQL</strong>_TRACE TRUE';EXECUTE IMMEDIATE 'DROP TABLE bonus';END;/-- rollback the changesROLLBACK;-- delete the procedureDROP PROCEDURE raise_emp_salary;7-20 <strong>SQL</strong> <strong>Developer</strong> Online Help

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!