Canalblog
Editer l'article Suivre ce blog Administration + Créer mon blog
Publicité
Blog d'un DBA sur le SGBD Oracle et SQL
17 décembre 2017

Les fonctions SQL selon les versions d'Oracle V$SQLFN_METADATA - SQL functions according to Oracle versions V$SQLFN_METADATA


Introduction
Le dictionnaire de données d'Oracle renferme des milliers et des milliers de vues, certaines fondamentales comme DBA_TABLES, DBA_USERS alors que d'autres sont beaucoup plus anecdotiques voir quasi inconnues, comme V$SQLFN_METADATA.

Selon la doc Oracle "V$SQLFN_METADATA contains metadata about operators and built-in functions." De façon plus précise, elle contient l'historique d'apparition des opérateurs et fonctions SQL selon les versions d'Oracle!

OK, cette vue n'est pas importante mais c'est intéressant de fouiner dans ces petites vues, ne serait-ce que pour voir tout ce que Oracle mémorise comme infos. Et puis, qui sait quelles surprises on peut avoir...



Points d'attention
Aucun.


 

Base de tests
N'importe quelle base Oracle.


 

Exemples
============================================================================================
Répartition des fonctions par version d'Oracle

============================================================================================

Ma base est une Oracle 12.2.          
          SQL> select banner from v$version;
          BANNER
          --------------------------------------------------------------------------------
          Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
          PL/SQL Release 12.2.0.1.0 - Production
          CORE    12.2.0.1.0    Production
          TNS for Linux: Version 12.2.0.1.0 - Production
          NLSRTL Version 12.2.0.1.0 - Production
          
La structure de V$SQLFN_METADATA est la suivante; le champ qui nous importe est VERSION "Minimum version of the database that has this function."
          SQL> desc V$SQLFN_METADATA
          Name        Null?    Type
          ----------------------------------------------------------------------------------------------
          FUNC_ID                 NUMBER
          NAME                 VARCHAR2(128)
          MINARGS             NUMBER
          MAXARGS             NUMBER
          DATATYPE             VARCHAR2(8)
          VERSION             VARCHAR2(12)
          ANALYTIC             VARCHAR2(3)
          AGGREGATE             VARCHAR2(3)
          OFFLOADABLE         VARCHAR2(3)
          DISP_TYPE             VARCHAR2(13)
          USAGE                 VARCHAR2(128)
          DESCR                 VARCHAR2(4000)
          CON_ID              NUMBER
          
Voici une répartition des fonctions SQL par version d'Oracle. Le ORDER BY posant problème avec les enregistrements commençant à la version 10, j'ai modifié manuellement le résultat.

Tiens, Oracle remonte jusqu'à la version 6, alors que dans la plupart des livres ou des sites web, la version 7 est considérée comme une "limite"; pour rappel, la V7 a introduit les contraintes d'intégrité, les procédures stockées et les triggers. On note les points suivants : 132 fonctions déjà présentes en V6, que 4 nouvelles en V7, plus de 350 autres en V8 (version des fonctions analytiques), très peu d'ajout en 9, une nouvelle explosion en 10 et peu de nouveautés en 11. Étonnamment la V12 n'est pas présente alors qu'on retrouve bien ses fonctions dans cette vue, dans la partie dite INVALID.


          SQL> select version, count(*) from V$SQLFN_METADATA group by version order by substr(version, 2, 2);
          VERSION        COUNT(*)
          ------------ ----------
          V6 Oracle        132
          V71 Oracle          1
          V73 Oracle          4
          V80 Oracle         49
          V81 Oracle         72
          V816 Oracle        117
          V82 Oracle        123
          V92 Oracle         39
          V10 Oracle        326
          V10R2 Oracle     22
          V11R1 Oracle     80
          INVALID         120
          SQL/DS             41

SQL/DS est un data type lié à la base DB2 de IBM. Voici ce que j'ai trouvé comme info sur le net :
"ANSI, DB2, and SQL/DS Data Types
SQL statements that create tables and clusters can also use ANSI data types and data types from the IBM products SQL/DS and DB2. Oracle recognizes the ANSI or IBM data type name that differs from the Oracle Database data type name. It converts the data type to the equivalent Oracle data type, records the Oracle data type as the name of the column data type, and stores the column data in the Oracle data type based on the conversions shown in the tables that follow.
          Table 2-7 SQL/DS and DB2 Data Types Converted to Oracle Data Types
          SQL/DS or DB2 Data Type     Oracle Data Type
          CHARACTER(n)                CHAR(n)
          VARCHAR(n)                    VARCHAR(n)
          LONG VARCHAR                LONG
          DECIMAL(p,s)                 NUMBER(p,s)
          INTEGER                        NUMBER(p,0)
          SMALLINT                    NUMBER(p,0)
          FLOAT (Note 2)                NUMBER"


