29
Siófok, 2014, HOUG 2014 SQL and PL/SQL New Features in Oracle Database 12c Czinkóczki László

SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

  • Upload
    vothien

  • View
    274

  • Download
    2

Embed Size (px)

Citation preview

Page 1: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, HOUG 2014

SQL and PL/SQL New Features in Oracle Database 12c Czinkóczki László

Page 2: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 2

SQL New Features

• CREATE PLUGGABLE DATABASE • CREATE TABLE and ALTER TABLE Enhancements

– Extended Data Types – Temporal Validity – Hide and unhide columns

• CREATE VIEW Enhancements • GRANT and REVOKE Enhancements • SELECT Enhancements • Using PL/SQL subprograms in SQL Statements • Adaptive Plans • TRUNCATE TABLE Enhancements • New or Enhanced Functions

Page 3: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 3

Multitenant Architecture in Oracle 12c

• Multitenant container database (CDB) • Pluggable database (PDB) • You can plug a non-CDB into a CDB as a PDB. • To move a PDB to a non-CDB,you must use Oracle Data Pump. • Benefits:

• Cost reduction • Separation of data and code • One set of BG processes • Ease of performance tuning • Fewer database patches and

upgrades • Secure separation of

administrative duties

Page 4: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 4

An example for creating PDB CREATE PLUGGABLE database pdborcl as clone using 'D:\app\lczinkoc\product\12.1.0\dbhome_1\assistants\ dbca\templates\\sampleschema.xml' source_file_name_convert = ('C:\ADE\AIME_V\ORACLE\ORADATA\SEEDDATA\SAMPLE_SCHEMA\ TEMP01.DBF', 'D:\APP\LCZINKOC\ORADATA\ORCL\PDBORCL\pdborcl_temp01.dbf', 'C:\ADE\AIME_V\ORACLE\ORADATA\SEEDDATA\SAMPLE_SCHEMA\ EXAMPLE01.DBF', 'D:\APP\LCZINKOC\ORADATA\ORCL\PDBORCL\EXAMPLE01.DBF', 'C:\ADE\AIME_V\ORACLE\ORADATA\SEEDDATA\SAMPLE_SCHEMA\ SYSTEM01.DBF', 'D:\APP\LCZINKOC\ORADATA\ORCL\PDBORCL\SYSTEM01.DBF', 'C:\ADE\AIME_V\ORACLE\ORADATA\SEEDDATA\SAMPLE_SCHEMA\ SAMPLE_SCHEMA_USERS01.DBF', 'D:\APP\LCZINKOC\ORADATA\ORCL\PDBORCL\ SAMPLE_SCHEMA_USERS01.DBF', 'C:\ADE\AIME_V\ORACLE\ORADATA\SEEDDATA\SAMPLE_SCHEMA\ SYSAUX01.DBF', 'D:\APP\LCZINKOC\ORADATA\ORCL\PDBORCL\SYSAUX01.DBF') NOCOPY;

Page 5: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 5

Using sequence in CREATE TABLE statement

DROP SEQUENCE HOUG; DROP TABLE EMP PURGE; CREATE SEQUENCE HOUG START WITH 1; CREATE TABLE emp (a1 NUMBER DEFAULT HOUG.NEXTVAL NOT NULL, a2 VARCHAR2(10)); INSERT INTO emp (a2) VALUES ('john'); INSERT INTO emp (a2) VALUES ('mark'); COMMIT; SET LONG 100000 SELECT * FROM emp; SELECT DBMS_METADATA.GET_DDL('TABLE','EMP','HR') FROM DUAL;

A sequence can be used to generate values for PK and UK

Page 6: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 6

Extended Data Types

• Extend the size of some data types • If MAX_STRING_SIZE = STANDARD, then the size limits

• 4000 bytes for the VARCHAR2 and NVARCHAR2 data types

• 2000 bytes for the RAW data type. This is the default. • If MAX_STRING_SIZE = EXTENDED, then the size limits

• 32767 bytes for the VARCHAR2, NVARCHAR2and RAW data types.

Note : ORA-14694: database must in UPGRADE mode to begin MAX_STRING_SIZE migration

Page 7: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 7

Temporal Validity

CREATE TABLE my_emp_hidden( empno NUMBER, last_name VARCHAR2(30), PERIOD FOR user_valid_time);

