PL/SQL play with Oracle Database 12c

Oracle Database 12c je dispozici od června 2013. Obsahuje spoustu novinek, ať už zásadních či takové, které potěší programátory v PL/SQL.
Níže najdete přehled nových PL/SQL funkcí 12.1, které stojí za povšimnutí a také doporučuji Oracle-base, které dělá Tim Hall a kde se objevilo spousta užitečných článků o 12.1.


Lepší PL/SQL, lepší podpora pro datové typy, lepší PL/SQL-to-SQL rozhraní

Před vydáním Oracle Database 12c jste nemohli použít, jako bindované proměnné specifické PL/SQL datové typy (například asociativní pole apod.) v dynamickém SQL .. Nyní to možné je a lze použít bindované proměnné s PL/SQL datovými typy v anonymních blocích, dále pak volání PL/SQL funkce v SQL dotazech, CALL statementech, TABLE operátorech v SQL dotazech.

Klauzule ACCESSIBLE_BY

Můžete vložit klauzuli ACCESSIBLE_BY do své specifikace balíku a určit, který program může volat subprogram v balíku. Tzn. že tato funkcionalita umožňuje "vystavit" metody balíku tak, že pomáhá specifikovat, že budou konzumovány pouze určitými programy (metodami), apod. a vytváří tedy jakýsi další ochranný obal, aby nedošlo ke zneužití při volání. Vytváří se tedy něco, jako "whitelisting" pro PL/SQL balíky.

Implicit Statement Results

PL/SQL uložené procedury a funkce, před uvedením verze 12c, vracely výsledkové sady SQL explicitně a to prostřednictvím parametru OUT REF CURSOR nebo klauzule RETURN. Aplikace potom musela dělat bind těchto parametrů explicitně, aby mohla získat výsledkové sady. Tom Kyte rozebírá na svém blogu tuto novinku http://tkyte.blogspot.co.uk/2013/07/12c-implicit-result-sets.html. Nyní lze v PL/SQL definovat výsledky implicitně pomocí balíku DBMS_SQL místo parametru OUT REF CURSOR. Hlavní využití této funkce je při migraci aplikací využívající tuto funkcionalitu na databázích třetích stran (např. MS SQL) do Oracle Database.

BEQUEATH CURRENT_USER Views

Tradičně se práva u pohledů chovají podle toho, kdo je definoval (AUTHID DEFINER).

Vytvoříme funkci, která vrací uživatele

SQL> CONNECT USER1/USER1
Connected.
SQL>
SQL> 
SQL> CREATE OR REPLACE FUNCTION CALLED_AS_USER RETURN VARCHAR2 AUTHID CURRENT_USER IS
2 BEGIN
3 RETURN SYS_CONTEXT('USERENV', 'CURRENT_USER');
4 END;
5 /
Function created.

A běžné VIEW a dáme public právo na SELECT

SQL> CREATE OR REPLACE VIEW PPLCH_VIEW AS
2 SELECT CALLED_AS_USER FROM DUAL;
View created.

SQL> GRANT SELECT ON TO PUBLIC;
Grant succeeded.

A pokud uděláme dotaz pod jiným uživatelem

SQL> CONNECT USER2/USER2
Connected.

SQL> SELECT * FROM USER1.PPLCH_VIEW;
CALLED_AS_USER
--------------------------------------------------------------------------------
USER1

Nově lze toto chování řídit a použitím BEQUEATH CURRENT_USER resp. BEQUEATH DEFINER v definici pohledu, umožnit dědit z aktuálního schématu, aktuálního uživatele a povolit role z prostředí, ze kterého se dotazujeme. 

SQL> CREATE OR REPLACE VIEW BEQUEATH_INVOKER_VIEW BEQUEATH CURRENT_USER AS
2 SELECT CALLED_AS_USER FROM DUAL;
View created.

SQL> GRANT SELECT ON BEQUEATH_INVOKER_VIEW TO PUBLIC;
Grant succeeded.

SQL> CONNECT USER2/USER2
Connected.