============================================================================================
Fonctions par version d'Oracle
============================================================================================
Regardons cela dans le détail ce que nous avons pour la version 6. Nous voyons que les opérateurs != et autres sont mentionnés, que beaucoup de fonctions commençant par OPT alors que je n'en ai jamais entendu parler.
          SQL> break on "VERSION" skip 1
          SQL> select distinct version, name, datatype from V$SQLFN_METADATA where version in ('V6 Oracle') order by version, name;
          VERSION      NAME                DATATYPE
          ------------ ------------------------------ --------
          V6 Oracle    !=                 UNKNOWN
                       <                    UNKNOWN
                       <=                 UNKNOWN
                       =                    UNKNOWN
                       >                    UNKNOWN
                       >=                 UNKNOWN
                       ABS                NUMERIC
                       ADD_MONTHS             DATETYPE
                       ASCII                NUMERIC
                       AVG                ARG 1
                       BITAND                NUMERIC
                       CEIL                NUMERIC
                       CHARTOROWID            BINARY
                       CHR                STRING
                       CONCAT                STRING
                       CONVERT                STRING
                       COUNT                NUMERIC
                       DATAOBJ_TO_MAT_PARTITION        UNKNOWN
                       DATAOBJ_TO_PARTITION        UNKNOWN
                       DECODE                ARG 3
                       DUMP                STRING
                       FLOOR                NUMERIC
                       GREATEST                ARG 1
                       HEXTORAW                BINARY
                       INITCAP                STRING
                       INSTR                NUMERIC
                       LAST_DAY                DATETYPE
                       LEAST                ARG 1
                       LENGTH                NUMERIC
                       LNNVL                UNKNOWN
                       LOWER                STRING
                       LPAD                STRING
                       LTRIM                STRING
                       MAX                ARG 1
                       MERGE$ACTIONS            UNKNOWN
                       MIN                ARG 1
                       MOD                NUMERIC
                       MONTHS_BETWEEN            NUMERIC
                       NEW_TIME                DATETYPE
                       NEXT_DAY                DATETYPE
                       NLSSORT                STRING
                       NVL                ARG 1
                       NVL2                ARG 2
                       OPTBTR                UNKNOWN
                       OPTCDY                UNKNOWN
                       OPTCNVTLAB             UNKNOWN
                       OPTCTZ                UNKNOWN
                       OPTDAN                DATETYPE
                       OPTDDI                UNKNOWN
                       OPTDDJ                UNKNOWN
                       OPTDDS                STRING
                       OPTDESC                UNKNOWN
                       OPTDID                UNKNOWN
                       OPTDIF                UNKNOWN
                       OPTDIJ                UNKNOWN
                       OPTDIS                UNKNOWN
                       OPTDJN                UNKNOWN
                       OPTDJS                UNKNOWN
                       OPTDNJ                UNKNOWN
                       OPTDOF                UNKNOWN
                       OPTDPC                UNKNOWN
                       OPTDRO                DATETYPE
                       OPTDSD                DATETYPE
                       OPTDSI                UNKNOWN
                       OPTDSN                DATETYPE
                       OPTDSU                NUMERIC
                       OPTDSY                DATETYPE
                       OPTITN                UNKNOWN
                       OPTLKO                UNKNOWN
                       OPTNDY                UNKNOWN
                       OPTNM2BOL                UNKNOWN
                       OPTNTI                UNKNOWN
                       OPTR2C                UNKNOWN
                       OPTRTB                UNKNOWN
                       OPTSDV_OLD             NUMERIC
                       OPTTAD                NUMERIC
                       OPTTDI                NUMERIC
                       OPTTIS                ARG 1
                       OPTTLK                UNKNOWN
                       OPTTMI                ARG 1
                       OPTTMU                NUMERIC
                       OPTTNG                NUMERIC
                       OPTTNK                UNKNOWN
                       OPTTNN                UNKNOWN
                       OPTTNS                UNKNOWN
                       OPTTNU                UNKNOWN
                       OPTTSTCF                UNKNOWN
                       OPTTSU                NUMERIC
                       OPTTUC                UNKNOWN
                       OPTTUN                ARG 1
                       OPTVAR_OLD             NUMERIC
                       PART$NUM$INST            UNKNOWN
                       POWER                NUMERIC
                       RAWTOHEX                STRING
                       REPLACE                STRING
                       REVERSE                UNKNOWN
                       ROUND                NUMERIC
                       ROWIDTOCHAR            STRING
                       RPAD                STRING
                       RTRIM                STRING
                       SIGN                NUMERIC
                       SOUNDEX                STRING
                       SQRT                NUMERIC
                       STDDEV                NUMERIC
                       SUBSTR                STRING
                       SUM                ARG 1
                       SYS_OP_CEG             UNKNOWN
                       SYS_OP_COMP            UNKNOWN
                       SYS_OP_DECOMP            UNKNOWN
                       SYS_OP_OPNSIZE            UNKNOWN
                       SYS_OP_TPR             UNKNOWN
                       TBL$OR$IDX$PART$NUM        UNKNOWN
                       TO_BINARY_DOUBLE            NUMERIC
                       TO_BINARY_FLOAT            NUMERIC
                       TO_CHAR                STRING
                       TO_DATE                DATETYPE
                       TO_NUMBER                NUMERIC
                       TRANSLATE                STRING
                       TRUNC                DATETYPE
                       TRUNC                NUMERIC
                       UPPER                STRING
                       USERENV                STRING
                       VARIANCE                NUMERIC
                       VSIZE                NUMERIC
          124 rows selected.
                  
