DBMS_ASSERT.enquote_name () в Oracle - PullRequest
       0

DBMS_ASSERT.enquote_name () в Oracle

0 голосов
/ 13 января 2020

У меня есть пример кода от http://phil-sqltips.blogspot.com/2015/07/beware-of-empty-partitions.html, и я хотел бы понять этот xmlgen sql.

WITH t AS (
SELECT   table_owner
       , table_name
       , partition_name
       , TO_NUMBER (EXTRACTVALUE (XMLTYPE (DBMS_XMLGEN.getxml ('SELECT COUNT(*) AS rows_exist FROM '
                                                             || DBMS_ASSERT.enquote_name (str => table_owner)
                                                             || '.'
                                                             || DBMS_ASSERT.enquote_name (str => table_name)
                                                             || ' PARTITION ('
                                                             || DBMS_ASSERT.enquote_name (str => partition_name)
                                                             || ') WHERE ROWNUM <= 1'
                                                              )
                                          )
                                , '/ROWSET/ROW/ROWS_EXIST'
                                 )
                   ) AS rows_exist
    FROM all_tab_partitions
   WHERE table_owner = 'WH'
     AND table_name IN ('POINT_OF_SALE_FACTS')
ORDER BY table_owner
       , table_name
       , partition_position
)
SELECT 'ALTER TABLE '
     || DBMS_ASSERT.enquote_name (str => table_owner)
     || '.'
     || DBMS_ASSERT.enquote_name (str => table_name)
     || ' DROP PARTITION '
     || DBMS_ASSERT.enquote_name (str => partition_name)
     || ';' AS stmt
    , t.*
FROM t
WHERE rows_exist = 0
;

Я нашел большинство из них, кроме этого, DBMS_ASSERT.enquote_name (str => table_owner). Каков синтаксис стрелки в (str => table_owner) внутри enquote_name? Я нашел это https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_assert.htm#BABDEHBC, но такой синтаксис стрелки отсутствует, и не смог найти веб-сайты с этим синтаксисом.

1 Ответ

0 голосов
/ 13 января 2020

Это синтаксис именованного параметра . Вот соответствующая документация . Таким образом, str => table_name говорит, что для параметра str следует установить значение table_name.

. В этом случае в этом нет необходимости, поскольку str является первым параметром для DBMS_ASSERT.ENQUOTE_NAME. Таким образом, вы можете пропустить это и просто позвонить DBMS_ASSERT.enquote_name(table_owner).

Но в некоторых случаях это может быть очень полезно. Например, когда есть несколько необязательных параметров (со значениями по умолчанию), и вы хотите указать только один из них. Или когда вы хотите уточнить назначение параметра, отображая имя параметра рядом со значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...