SQL> SELECT * FROM USER1.BEQUEATH_INVOKER_VIEW;
CALLED_AS_USER
--------------------------------------------------------------------------------
USER2

Grant Roles to Program Units

Dříve se při volání funkcí či procedur mohly uplatnili práva toho, kdo je volá a to i v případě, kdy to nebylo vhodné, např. mohly být práva vyšší, než původní vlastník měl.
Nově lze definovat, jakým způsobem budou tyto práva děděny na toho, kdo programovou jednotku volá, pomocí tzv.  INHERIT PRIVILEGES resp. INHERIT ANY PRIVILEGES.

New Conditional Compilation Directives

V 12.1 jsou nové před-definované direktivy  $$PLSQL_UNIT_OWNER a $$PLSQL_UNIT_TYPE, která vracejí vlastníka a typ aktuální PL/SQL programu jednotky.

Optimizing Function Execution in SQL

V 12.1 jsou dva způsoby, jak zlepšit výkon PL/SQL pomocí příkazů SQL:  lze definovat funkci v příkazu SQL pomocí klauzule WITH a lze přidat definici UDF, která říká kompilátoru, že funkce se používá především v příkazech SQL.

Using %ROWTYPE with Invisible Columns

Oracle Database 12c umožňuje definovat tzv. neviditelné sloupce pomocí INVISIBLE. Pokud v PL/SQL je použit pro deklaraci %ROWTYPE, tak je zahrnuta podpora těchto typů sloupců, včetně způsobu, jak s nimi pracovat.

FETCH FIRST Clause and BULK COLLECT

V 12.1 lze nově využít nepovinné syntaxe FETCH FIRST, pokud chceme omezit počet řádků, které mají být vráceny, což výrazně snižuje složitost SQL. Syntaxe FETCH FIRST se hodně využije při migraci z databází třetích stran na Oracle Database. Tato syntaxe může také zlepšit výkon některých výrazů SELECT BULK COLLECT INTO.

The UTL_CALLSTACK Package

Dříve balík DBMS_UTILITY nabízel tři funkce (FORMAT_CALL_STACK, FORMAT_ERROR_STACK a FORMAT_ERROR_BACKTRACE) a poskytoval informace z provedeného příkazu tzv. call stack a chybové hlášení tzv. error stack a error backtrace. Nově v 12.1 je balík UTL_CALLSTACK a poskytuje stejné informace, plus mnoho dalšího a detailnější přístup k obsahu těchto formátovaných řetězců.

Již brzy v prodeji Oracle Database 12c PL/SQL Programming, Michael McLaughlin


zavolejte prohlášení
Detect language » Czech
MS SQL
English (auto-detected) » Czech

- Nejprve vytvoříte funkci práv vyvolávač k určení, kdo je aktuální SQL> - uživatel opravdu je.
English (auto-detected) » Czech

English (auto-detected) » Czech

English (auto-detected) » Czech

si je vědoma
English (auto-detected) » Czech

@ @ @
English (auto-detected) » Czech

English (auto-detected) » Czech

English (auto-detected) » Czech

English (auto-detected) » Czech

English (auto-detected) » Czech

English (auto-detected) » Czech

SQL> CREATE OR REPLACE VIEW BEQUEATH_INVOKER_VIEW odkázat CURRENT_USER AS 2 Vyberte CALLED_AS_USER FROM DUAL; Zobrazit vytvořen. SQL> GRANT SELECT ON BEQUEATH_INVOKER_VIEW na veřejné; Grant se podařilo. SQL> CONNECT USER2/USER2 Připojeno. SQL> SELECT * FROM USER1.BEQUEATH_INVOKER_VIEW; CALLED_AS_USER ---------------------------------------- ---------------------------------------- USER2
English (auto-detected) » Czech

Comments:

Post a Comment:
  • HTML Syntax: NOT allowed
About

Česky o všem co se točí kolem Oracle Database.

Autoři:

Patrik Plachý
Technology Sales Consultant

David Krch
Principal Consultant
Oracle Expert Services

Oracle Czech

Search

Archives
« duben 2014
PoÚtStČtSoNe
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    
       
Today