Affichons les rares nouveautés de la version 7.         
          SQL> select version, name, datatype from V$SQLFN_METADATA where version in ('V71 Oracle', 'V73 Oracle') order by version, name;
          VERSION      NAME                DATATYPE
          ------------ ------------------------------ --------
          V71 Oracle  OPTPLS                UNKNOWN
          
          V73 Oracle  ACOS                NUMERIC
                      ASIN                NUMERIC
                      ATAN                NUMERIC
                      ATAN2                NUMERIC
          
Pour la version 8 je filtre sur le dataype car autrement il y en a trop.  Nous voyons que c'est dans cette version que les fonctions LEAD, LAG sont apparues et que, comme je le disais, ce sont des fonctions analytiques.      
          SQL> select distinct version, name, datatype from V$SQLFN_METADATA where version in ('V80 Oracle', 'V81 Oracle', 'V816 Oracle', 'V82 Oracle') AND datatype <> 'UNKNOWN' order by version, name;
          VERSION      NAME                DATATYPE
          ------------ ------------------------------ --------
          V80 Oracle   BFILENAME                BINARY
                       EMPTY_BLOB             BINARY
                       EMPTY_CLOB             BINARY
                        MAKE_REF                BINARY
                        NLS_CHARSET_DECL_LEN        NUMERIC
                         NLS_CHARSET_ID            NUMERIC
                         NLS_CHARSET_NAME            STRING
                        REFTOHEX                BINARY
          
          V81 Oracle   CAST                ARG 2
                       GROUPING                NUMERIC
                       SYS_GUID                BINARY
                       TO_LOB                BINARY
                       TRIM                STRING
          
          V816 Oracle  AVG                NUMERIC
                       CORR                NUMERIC
                       COUNT                NUMERIC
                       COVAR_POP                NUMERIC
                       COVAR_SAMP             NUMERIC
                       DENSE_RANK             NUMERIC
                       FIRST_VALUE            ARG 1
                       FROM_TZ                DATETYPE
                       LAG                ARG 1
                       LAST_VALUE             ARG 1
                       LEAD                ARG 1
                       MAX                ARG 1
                       MIN                ARG 1
                       NTILE                NUMERIC
                       OPTCOVARP_OLD            NUMERIC
                       OPTCOVARS_OLD            NUMERIC
                       OPTFDCOVARP_OLD            NUMERIC
                       OPTFDCOVARS_OLD            NUMERIC
                       OPTFDWNCOVARP_OLD            NUMERIC
                       OPTFDWNCOVARS_OLD            NUMERIC
                       OPTFFCOVARP_OLD            NUMERIC
                       OPTFFCOVARS_OLD            NUMERIC
                       OPTFFWNCOVARP_OLD            NUMERIC
                       OPTFFWNCOVARS_OLD            NUMERIC
                       OPTWNCOVARP_OLD            NUMERIC
                       OPTWNCOVARS_OLD            NUMERIC
                       OPTWNSTD_OLD            NUMERIC
                       OPTWNVAR_OLD            NUMERIC
                       PERCENT_RANK            NUMERIC
                       RANK                NUMERIC
                       RATIO_TO_REPORT            NUMERIC
                       REGR_AVGX                NUMERIC
                       REGR_AVGY                NUMERIC
                       REGR_COUNT             NUMERIC
                       REGR_INTERCEPT            NUMERIC
                       REGR_R2                NUMERIC
                       REGR_SLOPE             NUMERIC
                       REGR_SXX                NUMERIC
                       REGR_SXY                NUMERIC
                       REGR_SYY                NUMERIC
                       ROW_NUMBER             NUMERIC
                       SESSIONTIMEZONE            DATETYPE
                       STDDEV                NUMERIC
                       STDDEV_POP             NUMERIC
                       STDDEV_SAMP            NUMERIC
                       SUM                NUMERIC
                       SYS_CONNECT_BY_PATH        STRING
                       SYS_EXTRACT_UTC            DATETYPE
                       TO_DSINTERVAL            DATETYPE
                       TO_TIMESTAMP            DATETYPE
                       TO_TIMESTAMP_TZ            DATETYPE
                       TO_YMINTERVAL            DATETYPE
                       VARIANCE                NUMERIC
                       VAR_POP                NUMERIC
                       VAR_SAMP                NUMERIC
          
          V82 Oracle   ASCIISTR                STRING
                       BIN_TO_NUM             NUMERIC
                       COALESCE                ARG 1
                       COMPOSE                STRING
                       CUME_DIST                NUMERIC
                       DECOMPOSE                STRING
                       DENSE_RANK             NUMERIC
                       DENSE_RANKM            NUMERIC
                       GROUPING_ID            NUMERIC
                       GROUP_ID                NUMERIC
                       INSTR2                NUMERIC
                       INSTR4                NUMERIC
                       INSTRC                NUMERIC
                       LENGTH2                NUMERIC
                       LENGTH4                NUMERIC
                       LENGTHC                NUMERIC
                       NCHR                STRING
                       NULLIF                ARG 1
                       OPTLICSCNVTST            NUMERIC
                       OPTLINS                NUMERIC
                       OPTLINSB                NUMERIC
                       OPTLLEN                NUMERIC
                       OPTLLENB                NUMERIC
                       PERCENTILE_CONT            NUMERIC
                       PERCENTILE_DISC            NUMERIC
                       PERCENT_RANK            NUMERIC
                       PERCENT_RANKM            NUMERIC
                       RANK                NUMERIC
                       RANKM                NUMERIC
                       RAWTONHEX                STRING
                       ROWIDTONCHAR            STRING
                       SUBSTR2                STRING
                       SUBSTR4                STRING
                       SUBSTRC                STRING
                       TO_CLOB                STRING
                       TO_NCHAR                STRING
                       TO_NCLOB                STRING
                       UNISTR                STRING
                       WIDTH_BUCKET            NUMERIC
          107 rows selected.
          

