Académique Documents
Professionnel Documents
Culture Documents
Presenter
V.Hariharaputhran
www.puthranv.com
Who am I
-Data Modeler
-Developer
-SQL Tuning
-Replication/Migration
Member of AIOUG Since 2009
Blogger www.puthranv.com
FB Hariharaputhran Vaithinathan
Objectives
To make you all learn Oracle 12c Completely
Present few key features of Oracle 12c for
developers
Data Redaction
Stored Data
Redacted Results
05/04/1981
01/01/2001
Partial
012-54-7845
XXX-XX-7845
RegExp
juan.tom@abc.com
[hidden]@abc.com
Random
7845-2356-12344578
4545-6363-23567412
Full
BEGIN
DBMS_REDACT.ADD_POLICY(
OBJECT_SCHEMA => 'C##REDACT',
OBJECT_NAME => 'CREDIT_CARD',
COLUMN_NAME => 'CARD_ID',
POLICY_NAME => 'PARTIAL_CREDIT_CARD_ID',
FUNCTION_TYPE => DBMS_REDACT.REGEXP,
EXPRESSION => '1=1',
REGEXP_PATTERN => '(\d{4})-(\d{4})-(\d{4})-(\d{4})',
REGEXP_REPLACE_STRING => 'XXXX-XXXX-\2',
REGEXP_POSITION => 1,
REGEXP_OCCURRENCE => 0,
REGEXP_MATCH_PARAMETER => 'ic');
END;
/
BEGIN
DBMS_REDACT.ADD_POLICY(
OBJECT_SCHEMA => 'C##REDACT',
OBJECT_NAME => 'CREDIT_CARD',
COLUMN_NAME => 'CARD_ID',
policy_name => 'redact_full_card',
function_type=> DBMS_REDACT.FULL,
expression =>
'SYS_CONTEXT(''USERENV'',''SESSION_USER'')!
=''MANAGER''');
END;
/
SQL> SHOW USER
USER is "C##REDACT"
SQL>
SQL> SELECT * FROM CREDIT_CARD;
CUSTOMER_ID
-------------------A0001
A0002
CUSTOMER_NAME
-------------------------RAJINI
JUAN
CARD_ID
-----------
CARD_ID
--------
CARD_VAL
--------0
0
CARD_DT
-----------01-JAN-01
01-JAN-01
Prior 12c
Create a schema level object type to match the
structure of the non-SQL package type
In 12c
PL/SQL package types supported as binds in JDBC
Execute PL/SQL subprograms with non-SQL types
Prior to 12c
Impossible to bind PL/SQL-only data types to SQL statements
Boolean
Package-level record
Package-level collection
In 12c
The type can be defined in a package spec can be indexed by pls_integer
table
CREATE OR REPLACE
PACKAGE
pkg_plsql_in_sql
AS
TYPE associative_array
IS
TABLE OF VARCHAR2
(100) INDEX BY
PLS_INTEGER;
END pkg_plsql_in_sql;
/
TABLE OPERATOR
DECLARE
lv_associative_array
pkg_plsql_in_sql.associative_array;
BEGIN
lv_associative_array(1):='SANGAM14';
lv_associative_array(2):='AIOUG';
FOR REC IN
(SELECT * FROM
TABLE(lv_associative_array))
LOOP
DBMS_OUTPUT.put_line (
rec.COLUMN_VALUE);
END LOOP;
END;
/
DECLARE
lv VARCHAR2(10);
lv_array
pkg_plsql_in_sql.associative
_array;
BEGIN
lv_array(1) := 'SANGAM14';
SELECT
SELECT f1(lv_array)
f1(lv_array) INTO
INTO lv
lv
FROM dual;
dual;
FROM
dbms_output.put_line('lv =
'||lv);
END;
/
DECLARE
lv VARCHAR2(10);
lv_array
pkg_plsql_in_sql.associative
_array;
BEGIN
lv_array(1) := 'SANGAM14';
EXECUTEimmediate
immediate'select
'select
EXECUTE
f1(:a)
from
Dual'
INTO
f1(:a)
from
Dual'
INTO
lv lv
USING
lv_array;
USING
lv_array;
dbms_output.put_line('lv =
'||lv);
END;
/
BEGIN
EXECUTE immediate
'begin
SP_BIND_BOOLEAN(:a); end;'
USING true;
END;
/
CUSTOMER_ID CUSTOMER_NAME
CARD_ID
---------- ------------------------------------ -----------A0001
RAJINI 9999-9999-9999-9999
A0002
JUAN
12451235-1256-9999
Table altered.
CARD_ID
------------9999-9999-9999-9999
1245-1235-1256-9999
CUSTOMER_NAME
CARD_ID
--------------------------- ------------- ----------RAJINI
9999-9999-9999-9999
JUAN
1245-1235-1256-9999
CUSTOMER_ID
INVISIBLE COLUMNS
ID_VAL
ID_DT
-----------------ORACLE1 26-SEP-14
ORACLE2 25-SEP-14
ORACLE3 24-SEP-14
ORACLE4 23-SEP-14
ORACLE5 22-SEP-14
ID_DT
--------26-SEP-14
25-SEP-14
24-SEP-14
23-SEP-14
22-SEP-14
RID
------1
2
3
COL
-----A
B
C
OBJECT_ID
TEST_IDENTIFY
92911
ISEQ$$_92911
92912
4 ID1
NUMBER,
5 ID_VAL
VARCHAR2(10)
6 );
Table created.
1 row created.
SQL> SELECT * FROM IDENTITY_NODEFAULT;
1 row created.
SQL> SELECT * FROM IDENTITY_DEFAULT;
ID
---------1
ID1
---------1
ID_VAL
---------ORACLE
ID
---------1
ID1
---------1
ID_VAL
---------ORACLE
GENERATED AS IDENTITY
SQL> INSERT INTO
IDENTITY_NODEFAULT(ID,ID1,ID_VAL) VALUES
(1,1,'ORACLE');
INSERT INTO IDENTITY_NODEFAULT(ID,ID1,ID_VAL)
VALUES (1,1,'ORACLE')
*
ERROR at line 1:
ORA-32795: cannot insert into a generated always identity
column
GENERATED BY DEFAULT ON
NULL AS IDENTITY
SQL> INSERT INTO
IDENTITY_DEFAULT(ID,ID1,ID_VAL) VALUES
(1,1,'ORACLE');
1 row created.
ID
---------1
ID
---------1
1
ID1
---------1
ID_VAL
---------ORACLE
ID1
---------1
1
ID_VAL
---------ORACLE
ORACLE
Restrictions
Only for numeric data types
A table can only contain one identity column
Non-identity column cannot be modified to
identity column(But you can alter a nonIdentity table to include a Identify Column)
CTAS ignores the identity definition
Extended Varchars
MAX_SQL_STRING_SIZE
LEGACY
EXTENDED
Oracle 12c
SELECT
ID_DESC,SNO
FROM test
FETCH FIRST
5 rows only
Oracle 12c
SELECT
ID_DESC,SNO
FROM test
FETCH FIRST
5 percent
rows only
Oracle 12c
CREATE OR REPLACE
PROCEDURE
Fetch_test
AS
p_resultset
sys_refcursor;
BEGIN
OPEN p_resultset
FOR SELECT * FROM
test;
DBMS_SQL.RETURN_
RESULT(p_resultset);
END;
/
NEXTVAL
---------1
SQL> SELECT SEQ_SESSION1.NEXTVAL FROM DUAL;
NEXTVAL
---------2
SQL> CONN c##hari/hari@orcl
Connected.
SQL>
SQL> SELECT SEQ_SESSION1.NEXTVAL FROM DUAL;
NEXTVAL
---------1
Prior 12c
Cannot truncate the parent table if foreign
key constraint enabled
Cannot truncate the parent table of a
reference-partitioned table
In 12c
Yes, if the foreign key is defined with ON
DELETE CASCADE option.
Elena
BEQUEATH_T1
ID_NUM
ID_VAL
ID_DT
I AM C##ELENA
14-09-14
I AM C##ELENA
13-09-14
RETURN l_count;
END;
/
Juan
ORACLE 11G
BEQUEATH_T1
ID_NUM
ID_VAL
ID_DT
I AM C##JUAN
16-09-14
I AM C##JUAN
17-09-14
ID_NUM ID_VAL
FNCNT
---------- -------------------- --------1 I AM C##ELENA
1
2 I AM C##ELENA
1
ORACLE 12C
SQL> select * from c##elena.V_CNT_NORMAL;
ID_NUM ID_VAL
FNCNT
---------- -------------------- --------1 I AM C##ELENA
1
2 I AM C##ELENA
0
Prior 12c
The WITH clause included only in subquery
factoring
In 12c
Oracle 12c allows definition of PL/SQL
Functions and Procedures using SQLs
Common Table Expression (WITH)
Since defined locally it reduces contextswitch costs
Local PL/SQL is not stored in the database
Name resolution
Statement-level function names have precedence over schema-level stored
functions
ID_DT
--------28-SEP-14
28-SEP-14
28-SEP-14
28-SEP-14
28-SEP-14
Prior 12c,
Three functions in the DBMS_Utility package
Format_Call_Stack()
Format_Error_Stack()
Format_Error_Backtrace()
In 12c
The package UTL_Call_Stack solves the same problem properly
L2;
END L1;
PROCEDURE L2
IS
BEGIN
L3;
END L2;
PROCEDURE L3
IS
BEGIN
RAISE NO_DATA_FOUND;
EXCEPTION
In 12c
test.dat
ORACLE,1
ORACLE,2
ORACLE,3
ORACLE,4
TEST.dat
TEST_%p.bad
Log File
none specified
External Table
FIRST
NEXT
* ,
* ,
CHARACTER
CHARACTER
Restrictions
Cannot create a B-tree AND B-tree cluster index
EBR
Oracle 12c
Materialized Views may use EBR
Virtual Columns may use EBR
Q&A
Presenter
V.Hariharaputhran
www.puthranv.com