INSERT INTO my_emp_hidden (empno,last_name,USER_VALID_TIME_START,USER_VALID_TIME_END) VALUES (100, 'King', TO_TIMESTAMP('01-Jan-10'), TO_TIMESTAMP('02-Jun-12')); INSERT INTO my_emp_hidden (empno,last_name,USER_VALID_TIME_START,USER_VALID_TIME_END) VALUES (101, 'Kochhar', TO_TIMESTAMP('01-Jan-11'), TO_TIMESTAMP('30-Jun-12')); INSERT INTO my_emp_hidden (empno,last_name,USER_VALID_TIME_START,USER_VALID_TIME_END) VALUES (102, 'De Haan', TO_TIMESTAMP('01-Jan-12'),NULL); COMMIT;

Page 8: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 8

Temporal Validity

EXEC DBMS_FLASHBACK_ARCHIVE.ENABLE_AT_VALID_TIME('ALL') SELECT * FROM my_emp_hidden; EMPNO LAST_NAME ---------- ------------------------------ 100 King 101 Kochhar 102 De Haan EXEC DBMS_FLASHBACK_ARCHIVE.ENABLE_AT_VALID_TIME('CURRENT') SELECT * FROM my_emp_hidden; EMPNO LAST_NAME ---------- ------------------------------ 102 De Haan SELECT empno,last_name,USER_VALID_TIME_START,USER_VALID_TIME_END FROM my_emp_hidden;

http://sqlplsql.wordpress.com/2013/12/16/temporal-validityhistory-in-oracle-12c/

Page 9: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 9

SQL Row Limiting Clause

• The row_limiting_clause allows you to limit the rows that are returned by the query.

• Queries that order data and then limit row output are widely used and are often referred to as Top-N queries.

• You can specify the number of rows or percentage of rows to return with the FETCH_FIRST keywords.

• You can use the OFFSET keyword to specify that the returned rows begin with a row after the first row of the full result set.

• The WITH TIES keyword includes additional rows with the same ordering keys as the last row of the row-limited result set (you must specify ORDER BY in the query).

Page 10: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 10

Limiting the percentage of ordered rows retrieved in Oracle 12c

SELECT /*+ GATHER_PLAN_STATISTICS */ employee_id, last_name, salary FROM employees ORDER BY salary DESC FETCH FIRST 5 PERCENT ROWS ONLY; EMPLOYEE_ID LAST_NAME SALARY ----------- ------------- -------- 100 King 24000 101 Kochhar 17000 102 De Haan 17000 145 Russell 14000 146 Partners 13500 201 Hartstein 13000

Page 11: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 11

Traditional solution

SELECT /*+ GATHER_PLAN_STATISTICS */ E.* FROM (SELECT employee_id, last_name, salary, CUME_DIST() OVER( ORDER BY Salary DESC) cum_dist FROM employees ORDER BY salarY DESC) E WHERE E.CUM_DIST<=0.05; EMPLOYEE_ID LAST_NAME SALARY CUM_DIST ----------- --------- ---------- ------------- 100 King 24000 0.009345794393 101 Kochhar 17000 0.02803738318 102 De Haan 17000 0.02803738318 145 Russell 14000 0.03738317757 146 Partners 13500 0.04672897196

Page 12: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 12

Execution plan for the the new solution

-------------------------------------------------------------------------------------------------------------------- SELECT /*+ GATHER_PLAN_STATISTICS */ employee_id, last_name, salary FROM employees ORDER BY salary DESC FETCH FIRST 5 PERCENT ROWS ONLY Plan hash value: 720055818 ---------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU) | Time | --------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 3 (100) | | |* 1 | VIEW | | 107 | 8453 | 3 (0) | 00:00:01 | | 2 | WINDOW SORT | | 107 | 1712 | 3 (0) | 00:00:01 | | 3 | TABLE ACCESS FULL| EMPLOYEES | 107 | 1712 | 3 (0) | 00:00:01 | -----------------------------------------------------------------------------------------------------------------------

Page 13: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 13