============================================================================================
Autres informations
============================================================================================
Dans INVALID on a la famille des fonctions APPROX_xxx qui sont spécifiques à la version 12.        
          SQL> select distinct version, name, datatype from V$SQLFN_METADATA where version in ('SQL/DS', 'INVALID') order by version, name;
          VERSION      NAME                DATATYPE
          ------------ ------------------------------ --------
          INVALID      APPROX_COUNT_DISTINCT        NUMERIC
                       APPROX_COUNT_DISTINCT_AGG        UNKNOWN
                       APPROX_COUNT_DISTINCT_DETAIL   UNKNOWN
                       APPROX_MEDIAN            NUMERIC
                       APPROX_PERCENTILE            NUMERIC
                       APPROX_PERCENTILE_AGG        UNKNOWN
                       APPROX_PERCENTILE_DETAIL        UNKNOWN
                       AVERAGE_RANK            NUMERIC
                       CLASSIFIER             ARG 1
                       COALESCE                ARG 1
                       COLLATE                STRING
                       COLLATION                STRING
                       COLUMNS                UNKNOWN
                       CON_DBID_TO_ID            UNKNOWN
                       CON_GUID_TO_ID            UNKNOWN
                       CON_ID_TO_DBID            UNKNOWN
                       CON_NAME_TO_ID            UNKNOWN
                       CON_UID_TO_ID            UNKNOWN
                       DENSE_RANK             NUMERIC
                       FEATURE_COMPARE            UNKNOWN
                       FIRST                ARG 1
                       HIER_CAPTION            STRING
                       HIER_CHILD_COUNT            NUMERIC
                       HIER_DEPTH             NUMERIC
                       HIER_DESCRIPTION            STRING
                       HIER_HAS_CHILDREN            UNKNOWN
                       HIER_LEVEL             STRING
                       HIER_MEMBER_NAME            STRING
                       HIER_MEMBER_UNIQUE_NAME        STRING
                       HIER_ORDER             NUMERIC
                       HIER_PARENT_LEVEL            STRING
                       HIER_PARENT_UNIQUE_NAME        STRING
                       LAG                NUMERIC
                       LAG_DIFF                NUMERIC
                       LAG_DIFF_PERCENT            NUMERIC
                       LAST                ARG 1
                       LEAD                NUMERIC
                       LEAD_DIFF                NUMERIC
                       LEAD_DIFF_PERCENT            NUMERIC
                       MATCH_NUMBER            ARG 1
                       NEXT                ARG 1
                       NLS_COLLATION_ID            NUMERIC
                       NLS_COLLATION_NAME         STRING
                       OBJ_ID                UNKNOWN
                       OPT1034                UNKNOWN
                       OPTCAPVC                UNKNOWN
                       OPTCSEE                UNKNOWN
                       OPTHCSWIN                UNKNOWN
                       OPTHRANC                UNKNOWN
                       OPTHRLDLG                UNKNOWN
                       OPTHRMBRALL            UNKNOWN
                       OPTHRMBRCURR            UNKNOWN
                       OPTHRMBRLIT            UNKNOWN
                       OPTHRMBRNULL            UNKNOWN
                       OPTHRPAR                UNKNOWN
                       OPTHRRELCOND            UNKNOWN
                       OPTHRWINDOW            UNKNOWN
                       OPTILMROWTR            UNKNOWN
                       OPTKDUSTOOPN            UNKNOWN
                       OPTLBL2V                UNKNOWN
                       OPTLV2BL                UNKNOWN
                       OPTLVCDA                BINARY
                       OPTLVCDMLBUF            UNKNOWN
                       OPTLVCPY                UNKNOWN
                       OPTLVEVA                UNKNOWN
                       OPTMRVAR                ARG 1
                       OPTOLSDML                UNKNOWN
                       OPTXID                UNKNOWN
                       OPTXLGK                UNKNOWN
                       OPTXLJK                UNKNOWN
                       OPTXLP                UNKNOWN
                       ORA_CHECK_ACL            UNKNOWN
                       ORA_CHECK_PRIVILEGE        UNKNOWN
                       ORA_CHECK_SYS_PRIVILEGE        UNKNOWN
                       ORA_CLUSTERING            BINARY
                       ORA_CONCAT_RWKEY            BINARY
                       ORA_DM_PARTITION_NAME        UNKNOWN
                       ORA_RAWCOMPARE            NUMERIC
                       ORA_RAWCONCAT            BINARY
                       ORA_SEARCH_RWKEY            BINARY
                       PREV                ARG 1
                       QUALIFY                NUMERIC
                       RANK                NUMERIC
                       RAWTOREF                UNKNOWN
                       REFTORAW                BINARY
                       ROW_NUMBER             NUMERIC
                       SDO_GEOM_KEY            BINARY
                       SDO_GEOM_MBB            BINARY
                       SDO_GEOM_MBR            UNKNOWN
                       SHARE_OF                NUMERIC
                       SUM                ARG 1
                       SUM                NUMERIC
                       SYS_CHECK_PRIVILEGE        UNKNOWN
                       SYS_CTXINFOPK            UNKNOWN
                       SYS_DM_RXFORM_LAB            UNKNOWN
                       SYS_FILTER_ACLS            UNKNOWN
                       SYS_MKXTI                UNKNOWN
                       SYS_OP_CYCLED_SEQ            UNKNOWN
                       SYS_OP_KEY_VECTOR_CREATE        NUMERIC
                       SYS_OP_KEY_VECTOR_FILTER        UNKNOWN
                       SYS_OP_KEY_VECTOR_FILTER_LIST  UNKNOWN
                       SYS_OP_KEY_VECTOR_SUCCEEDED    ARG 1
                       SYS_OP_KEY_VECTOR_USE        NUMERIC
                       SYS_OP_VECTOR_GROUP_BY        UNKNOWN
                       SYS_OP_XTNN            UNKNOWN
                       SYS_PLSQL_COUNT            NUMERIC
                       SYS_PLSQL_CPU            NUMERIC
                       SYS_PLSQL_IO            NUMERIC
                       SYS_RAW_TO_XSID            UNKNOWN
                       SYS_XSID_TO_RAW            UNKNOWN
                       TO_ACLID                UNKNOWN
                       TO_APPROX_COUNT_DISTINCT        NUMERIC
                       TO_APPROX_PERCENTILE        NUMERIC
                       VALIDATE_CONVERSION        NUMERIC
                       VECTOR_ENCODE            UNKNOWN
          
          SQL/DS         !=                 UNKNOWN
                       <                    UNKNOWN
                       <=                 UNKNOWN
                       =                    UNKNOWN
                       >                    UNKNOWN
                       >=                 UNKNOWN
                       COS                NUMERIC
                       COSH                NUMERIC
                       EXP                NUMERIC
                       INSTRB                NUMERIC
                       LENGTHB                NUMERIC
                       LN                 NUMERIC
                       LOG                NUMERIC
                       NLS_INITCAP            STRING
                       NLS_LOWER                STRING
                       NLS_UPPER                STRING
                       OPTBTUR                UNKNOWN
                       OPTCFX                UNKNOWN
                       OPTCTUR                UNKNOWN
                       OPTNLS                UNKNOWN
                       OPTRTUR                UNKNOWN
                       OPTTLK2                UNKNOWN
                       OPTTNK2                UNKNOWN
                       OPTTUA                UNKNOWN
                       OPTTVLCF                UNKNOWN
                       OPTTVLCF_CONVERR            UNKNOWN
                       OPTUREQ                UNKNOWN
                       OPTURGE                UNKNOWN
                       OPTURGT                UNKNOWN
                       OPTURLE                UNKNOWN
                       OPTURLT                UNKNOWN
                       OPTURNE                UNKNOWN
                       OPTURTB                UNKNOWN
                       OPTURTC                UNKNOWN
                       SIN                NUMERIC
                       SINH                NUMERIC
                       SUBSTRB                STRING
                       TAN                NUMERIC
                       TANH                NUMERIC
                       TO_MULTI_BYTE            STRING
                       TO_SINGLE_BYTE            STRING
          156 rows selected.
          
