Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
KC Server Development Nieuwe SQL en PL/SQL features in Oracle 10gR2 en R1 incl. reprise van ODTUG presentatie 15 november 2005 KC Server Development – 15 november 2005 Oracle 10g’s Finest 1 Agenda 10gR2 – Een paar hoogtepuntjes uit release 2 van Oracle 10g (juli 2005) 10gR1 – Een bonte verzameling features en functies uit 10gR2 (juni 2004) De ODTUG 2005 presentatie: Oracle 10g’s Finest—The Top 3 SQL and PL/SQL Features New in 10g Diner Workshop AMIS LAB database (10gR2) KC Server Development – 15 november 2005 Oracle 10g’s Finest 2 10gR2 Aandachttrekkers Grenzen verkennen met DBMS_OUTPUT DML met Error Log – Constraint Violations allowed SQL*Plus Autotrace op basis van DBMS_XPLAN Conditional PL/SQL Compilation 10x snellere transacties - Asynchronous Commit Small fry KC Server Development – 15 november 2005 Oracle 10g’s Finest 3 Beyond DBMS_OUTPUT Wat is het resultaat van dit code fragment? A – Compilation Error B – Runtime Error C – 10 regels output D – 4 regels output en dan ORA-20000: ORU-10028 E – 10 regels output en dan ORA-20000: ORU-10028 KC Server Development – 15 november 2005 Oracle 10g’s Finest 4 Beyond DBMS_OUTPUT Wat is het resultaat van dit code fragment? Pre 10gR2: KC Server Development – 15 november 2005 Oracle 10g’s Finest 10gR2: 5 Beyond DBMS_OUTPUT 10gR2 Improvement for DBMS_OUTPUT Output limit from 255 to 32767 SET SERVEROUTPUT ON SIZE UNLIMITED KC Server Development – 15 november 2005 Oracle 10g’s Finest 6 Will the update statement always succeed? create table emp ( empno number , ename varchar2(10) , constraint emp_pk primary key (empno) ); insert into emp values(1,'sam'); insert into emp values(2,'joe'); update emp set empno=empno+1; KC Server Development – 15 november 2005 Oracle 10g’s Finest 7 Statement level Constraint Checking Will this statement succeed? add constraint sal_check check (sal < 6000) / alter table emp add constraint sal_check check (sal < 6000) / update emp set sal = sal + 2000 / KC Server Development – 15 november 2005 Oracle 10g’s Finest 8 Oracle 10gR2 – DML with Error Log begin dbms_errlog.create_error_log ('EMP' ,'ERROR_LOG_EMP‘ ) ; end; / update emp set sal = sal + 2000 LOG ERRORS INTO ERROR_LOG_EMP ('salary raise') REJECT LIMIT 1 / KC Server Development – 15 november 2005 Oracle 10g’s Finest 9 DML with Error Log - Errors logged for each failed record in the statement Rowid of the record that failed the Update or Delete Insert? Columns mirroring the table columns Hold the values that would have been if the DML operation had not failed Oracle Error numer and Message User defined tag KC Server Development – 15 november 2005 Oracle 10g’s Finest 10 SQL*Plus Autotrace with DBMS_XPLAN KC Server Development – 15 november 2005 Oracle 10g’s Finest 11 Conditional PL/SQL Compilation create or replace procedure p as begin $IF $$debug_code $THEN dbms_output.put_line( 'Our debug code' ); dbms_output.put_line( 'Would go here' ); $END dbms_output.put_line( 'And our real code here' ); end; alter procedure P compile plsql_ccflags = 'debug_code:true' reuse settings; KC Server Development – 15 november 2005 Oracle 10g’s Finest 12 Conditional PL/SQL Compilation alter procedure P compile plsql_ccflags = 'debug_code:true' reuse settings; KC Server Development – 15 november 2005 Oracle 10g’s Finest 13 Conditional PL/SQL Compilation - Use $error directive to ‘throw’ compilation errors ... $if $$plsql_optimize_level !=1 $then $error 'This program must be compiled at optimization_level 1' $end $end ... KC Server Development – 15 november 2005 Oracle 10g’s Finest 14 Conditional PL/SQL Compilation You can leave your - really slow - debug code in your application now—and turn it on and off at will. You can program assertions as you might in C or Java. Each subprogram can test the values of its inputs, for example, and verify that they meet some criteria. These tests can be active during the whole development cycle and inactive for production. However, they remain as formal documentation of the conditions upon which the unit depends, and can be simply reactivated for debugging a production-time bug. You can write database version-independent code Program one package with code sections for version X and version Y; during compilation, depending on the ‘condition’, one of the two is compiled Check out the new DBMS_DB_VERSION supplied package. The same applies to multi-locale, multi-customer, multi-platform One set of packages, conditional code sections per locale/customer/… You can support best practices during unit testing. For production, helper subprograms will be declared in a package body. For calls from a unit-testing framework, they are conditionally declared in the specification. KC Server Development – 15 november 2005 Oracle 10g’s Finest 15 Conditional PL/SQL Compilation Use Compile Time variables to insert static strings in the PL/SQL code $$PLSQL_UNIT $$PLSQL_LINE Use DBMS_DB_VERSION package to retrieve information about the compile time environment RELEASE , VER_LE_9_2 , VER_LE_10_1 , VER_LE_10_2 Instead of Session Level plsql_ccflags settings, you can also refer to Package variables (constants!) Use package DBMS_PREPROCESSOR to retrieve the source as it is active after compilation View USER_PLSQL_OBJECT_SETTINGS to retrieve the values of the flags at compilation time KC Server Development – 15 november 2005 Oracle 10g’s Finest 16 What takes longer? A – 300 small Commits B – One Large Commit KC Server Development – 15 november 2005 Oracle 10g’s Finest 17 What happens during Commit? Log writer process flushes the contents of the REDO LOG buffers to the disk To each of the specified Redo Log files Not until the O/S signals the successful completion of this write process (for each of the Redo Log files) is the commit considered complete Only then will no data have been lost upon immediate database crash The Client has to wait for this write process to complete! KC Server Development – 15 november 2005 Oracle 10g’s Finest 18 Asynchronous Commit With the statement COMMIT WRITE BATCH NOWAIT ; You can instruct Oracle to NOT wait for the Redo Log writing before returning control to the Client Consequences: Transaction ‘completes’ much faster You stand the risk of losing transactions • Eventually, the database will crash and some committed transactions will have been lost! Typical Usage Frequent, small, non-crucial transactions such as realtime measurements, stocks tickers, visit-statistics etc. KC Server Development – 15 november 2005 Oracle 10g’s Finest 19 Asynchronous Commit Example KC Server Development – 15 november 2005 Oracle 10g’s Finest 20 10gR2 Small Fry Transparent Data Encryption The data is stored encrypted on-disk, so that even if someone steals your database, the information is protected .Net support Stored Procedures in .Net languages C# and VB.NET XML DB: XSLT 2.0, XQuery, … Data Pump direct compress CLOB and BLOB over database links PL/SQL Data Mining Restore Points easier Flashback to ‘logically labeled SCN’ Unicode 4.0 – 1226 new characters UTL_NA for Matrix calculations Rules Manager KC Server Development – 15 november 2005 Oracle 10g’s Finest 21 10g Features and Functions Data Pump “Insertable” External Table Merge improvements Partition Outer Join Regular Expressions (regexp) Flashback in overdrive Database Recycle Bin KC Server Development – 15 november 2005 Oracle 10g’s Finest 22 Data Pump New Integrated Import/Export architecture New utilities expdp, impdp Uses External Table Data Pump Unload High speed direct-path load/unload Serial speedup up to 10x for import and 2x for export Complete server-site utility infrastructure Automatically scales using parallel execution Restart capabilities after stop or failure Job runtime and size estimations Progress monitoring Public documented APIs KC Server Development – 15 november 2005 Oracle 10g’s Finest 23 External Table unload Unload data with a simple CTAS Using pretty much any query Combine multiple files from many source systems into one big “Create” to facilitate merging Subsetting made easy Supports parallel unload and reload Does not support BFILE (easy workaround using dbms_lob.filegetname in a query) LONG / LONG RAW (easy workaround using TO_LOB) ‘final object types’ – workable solutions KC Server Development – 15 november 2005 Oracle 10g’s Finest 24 MERGE Optimizations MERGE can be used as INSERT-only respective UPDATE-only operation More efficient plans No outer join necessary (UPDATE-only) Can use ANTI-JOIN (INSERT-only) Conditional INSERT and UPDATE branches Full flexibility for individual data filtering Optional DELETE clause for UPDATE branch Implicit Data Maintenance KC Server Development – 15 november 2005 Oracle 10g’s Finest 25 Example of Merge in 10g Conditional Update, Delete and Insert Note: either update or insert can be omitted MERGE INTO Products P – Destination table USING Product_Changes S – Source table ON (P.PROD_ID = S.PROD_ID) -- Search/Join condition WHEN MATCHED THEN UPDATE -- update if join SET P.PROD_LIST_PRICE = S.PROD_NEW_PRICE WHERE P.PROD_STATUS <> "OBSOLETE" -- Conditional UPDATE DELETE WHERE (P.PROD_STATUS = "OBSOLETE") WHEN NOT MATCHED THEN INSERT -- insert if not join (prod_id, prod_status,prod_new_price) values (...) WHERE S.PROD_STATUS <> "OBSOLETE" -- Conditional INSERT KC Server Development – 15 november 2005 Oracle 10g’s Finest 26 Join Options Cross Join (cartesian result set) Every record from A combined with every record in B (Inner) Join Only records from A that match on join key with records from B and vice versa Right Outer Join All records from B with matching records from A where available and “empty” A records otherwise Partition By Right Outer Join All records from B with – per partition in A - matching records where available and “empty” A records otherwise KC Server Development – 15 november 2005 Oracle 10g’s Finest 27 Example Joining – Voornamen en Achternamen CROSS JOIN 24 records INNER JOIN 4 records RIGHT OUTER JOIN 5 records PARTITION BY (geslacht) RIGHT OUTER JOIN 6 records KC Server Development – 15 november 2005 Oracle 10g’s Finest 28 Partitioned Outer Join New outer join syntax enabling easy specification and high performance for joins that "densify" sparse data. To specify comparison calculations and to format reports reliably, best to return a consistent set of dimension members in query results Yet data normally stored in "sparse" form: why waste space storing non-occurrence? Ugly and slow SQL needed to add back rows for nonexistent cases into query output. Most frequently used to replace missing values along time dimension. Proposed to ANSI for SQL standard. KC Server Development – 15 november 2005 Oracle 10g’s Finest 29 For each department, get the number of employees hired per year select , , from group by , d.dname department year count(empno) "number of hires" emp e right outer join ( select distinct extract(year from hiredate) year from emp ) years on extract(year from e.hiredate) = year right outer join dept d on (e.deptno = d.deptno) year d.dname KC Server Development – 15 november 2005 Oracle 10g’s Finest 30 Partition Outer Join – For each department, get the number of employees hired per year select , , from d.dname department year count(empno) "number of hires" emp e partition by (deptno) right outer join ( select distinct extract(year from hiredate) year from emp ) years on extract(year from e.hiredate) = year right outer join dept d on (e.deptno = d.deptno) group by , year d.dname KC Server Development – 15 november 2005 Oracle 10g’s Finest 31 Partition Outer Join – For each department, get the number of employees hired per year select , , from group by , d.dname department year count(empno) "number of hires" emp e partition by (deptno) right outer join ( select distinct extract(year from hiredate) year from emp ) years on extract(year from e.hiredate) = year right outer join dept d on (e.deptno = d.deptno) year d.dname KC Server Development – 15 november 2005 Oracle 10g’s Finest 32 Regular Expressions POSIX compliant regular expression functionality with additional multilingual support similar to like, instr, substr, replace Support for VARCHARs and CLOBs Four functions – SQL and PL/SQL: regexp_like, regexp_instr, regexp_substr and regexp_replace SELECT first_name, last_name FROM employees WHERE REGEXP_LIKE (first_name, ’^Ste(v|ph)en$’); FIRST_NAME -------------------Steven Steven Stephen LAST_NAME ------------------------King Markle Stiles KC Server Development – 15 november 2005 Oracle 10g’s Finest 33 Flashback Flashback Query 9iR1 – primitive Had to open flashback cursors before doing any DML It worked, but was not “easy” KC Server Development – 15 november 2005 Oracle 10g’s Finest 37 Flashback Flashback Query 9iR2 – sophisticated No need to open cursors before doing modifications Can flashback in SQL, no packages needed Can flashback in modifications It worked and was much easier • • • Could join the table with itself as of N minutes ago Put update a set of rows, put them back as they were N minutes ago In SQL KC Server Development – 15 november 2005 Oracle 10g’s Finest 38 Flashback In 10g Flashback Query Flashback Table Flashback Row History Flashback Drop Flashback Database KC Server Development – 15 november 2005 Oracle 10g’s Finest 39 Flashback – Flashback Row History Instead of “show me the data as of”, you can say “show me all versions of the data between” Select ename, sal from emp versions between timestamp a and b where ename = ‘SCOTT’ ENAME SAL ---------- ---------SCOTT 3000 SCOTT 3300 SCOTT 3630 … KC Server Development – 15 november 2005 Oracle 10g’s Finest 45 Flashback – Flashback Row History See related information about each row SCN range the row was “valid for” Time range (approx) the row was valid for The transaction id (XID) that modified the row The operation (I/U/D) that was performed on the row select ename, sal, versions_operation, versions_starttime, versions_endtime, versions_startscn, versions_endscn, versions_xid from emp versions between timestamp &A and &B where empno = 7788 order by versions_startscn nulls first KC Server Development – 15 november 2005 Oracle 10g’s Finest 46 New Connect By Features CONNECT_BY_ROOT returns for the indicated column the value of the parent (prior) SELECT ename "Employee" record , CONNECT_BY_ROOT ename "Manager" FROM emp CONNECT BY PRIOR empno = mgr start with mgr is null Employee ---------JONES SCOTT Manager ---------KING KING Function CONNECT_BY_ISLEAF returns 0 for non-leaf nodes and 1 for leaf-nodes Functions CONNECT_BY_ISCYCLE and NO_CYCLE help prevent ‘end-less loops’ KC Server Development – 15 november 2005 Oracle 10g’s Finest 56 Other 10g Stuff Alternative Quoting Mechanism Automatic execution of Bulk Collect when a For Loop has been programmed Get the full Error Call-stack for the origin of an exception: dbms_utility.format_error_backtrace Column Level VPD Only enforce policy when user attempts to read specific columns Fine Grained Audit on DML events KC Server Development – 15 november 2005 Oracle 10g’s Finest 57 Oracle 10g’s Finest—The Top 3 SQL and PL/SQL Features New in 10g Lucas Jellema AMIS, The Netherlands KC Server Development – 15 november 2005 Oracle 10g’s Finest 58 Agenda Oracle 10g Release 1 for SQL and PL/SQL What I will not discuss SQL Model Clause The spreadsheet in your query Expression Filters The query in your tables DBMS_Frequent_Itemset Data Mining through PL/SQL KC Server Development – 15 november 2005 Oracle 10g’s Finest 59 10g Features I will not discuss (but could also have picked) Partition Outer Join Hierarchical Improvements (hear Tom Kyte, yesterday) Case Insensitive Query Regular Expressions (see Alan Wintersteen, session 10) Bulk DML Improvements – (FORALL) DBMS_SCHEDULER Alternative Quoting Returning Aggregate UTL_MAIL Data Pump Flashback Functionality (see David Anderson, right now) Merge Enhancements PL/SQL Compiler enhancements KC Server Development – 15 november 2005 Oracle 10g’s Finest 60 Apology For making some slight slide changes. No slight was intended, just better slides. KC Server Development – 15 november 2005 Oracle 10g’s Finest 61 Oracle 10g SQL Model Clause The SQL Model clause allows users to embed spreadsheet-like models in a SELECT statement in a way that was previously the domain of dedicated multidimensional OLAP servers such as Oracle Express and Oracle9i OLAP or Spreadsheets such as Excel Often, these models involve a series of macros that aggregate data over a number of business dimensions, over varying time periods, and following a set of complex business rules The aim of the SQL Model clause is to give normal SQL statements the ability to create a multidimensional array from the results of a normal SELECT statement carry out any number of interdependent inter-row and inter-array calculations on this array KC Server Development – 15 november 2005 Oracle 10g’s Finest 62 Query Structure with inline view[,inline view,...] select column [,column,...] | SQL Function(column) | user defined function| scalar subquery | user defined aggregate | cursor expression | case expression | analytical function from table [AS OF or VERSIONS] [SAMPLE clause] | view | inline view | external table | table function | cast nested table where <condition> | <join condition>|new join syntax| 10g Query Partition (Partition Outer Join) connect by group by [ ROLLUP | CUBE | GROUPING SETS] having model order [siblings] by [nulls first|nulls last] KC Server Development – 15 november 2005 Oracle 10g’s Finest 63 The MODEL Clause – like processing the result set in a spreadsheet select <expression> from <tables><views><in line views> join where { select ename , deptno , sal , model_measure dept_total from emp where sal > 1000 model ... order by deptno, ename Model processing: •Update ‘cells’ • Through calculations across cells • Get value from preceding or following row • Multi-row aggregation (count, max, min, sum, avg) • Create new cells (columns or measures) • Create new records (10g) Model order by Outer Query in case of In-Line View Result Set to Client KC Server Development – 15 november 2005 Oracle 10g’s Finest 64 What does the MODEL clause do? MODEL allows Any Column Value in the result set to be updated Columns to be added • The MODEL clause may return more columns than the underlying tables contain Rows to be added Choice between return all rows or only the new and updated rows Values of cells to be derived using expressions that • • • Reference existing cell-values May contain functions and aggregations such as SUM, MAX, MIN, AVG May use queries to retrieve values from outside the result set KC Server Development – 15 november 2005 Oracle 10g’s Finest 65 Model vs. Analytical Functions MODEL 10g Calculate Columns using inter-row calculations (direct cell-reference, max, min, sum, count, etc.) Update cells Insert rows Suppress untouched rows Use reference models 8.1.6 EE, 9iR2 SE Calculate Columns using inter-row calculations (lag, lead, first, last, rank, sum, max, min, count, avg,…) No update of values No creation of rows No suppression of rows More efficient (performance) Easier syntax KC Server Development – 15 november 2005 Oracle 10g’s Finest Analytical Functions 66 Example Model Clause Add an additional derived column total_sal select ename , deptno , sal , comm , total_sal from emp model main salary_model dimension by (ename) measures (sal, comm, 0 as total_sal, deptno ) ignore nav rules upsert ( total_sal[ANY]= sal[CV(ename)] + comm[CV(ename)] ) dimensions measures Cells correspond with measures Cells referenced through dimensions Only measures can be inserted or updated KC Server Development – 15 november 2005 Oracle 10g’s Finest 67 Example Model Clause Result of adding column TOTAL_SAL ( total_sal[ANY]= sal[CV(ename)] + comm[CV(ename)] ) KC Server Development – 15 november 2005 Oracle 10g’s Finest 68 Example Model Clause Calculate (and exclusively return) Grand Total select ename , total_sal from emp model return updated rows main salary_model dimension by ( ename ) measures (sal, comm, 0 as total_sal ) ignore nav rules upsert ( total_sal['GRAND']= sum(sal)[ANY] + sum(comm)[ANY] ) KC Server Development – 15 november 2005 Oracle 10g’s Finest 69 What happened with this last model? total_sal['GRAND'] = sum(sal)[ANY] + sum(comm)[ANY] KC Server Development – 15 november 2005 Oracle 10g’s Finest select ename , total_sal from emp model return updated rows 70 Example Model Clause Introducing Partitioning select deptno , ename , total_sal from emp model return updated rows main salary_model partition by (deptno) dimension by ( ename ) measures (sal, nvl(comm,0) comm , 0 as total_sal ) rules upsert ( total_sal['GRAND']= sum(sal)[ANY] + sum(comm)[ANY] ) KC Server Development – 15 november 2005 Oracle 10g’s Finest 71 Example Model Clause SELECT SUBSTR(country,1,20) country , SUBSTR(prod,1,15) prod , year , sales FROM sales_view WHERE country IN ('Italy','Japan') MODEL RETURN UPDATED ROWS PARTITION BY (country) –- for every country DIMENSION BY (prod, year) –- cells are referenced with these MEASURES (sale sales) -- the value to be derived RULES ( sales['Bounce', 2002] = sales['Bounce', 2001] + sales['Bounce', 2000], sales['Y Box', 2002] = sales['Y Box', 2001], sales['2_Products', 2002] = sales['Bounce', 2002] + sales['Y Box', 2002] ) ORDER BY country, prod, year; KC Server Development – 15 november 2005 Oracle 10g’s Finest 72 Example Model Clause COUNTRY -------------------Italy Italy Italy Japan Japan Japan PROD YEAR SALES --------------- ---------- ---------2_Products 2002 90387.54 Bounce 2002 9179.99 Y Box 2002 81207.55 2_Products 2002 101071.96 Bounce 2002 11437.13 Y Box 2002 89634.83 KC Server Development – 15 november 2005 Oracle 10g’s Finest 73 Visualization of MODEL clause KC Server Development – 15 november 2005 Oracle 10g’s Finest 74 MODEL Clause Inside the MODEL clause, you can use nifty features like CV(dimension) to refer to the current value of a certain dimension FOR loops over DIMENSION values • • e.g. sales[ ‘prodx’, for year in (2000,2001,2002)] = sales[CV(product), 1999 – (2002 - CV(year))] or even more interesting: sales[‘prodx’, for year in (select year from important_years)] = …. Use symbolic references like ANY and ‘year > 2000’ Use ITERATE to evaluate rules a fixed number of times Use Reference Models to retrieve supporting values from KC Server Development – 15 november 2005 Oracle 10g’s Finest 75 Example Model Clause Creating new rows SELECT cell num FROM DUAL MODEL DIMENSION BY (0 attr) MEASURES (0 cell) RULES ITERATE (10) ( cell[iteration_number] = iteration_number) KC Server Development – 15 november 2005 Oracle 10g’s Finest 76 Pivoting the result set using the Model Clause DEPTNO ---------10 30 20 NR1 ---------KING BLAKE SCOTT NR2 ---------CLARK ALLEN FORD NR3 ---------MILLER TURNER JONES This my goal This is Step One select deptno , ename , row_number() OVER ( PARTITION BY deptno ORDER BY sal desc NULLS LAST) rnk from emp order by deptno , rnk / KC Server Development – 15 november 2005 Oracle 10g’s Finest 77 Pivoting the result set using the Model Clause select deptno , nr1 , nr2 , nr3 from emp model return updated rows partition by (deptno) –- do this thing for each Department dimension by (row_number() OVER (PARTITION BY deptno ORDER BY sal desc NULLS LAST) rnk ) -– each position gets its own result column measures (ename, lpad(' ',10) nr1 , lpad(' ',10) nr2 , lpad(' ',10) nr3) rules upsert ( nr1 [0] = ename [1] , nr2 [0] = ename [2] , nr3 [0] = ename [3] ) KC Server Development – 15 november 2005 Oracle 10g’s Finest 78 10g - Expression Filters Oracle 10g Expression Filter Store filter expressions Select records that comply with the stored filters • Or the filters that match specific records! Filter expressions express • • • Customer interest Regulation or business rule Match applicant with jobs and vice versa Jobs have associated profile== filter Application has profile == expression filter KC Server Development – 15 november 2005 Oracle 10g’s Finest 79 Expression Filters (10g) “Given data, find consumers for it” Expression Filters like stored Where-clauses plus framework for efficient dynamic evaluation What is an expression filter ? Feature to manage and evaluate conditional expressions that describe users interests in data Allows you to store conditional expressions in a column, which you can then use in the WHERE clause of a database query Expression Filter includes: Expression datatype, SQL EVALUATE operator, Expression indexing (Enterprise Edition only) Administrative utilities KC Server Development – 15 november 2005 Oracle 10g’s Finest 80 Overview of Expression Filters Attribute Set Car4Sale Attribute Set Assignment Linking column with filter clause To AttributeSet and Object Type Table Consumers Cid Zip Phone Interest Object Type Car4Sale Model Year Price Mileage Consumer Interest specified through “Filter” Clause, such as: 'Model=''Taurus'' and Price < 15000 and Mileage < 25000' select * from consumers where evaluate ( interest , Car4Sale('Mustang', 2000, 18000 , 22000).getVarchar() ) = 1 KC Server Development – 15 november 2005 Oracle 10g’s Finest 81 Expression Filters (10g) Basic steps to create and use an expression column Define an attribute set Create user table with expression column (or add new varchar2 column to existing table) Assign attribute set to the expression column in the table Insert expressions in the table Apply the SQL EVALUATE operator Applying the SQL evaluate Operator The EVALUATE operator returns 1 for an expression that evaluates to true for the data item and 0 otherwise. The EVALUATE operator is used in the WHERE clause of a standard SQL query or DML (UPDATE or DELETE) statement. KC Server Development – 15 november 2005 Oracle 10g’s Finest 82 Overview of Expression Filters Using Expression Filter in Table Join Table Inventory Attribute Set Car4Sale Model Year Price Mileage Table Consumers Cid Zip Phone Interest Object Type Car4Sale Model Year Price Mileage Consumer Interest specified through “Filter” Clause, such as: 'Model=''Taurus'' and Price < 15000 and Mileage < 25000' select consumers.*, inventory.* from consumers, inventory where evaluate ( interest , Car4Sale(model, year, price, mileage).getVarchar() ) = 1 KC Server Development – 15 november 2005 Oracle 10g’s Finest 83 Steps to set up Expression Filters Create an object type as source for the Expression Attribute Set CREATE OR REPLACE TYPE Car4Sale AS OBJECT ( Model VARCHAR2(20) , Year NUMBER , Price NUMBER , Mileage NUMBER ); Defining an attribute set based on the type BEGIN DBMS_EXPFIL.CREATE_ATTRIBUTE_SET ( attr_set => 'Car4Sale‘ , from_type => 'YES‘ ); END; KC Server Development – 15 november 2005 Oracle 10g’s Finest 84 Expression Filters (10g) The Expression Attribute Set Defined as special Oracle Object Type that carries all valid variables for the set Implicitly includes all the built-in functions Possible to add user-defined functions May contain XPath predicates defined on XMLType attributes Expressions must adhere to SQL Where Clause format • Subqueries are not allowed! Not required to use all the defined elementary attributes (null is acceptable) Two ways to create an attribute set • • use dbms_expfil.create_attribute_set in combination with dbms_expfil.add_elementary_attribute (automatically creates object) use an existing object type to create an attribute set dbms_expfil.create_attribute_set(attr_set => 'car4sale',from_type => 'yes')) KC Server Development – 15 november 2005 Oracle 10g’s Finest 85 Typical Usage of Expression Filters To screen incoming data Find matches with expressed interests or conditions • • We have found an item that may be exactly what you’re looking for A suspect has just entered the country Find non-matches • • This new piece of data does not meet one of (y)our standards This record does not adhere to this business rule To screen existing data for new interests, conditions, standards or rules Because of this new EU regulation, we have to redesign these products… KC Server Development – 15 november 2005 Oracle 10g’s Finest 91 Business Rule example Deptno Emp empno ename job sal deptno dname Business Rules label table msg EMP1 DPT1 EMP2 DPT2 BOS1 CREATE OR REPLACE TYPE loc BusinessRuleConditions AS OBJECT ( Condition1 VARCHAR2(20) , Condition2 VARCHAR2(20) , Condition3 VARCHAR2(20) , Condition4 VARCHAR2(20) , Condition5 VARCHAR2(20) ); KC Server Development – 15 november 2005 Oracle 10g’s Finest BEGIN expression DBMS_EXPFIL.CREATE_ATTRIBUTE_SET ( attr_set => EMP 001 'BusinessRuleConditions' DEPT 011 , from_type => 'YES' EMP 002 ); BEGIN DEPT 012 END; DBMS_EXPFIL.ASSIGN_ATTRIBUTE_SET BONUS 021 ( attr_set => 'BusinessRuleConditions' , expr_tab => 'Business_Rules' , expr_col => 'br_expression' ); END; 92 Inserting the business rules as Expressions Deptno Emp empno ename job Business Rules label table msg EMP1 DPT1 EMP2 DPT2 BOS1 EMP DEPT EMP DEPT BONUS 001 011 002 012 021 sal deptno dname loc INSERT INTO Business_rules VALUES ('EMP1', '001','EMP', 'Condition1 =''SALESMAN'' or Condition2 is null'); INSERT INTO Business_rules VALUES ('EMP2', '002','EMP', '(sysdate - to_date(condition3)) <8500'); INSERT INTO Business_rules VALUES ('DPT1', '001','DEPT', 'Condition2 <>''SALES'' or Condition3 expression <> ''PARIS'' '); Condition1 =''SALESMAN'' or Condition2 is null Condition2 <>''SALES'' or Condition3 <> ''PARIS'' (sysdate - to_date(condition3)) <8500 012 021 KC Server Development – 15 november 2005 Oracle 10g’s Finest 93 Data Mining from PL/SQL KC Server Development – 15 november 2005 Oracle 10g’s Finest 96 PL/SQL API for Data Mining: DBMS_FREQUENT_ITEMSET Oracle 9i and 10g EE contain Data Mining What used to be the Oracle Darwin product Data Mining is statistically analyzing data, trying to discover patterns to be used for predictions The Data Mining functionality is largely accessed through a Java API Some Data Mining can directly be done from PL/SQL: dbms_frequent_itemset To find out from a large collection of items or facts, which items have an increased chance of occurring together KC Server Development – 15 november 2005 Oracle 10g’s Finest 97 Examples of questions suited for Data Mining with DBMS_FREQUENT_ITEMSET Supermarket-basket analysis: if you buy pizza and cola, what other products are likely to be in your trolley the occurrence of a certain disease in combination with behavioral or diet-related characteristics the preference for a certain type of car in combination with properties such as income, profession, preferred make of father/neighbour/friend, age the preference for a political candidate or party; you can think of some of the associated properties…(religion, income, skincolor, corporate associations etc.) the occurrence of a software bug given some of the characteristics of the application, the organization, the technology and the programmer… KC Server Development – 15 november 2005 Oracle 10g’s Finest 98 Business Case: Patterns in Movie Preferences Three tables with movie data: KC Server Development – 15 november 2005 Oracle 10g’s Finest 99 Business Case: Patterns in Movie Preferences Questions to investigate Is there such a Frequent Itemset pattern that we can predict for someone of certain gender and age what movies he/she is likely to appreciate? If we know that someone enjoys Finding Nemo and Shrek, is there a distinct possibility that he will enjoy Sharktale? Who should we target in our marketing for a new movie, if that movie is akin to X? When my 5-year old nephew comes to visit, how on earth can I entertain him? KC Server Development – 15 november 2005 Oracle 10g’s Finest 100 Performing Analysis We need to call dbms_frequent_itemset Instructing how to find data – using a Cursor Expression The cursor must return (id,value) where id is a ‘basket identifier’ All values must be of the same data type DBMS_FREQUENT_ITEMSET.FI_TRANSACTIONAL ( cursor ( select id, value from …) , 0.05 – threshold (minimal % of supporting records) , 4 –- itemset min length , 6 –- itemset max length , null -- INCLUDING_ITEMS REF CURSOR , null -- EXCLUDING_ITEMS REF CURSOR ) RETURNS ANYDATASET KC Server Development – 15 november 2005 Oracle 10g’s Finest 101 Simple transaction basket analysis SELECT , , , FROM order by , CAST (itemset as FI_number_NT) itemset support length total_tranx table( DBMS_FREQUENT_ITEMSET.FI_TRANSACTIONAL ( cursor ( SELECT id, mve_id_1 FROM movie_preferences mpe union SELECT id, mve_id_2 FROM movie_preferences mpe union SELECT id, mve_id_3 FROM movie_preferences mpe union SELECT id, 1000* age_category FROM movie_preferences mpe union SELECT id, case mpe.gender when 'M' then -1 else -2 end FROM movie_preferences mpe ) , 0.05 -- threshold , 4 –- itemset min length , 6 –- itemset max length , NULL , NULL ) ) support desc length KC Server Development – 15 november 2005 Oracle 10g’s Finest 102 Interpretation of simple analysis First record: 3 occurrences -2 : Female 5000: 21+ years 3: Shark Tale 5: Love Actually Second record: 3 occurrences Female 12-16 years Shark Tale and Finding Nemo … KC Server Development – 15 november 2005 Oracle 10g’s Finest 103 Simple transaction basket analysis: better presentation of the findings SELECT , , , FROM order by , present_items( CAST (itemset as FI_number_NT)) itemset support length total_tranx table( DBMS_FREQUENT_ITEMSET.FI_TRANSACTIONAL ( cursor ( SELECT id, mve_id_1 FROM movie_preferences mpe union SELECT id, mve_id_2 FROM movie_preferences mpe union SELECT id, mve_id_3 FROM movie_preferences mpe union SELECT id, 1000* age_category FROM movie_preferences mpe union SELECT id, case mpe.gender when 'M' then -1 else -2 end FROM movie_preferences mpe ) , 0.05 , 4 , 6 , NULL , NULL ) ) support desc length desc order KC Server Development – 15 november 2005 Oracle 10g’s Finest 104 Simple transaction basket analysis: better presentation of the findings SELECT , , , FROM order by , present_items( CAST (itemset as FI_number_NT)) itemset support length total_tranx table( DBMS_FREQUENT_ITEMSET.FI_TRANSACTIONAL ( cursor ( SELECT id, mve_id_1 FROM movie_preferences mpe union SELECT id, mve_id_2 FROM movie_preferences mpe union SELECT id, mve_id_3 FROM movie_preferences mpe union SELECT id, 1000* age_category FROM movie_preferences mpe union SELECT id, case mpe.gender when 'M' then -1 else -2 end FROM movie_preferences mpe ) , 0.05 , 4 , 6 , NULL , NULL ) ) support desc length desc order KC Server Development – 15 november 2005 Oracle 10g’s Finest 105 Business Case: Our Nephew Our nephew is visiting; he is 5 years old he enjoyed Finding Nemo he is male What movie should we rent for him? KC Server Development – 15 november 2005 Oracle 10g’s Finest 107 Simple transaction basket analysis: better presentation of the findings SELECT from , , where and and and and select items.column_value "Recommended Movie" <inline view> it table(it.itemset) items movies mve support > 1 set_contains_item( itemset, '2-6 years' ) = 1 set_contains_item( itemset, 'M' ) = 1 mve.title = items.column_value mve.title != 'Finding Nemo' KC Server Development – 15 november 2005 Oracle 10g’s Finest 108 In-Line View for selecting Movie-Basket Combinations that include Finding Nemo ( SELECT CAST(itemset as FI_varchar_NT) itemset , support,length,total_tranx FROM table ( DBMS_FREQUENT_ITEMSET.FI_TRANSACTIONAL ( cursor ( SELECT mpe.id, title FROM movie_preferences mpe , movies mve where mve.id = mpe.mve_id_1 union SELECT mpe.id, title FROM movie_preferences mpe , movies mve where mve.id = mpe.mve_id_2 union SELECT mpe.id, title FROM movie_preferences mpe , movies mve where mve.id = mpe.mve_id_3 union SELECT mpe.id, acy.description FROM movie_preferences mpe, age_categories acy where acy.id = mpe.age_category union SELECT id, gender FROM movie_preferences ) , 0.05 , 4 , 6 , CURSOR( SELECT * FROM table(FI_VARCHAR_NT('Finding Nemo'))) , NULL ) ) ) it KC Server Development – 15 november 2005 Oracle 10g’s Finest 109 Conclusions 10gR1 has some neat new SQL & PL/SQL features Enrichments of existing ones Some brand new ones • Especially in the area of On-Line, Large Data Set interpretation Model Clause – spreadsheet in SQL Inter-row, direct cell references, adding records Expression Filters – stored Filter Conditions “Have (new) data find searchers” Matching, Alerting, Rule Enforcement DBMS_FREQUENT_ITEMSET – data mining Exploit association patterns (“baskets”) buried in your data for “fortune telling” KC Server Development – 15 november 2005 Oracle 10g’s Finest 111 Onderwerpen voor ODTUG 2006 – 17-21 Juni Washington DC Oracle 9i en 10g SQL en PL/SQL Oracle Text Oracle Spatial XML DB HTML DB Lite Express Edition Oracle 10g WebForms JDAPI WebUtil PJC Java/J2EE integratie JavaScript Oracle Warehouse Builder Oracle Discoverer … ADF ADF Faces JHeadstart Oracle BPEL Oracle InterConnect XML Publisher Oracle en Open Source ADF en Spring Hibernate en ADF MySQL vs. Express Edition Business Rules Software Engineering Oracle Development Tools & Jira, CVS, JUnit, Ant/Maven etc. … KC Server Development – 15 november 2005 Oracle 10g’s Finest Oracle JDeveloper 10.1.3 112