------------------------------------------------------------------------------------------------------- SELECT /*+ GATHER_PLAN_STATISTICS */ E.* FROM (SELECT employee_id, last_name, salary, CUME_DIST() OVER( ORDER BY Salary DESC) cum_dist FROM employees ORDER BY salarY DESC) E WHERE E.CUM_DIST<=0.05 Plan hash value: 720055818 ----------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU) | Time | --------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 3 (100)| | |* 1 | VIEW | | 107 | 5671 | 3 (0) | 00:00:01 | | 2 | WINDOW SORT | | 107 | 1712 | 3 (0) | 00:00:01 | | 3 | TABLE ACCESS FULL| EMPLOYEES | 107 | 1712 | 3 (0) | 00:00:01 | ------------------------------------------------------------------------------------------------------------------

Execution plan for the the traditional solution

Page 14: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 14

Adaptive Plan

SELECT u.tblspc "TABLESPACE", (a.fbytes/1024/1000) "ALLOCATE_MBYTE", (u.ebytes/1024/1000) USED_MBYTE, ((a.fbytes - u.ebytes)/1024/1000) FREE_MBYTE, trunc((u.ebytes / a.fbytes) * 100) PERCENT FROM (SELECT tablespace_name tblspc, SUM(bytes) ebytes FROM sys.dba_extents GROUP BY tablespace_name) u, (SELECT tablespace_name tblspc, SUM(bytes) fbytes FROM sys.dba_data_files GROUP BY tablespace_name) a WHERE u.tblspc = a.tblspc ORDER BY tablespace; --Execute again EXEC SQLID('u.tblspc'); Note ----------------------------------- - this is an adaptive plan

Page 15: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 15

The CASCADE option in TRUNCATE Statement CASCADE •If you specify CASCADE, then Oracle Database truncates all child tables that reference table with an enabled ON DELETE CASCADE referential constraint. •This is a recursive operation that will truncate all child tables, granchild tables, and so on, using the specified options CREATE TABLE NEWDEPT AS SELECT * FROM DEPARTMENTS;

ALTER TABLE NEWDEPT ADD CONSTRAINT NEWDEPT_ID_PK PRIMARY KEY(DEPARTMENT_ID); CREATE TABLE NEWEMP AS SELECT * FROM EMPLOYEES; ALTER TABLE NEWEMP ADD CONSTRAINT NEWEMP_DEPT_ID_FK FOREIGN KEY(DEPARTMENT_ID) REFERENCES NEWDEPT(DEPARTMENT_ID) ON DELETE CASCADE ; SELECT * FROM NEWEMP; TRUNCATE TABLE NEWDEPT CASCADE ;

Page 16: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 16

WITH option using local PL/SQL subprogram WITH FUNCTION tax(p_amount IN NUMBER) RETURN NUMBER IS m NUMBER; BEGIN IF p_amount <8000 THEN m:=0.08; ELSIF p_amount <18000 THEN m:=0.25; ELSE m:=0.3; END IF; RETURN p_amount * m; END; emp_costs AS ( SELECT d.department_name dept_name,e.last_name, e.salary, tax(e.salary) AS tax_amount FROM employees e JOIN departments d ON e.department_id = d.department_id), dept_costs AS ( SELECT dept_name, SUM(salary) AS dept_sal, SUM(tax_amount) tax_sum, AVG(salary) avg_sal FROM emp_costs GROUP BY dept_name) SELECT * FROM dept_costs WHERE dept_sal > (SELECT MAX(avg_sal) FROM dept_costs) ORDER BY dept_name;

Page 17: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 17

Using PL/SQL function in UPDATE Statement DROP TABLE NEWEMP PURGE; CREATE TABLE newemp AS SELECT * FROM employees; ALTER TABLE newemp ADD tax_amount number(10,2); UPDATE /*+ WITH_PLSQL */ newemp E SET tax_amount=(WITH FUNCTION TAX(P_AMOUNT IN NUMBER) RETURN NUMBER IS M NUMBER; BEGIN IF P_AMOUNT <8000 THEN M:=0.08; ELSIF P_AMOUNT <18000 THEN M:=0.25; ELSE M:=0.3; END IF; RETURN P_AMOUNT*M; END; SELECT tax(salary) FROM employees M WHERE m.employee_id=e.employee_id); / SELECT salary, tax_amount FROM newemp ORDER BY salary;

Page 18: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 18