A noter que la fonction APPROX_COUNT_DISTINCT fonctionne très bien même si elle est classée Invalid.
          SQL> SELECT APPROX_COUNT_DISTINCT(OBJECT_NAME) FROM DBA_OBJECTS;
          APPROX_COUNT_DISTINCT(OBJECT_NAME)
          ----------------------------------
                                      65951
          
Vous aurez remarqué que certaines fonctions apparaissent plusieurs fois. Ce n'est pas une erreur, c'est juste qu'il s'agit de versions différentes de la même fonction par le ou les arguments. Examinons la fonction AVG qui est présente 6 fois dans notre historique.
          SQL> select VERSION, NAME, MINARGS, MAXARGS, DATATYPE, ANALYTIC, AGGREGATE, OFFLOADABLE, DISP_TYPE, DESCR from V$SQLFN_METADATA where name = 'AVG';
          VERSION      NAME    MINARGS  MAXARGS DATATYPE ANA AGG OFF DISP_TYPE DESCR
          ------------ ------------------------------ ---------- ---------- -------- ------
          V6 Oracle    AVG        1        1 ARG 1    NO  YES NO  NORMAL       AVG
          
          V816 Oracle  AVG        1        1 NUMERIC  YES NO  NO  NORMAL       AVG
          
          V10 Oracle   AVG        1        1 NUMERIC  NO  YES NO  NORMAL       AVG
                       AVG        1        1 NUMERIC  NO  YES NO  NORMAL       AVG
                       AVG        1        1 NUMERIC  YES NO  NO  NORMAL       AVG(FLOAT) (Windows)
                       AVG        1        1 NUMERIC  YES NO  NO  NORMAL       AVG(DOUBLE) (Windows)
          
