转储功能不显示字符集

Dump function doesn't show character-set

我正在尝试检查哪个字符集 DBMS_METADATA.GET_DDL() 正在返回结果。我试着那样检查它。

SELECT DUMP(
            CAST(
                  DBMS_METADATA.GET_DDL('FUNCTION',  'MyFUNCTION', 'SCHEME')  
                  AS VARCHAR2(4000)
                ), 
            16
           )  
  FROM dual

但是它没有显示字符集。我只得到这样的结果:

Typ=1 Len=1739: a,2...

我的NLS_CHARACTERSETreturnsWE8MSWIN1252GET_DDL() returns也在这个字符集中吗?

将第二个转储参数从 16 更改为 1016:

SELECT dump (CAST(DBMS_METADATA.GET_DDL('FUNCTION',  'MyFUNCTION', 'SCHEME')  AS VARCHAR2(4000)), 16)  FROM DUAL
Typ=1 Len=126 CharacterSet=AL32UTF8: a ...

db<>fiddle

这个解释in the documentation:

By default, the return value contains no character set information. To retrieve the character set name of expr, add 1000 to any of the preceding format values.


您还问过:

My NLS_CHARACTERSET returns WE8MSWIN1252. Does GET_DDL returns also in this characterset?

您正在将 GET_DDL 调用的结果转换为 varchar2,因此转储将告诉您该转换值的字符集,该字符集将在您的 NLS_CHARACTERSET 中。 GET_DDL实际返回的值是一个CLOB,它也会在你的NLS_CHARACTERSET.