Using PL/SQL function in CREATE VIEW Statement CREATE OR REPLACE VIEW proba As WITH FUNCTION TAX(P_AMOUNT IN NUMBER) RETURN NUMBER IS M NUMBER; BEGIN IF P_AMOUNT <8000 THEN M:=0.08; ELSIF P_AMOUNT <18000 THEN M:=0.25; ELSE M:=0.3; END IF; RETURN P_AMOUNT*M; END; dept_costs AS ( SELECT d.department_name, SUM(e.salary) dept_total, TAX(SUM(E.SALARY)) TAX_AMOUNT FROM employees e JOIN departments d ON e.department_id = d.department_id GROUP BY d.department_name), avg_cost AS ( SELECT AVG(dept_total) dept_avg, SUM(TAX_AMOUNT) TAX FROM dept_costs) SELECT * FROM dept_costs WHERE dept_total > (SELECT dept_avg FROM avg_cost) ORDER BY department_name;

Page 19: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 19

PL/SQL New Features

• Privilege Analysis • ACCESSIBLE BY Clause • More PL/SQL-Only Data Types Can Cross PL/SQL-to-SQL

Interface • Invoker's Rights Functions Can Be Result-Cached • Database Triggers on PDBs • New procedure in DBMS_UTILITY • New Package: UTL_CALL_STACK • Hidden automatic bulk processing

Page 20: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 20

BEGIN DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE ( name => 'Privs_HR_OE_logged_users', description => 'All privileges used by HR or OE', type => dbms_privilege_capture.g_context, condition => q'# SYS_CONTEXT('USERENV','SESSION_USER') IN ('HR' , 'OE') #' ); END; / BEGIN SYS.DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE ( name => 'Privs_HR_OE_logged_users'); END; /

Privilege Analysis Database Vault lincense needed

.

Increase database security: Revoke unused privileges • Analyze used privileges to revoke unnecessary privileges. • Use new package: DBMS_PRIVILEGE_CAPTURE

Page 21: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 21

Privilege Analysis Database Vault lincense needed

SQL> select USERNAME, SYS_PRIV, OBJ_PRIV, OBJECT_OWNER, OBJECT_NAME 2 from DBA_USED_PRIVS ; USERNAME SYS_PRIV OBJ_PRIV OBJECT_OWNER OBJECT_NAME ----------- ------------------ --------- ------------- ------------ HR CREATE SESSION TOM SELECT SH SALES OE UPDATE HR DEPARTMENTS SQL> select USERNAME, OBJ_PRIV, OBJECT_NAME, PATH 2 from DBA_USED_OBJPRIVS_PATH where username in ('TOM','JIM') USERNAME OBJ_PRIV OBJECT_NAME PATH --------- --------- ------------- -------------------------------- OE UPDATE DEPARTMENTS GRANT_PATH('OE') JIM DELETE EMPLOYEES GRANT_PATH('JIM', 'HR_MGR') TOM SELECT SALES GRANT_PATH('TOM', 'SALES_CLERK')

SQL> select USERNAME, OBJ_PRIV, OBJECT_NAME, PATH 2 from DBA_UNUSED_PRIVS where username='JIM'; USERNAME OBJ_PRIV OBJECT_NAME PATH -------- -------- ------------- --------- -------------------- JIM INSERT EMPLOYEES GRANT_PATH('JIM','HR_MGR') JIM UPDATE EMPLOYEES GRANT_PATH('JIM','HR_MGR')

Page 22: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 22

ACCESSIBLE BY clause I. CREATE OR REPLACE FUNCTION TAX(P_AMOUNT IN NUMBER) RETURN NUMBER ACCESSIBLE BY (depts,scott.depts2) IS M NUMBER; BEGIN IF P_AMOUNT <8000 THEN M:=0.08; ELSIF P_AMOUNT <18000 THEN M:=0.25; ELSE M:=0.31; END IF; RETURN P_AMOUNT*M; END; / GRANT EXECUTE ON TAX TO SCOTT;

Page 23: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 23

ACCESSIBLE BY clause II.

CREATE OR REPLACE PROCEDURE depts(P_DEPTNO NUMBER) IS SUMMARY NUMBER:=0; V_DEPT_NAME DEPARTMENTS.DEPARTMENT_NAME%TYPE; BEGIN SELECT SUM(SALARY) INTO SUMMARY FROM EMPLOYEES WHERE DEPARTMENT_ID=P_DEPTNO; SELECT DEPARTMENT_NAME INTO V_DEPT_NAME FROM DEPARTMENTS WHERE DEPARTMENT_ID=P_DEPTNO; DBMS_OUTPUT.PUT_LINE ('Total salary for '||V_DEPT_NAME||': '||summary); --Calling; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('No department !'); END depts; / EXEC DEPTS(90)