Le record de la fonction la plus présente est 9, pour SUM!
          SQL> break on "COUNT(*)" skip 1
          SQL> select count(*), name from V$SQLFN_METADATA group by name having count(*) > 1 order by count(*) DESC, name;
          COUNT(*) NAME
          ---------- --------------------
               9 SUM
          
               6 AVG
                 COVAR_POP
                 COVAR_SAMP
                 STDDEV
                 TO_NUMBER
                 VARIANCE
          
               5 TO_BINARY_DOUBLE
                 TO_BINARY_FLOAT
                 TO_CHAR
          
               4 TRUNC
          
               3 ABS
                 CEIL
                 DENSE_RANK
                 FLOOR
                 MOD
                 NANVL
                 RANK
                 REMAINDER
                 ROUND
                 SIGN
                 SQRT
                 TO_NCHAR
                 TRIM
          
               2 !=
                 <
                 <=
                 =
                 >
                 >=
                 ACOS
                 APPROX_MEDIAN
                 APPROX_PERCENTILE
                 APPROX_PERCENTILE_AGG
                 APPROX_PERCENTILE_DETAIL
                 ASIN
                 ATAN
                 ATAN2
                 COALESCE
                 COS
                 COSH
                 COUNT
                 CUME_DIST
                 EXP
                 JSON
                 JSON_QUERY
                 JSON_VALUE
                 LAG
                 LEAD
                 LISTAGG
                 LN
                 LOG
                 MAX
                 MIN
                 PERCENTILE_CONT
                 PERCENTILE_DISC
                 PERCENT_RANK
                 POWER
                 ROW_NUMBER
                 SIN
                 SINH
                 TAN
                 TANH
                 TO_DATE
                 TO_DSINTERVAL
                 TO_TIMESTAMP
                 TO_TIMESTAMP_TZ
                 TO_YMINTERVAL
          68 rows selected.
          