Page 24: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 24

More PL/SQL-Only Data Types Can Cross PL/SQL-to-SQL Interface

CREATE OR REPLACE FUNCTION p(x boolean) RETURN VARCHAR2 IS BEGIN IF x THEN RETURN 'x is true'; ELSE RETURN 'x is false'; END IF; END; / set serveroutput on DECLARE l boolean:=5=6; s varchar2(30); begin SELECT p(l) INTO s FROM dual; dbms_output.put_line('the string: '||s); END; /

Page 25: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 25

New procedure in DBMS_UTILITY EXPAND_SQL_TEXT

CREATE OR REPLACE VIEW ed AS SELECT e.employee_id, e.last_name, d.department_id, d.department_name FROM employees E, departments d WHERE e.employee_id = d.department_id; SELECT * FROM ed; VAR txt VARCHAR2(500) SET AUTOPRINT ON EXEC DBMS_UTILITY.EXPAND_SQL_TEXT ('SELECT * FROM ed',:txt)

• Recursively replaces any view references in the input SQL query with the corresponding view subquery

Page 26: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 26

Using  UTL_CALL_STACK  (Tom  Kyte’s  demo) http://tkyte.blogspot.hu/2013/06/12c-utlcallstack.html

CREATE OR REPLACE PROCEDURE CALLING AS Depth pls_integer := UTL_Call_Stack.Dynamic_Depth(); d pls_integer:=0; PROCEDURE headers is begin dbms_output.put_line( 'Depth Number Name ' ); dbms_output.put_line( '---------- ----------- -------------------------' ); end headers; BEGIN DBMS_Output.Put_Line('Depth:'||Depth||chr(10)); headers; for j in reverse 1..Depth loop d:=d+1; DBMS_Output.Put_Line( lpad( utl_call_stack.lexical_depth(j), 10 ) ||rpad( d, 7) || lpad( To_Char(UTL_Call_Stack.Unit_Line(j), '99'), 9 ) || lpad(UTL_Call_Stack.Concatenate_Subprogram(UTL_Call_Stack.Subprogram(j)),30,' ')); end loop; END CALLING; /

Page 27: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 27

Explicit auto bulk processing CREATE OR REPLACE PROCEDURE BULK_LIMIT(rows NUMBER := 10) IS CURSOR c_big_emp is SELECT * FROM big_emp; type c_type is table of BIG_EMP%rowtype; emp c_type; S NUMBER:=0; n1 number; n2 number; BEGIN n1:=dbms_utility.get_cpu_time; OPEN c_big_emp; LOOP FETCH c_big_emp BULK COLLECT INTO EMP LIMIT rows; EXIT WHEN c_big_emp%NOTFOUND and emp.count=0; FOR I IN 1..EMP.COUNT LOOP S:=S+ EMP(I).SALARY; END LOOP; END LOOP; CLOSE c_big_emp ; n2:=dbms_utility.get_cpu_time; DBMS_OUTPUT.PUT_LINE('diff:'||to_char((n2-n1)/100)||'S:='||S); END; / EXEC BULK_LIMIT(1000)

Page 28: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 28

Hidden auto bulk processing

CREATE OR REPLACE PROCEDURE trad_fetch_for IS CURSOR C1 IS SELECT * FROM BIG_EMP; S NUMBER:=0; n1 number; n2 number; BEGIN n1:=dbms_utility.get_cpu_time; FOR EMP2 IN C1 LOOP S:=S+ EMP2.SALARY; END LOOP; n2:=dbms_utility.get_cpu_time; DBMS_OUTPUT.PUT_LINE('diff:'||to_char((n2-n1)/100)||'S:='||S); END; / set timing on set serveroutput on exec trad_fetch_for

Page 29: SQL and PL/SQL New Features in Oracle Database 12c ...konferenciak.advalorem.hu/uploads/files/DB_08_SQL Ă©s PLS_QL... · SQL and PL/SQL New Features-- 3 Siófok, 2014, 04.26. HOUG

Siófok, 2014, 04.26. HOUG 2014 SQL and PL/SQL New Features-- 29

Czinkóczki László

[email protected]

http://sqlplsql.wordpress.com

Köszönöm a figyelmet!