Regardons maintenant les opérateurs.
          SQL> select NAME, VERSION, MINARGS, MAXARGS, DATATYPE, ANALYTIC, AGGREGATE, OFFLOADABLE, DISP_TYPE, DESCR from V$SQLFN_METADATA where name IN ('!=', '<', '<=', '=', '>', '>=') order by name, version;
          NAME               VERSION           MINARGS      MAXARGS DATATYPE ANA AGG OFF DISP_TYPE     DESCR
          ------------------------------ ------------ ---------- ---------- -------- --- --- --- -------------
          !=                   SQL/DS             2        0 UNKNOWN  NO  NO  YES REL-OP         <>
                             V6 Oracle         2        0 UNKNOWN  NO  NO  YES REL-OP         <>
          
          <                   SQL/DS             2        0 UNKNOWN  NO  NO  YES REL-OP         <
                             V6 Oracle         2        0 UNKNOWN  NO  NO  YES REL-OP         <
          
          <=                   SQL/DS             2        0 UNKNOWN  NO  NO  YES REL-OP         <=
                             V6 Oracle         2        0 UNKNOWN  NO  NO  YES REL-OP         <=
          
          =                   SQL/DS             2        0 UNKNOWN  NO  NO  YES REL-OP         =
                             V6 Oracle         2        0 UNKNOWN  NO  NO  YES REL-OP         =
          
          >                   SQL/DS             2        0 UNKNOWN  NO  NO  YES REL-OP         >
                             V6 Oracle         2        0 UNKNOWN  NO  NO  YES REL-OP         >
          
          >=                   SQL/DS             2        0 UNKNOWN  NO  NO  YES REL-OP         >=
                             V6 Oracle         2        0 UNKNOWN  NO  NO  YES REL-OP         >=
          12 rows selected.
          

Voilà, ce petit tour est terminé; certains diront que c'était inutile et je rétorque que c'était donc indispensable :-)

                

Publicité
Publicité
Commentaires
Blog d'un DBA sur le SGBD Oracle et SQL
Publicité
Archives
Blog d'un DBA sur le SGBD Oracle et SQL
  • Blog d'un administrateur de bases de données Oracle sur le SGBD Oracle et sur les langages SQL et PL/SQL. Mon objectif est de vous faire découvrir des subtilités de ce logiciel, des astuces, voir même des surprises :-)
  • Accueil du blog
  • Créer un blog avec CanalBlog
Visiteurs
Depuis la création 340 939
Publicité