---
title: Oracle 模式下普通用户无法通过 dbms_metadata.get_ddl() 获取对象的 DDL，错误代码 ORA-00942 -OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于Oracle 模式下普通用户无法通过 dbms_metadata.get_ddl() 获取对象的 DDL，错误代码 ORA-00942 相关的常见问题和使用技巧，帮助您快速解决Oracle 模式下普通用户无法通过 dbms_metadata.get_ddl() 获取对象的 DDL，错误代码 ORA-00942 的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# Oracle 模式下普通用户无法通过 dbms_metadata.get_ddl() 获取对象的 DDL，错误代码 ORA-00942

更新时间：2023-12-07 03:16

适用版本： V2.2.x 内容类型：Troubleshoot  

普通用户使用 dbms_metadata.get_ddl 函数包获取表的 DDL 报 ORA-00942 错误。本文介绍该问题的原因以及解决方法。

## 适用版本

OceanBase 数据库 V2.2.7x 版本

## 问题现象

普通用户使用 `dbms_metadata.get_ddl` 函数包获取表的 DDL，以下命令执行错误，错误信息如下。

```unknow
obclient> SELECT dbms_metadata.get_ddl('TABLE','TMP_BM_XTCS','CHZ') FROM dual;
ORA-00942: table or view does not exis

```

## 可能原因

由于 OceanBase 数据库在 V2.2.7x 版本增加了角色权限，因此考虑问题可能是由于用户权限不足引起的。查看 DDL 语句需要查询字典视图，因此需要 SELECT ANY DICTIONARY 权限。

执行以下语句查询用户的权限。其中，`grantee='xxxx'` 为用户名。

```unknow
obclient> SELECT * FROM dba_sys_privs WHERE grantee='XXXX';

```

发现该用户没有 SELECT ANY DICTIONARY 权限。

![SELECT_DICTIONARY_PRIVILAGE](https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/9030771161/p233081.png)

## 解决方式

授予普通用户 SELECT ANY DICTIONARY 权限。然后，普通用户可以使用查看 `dbms_metadata.get_ddl` 系统包函数查看对象 DDL。

其中 `user_name` 表示用户名。

```unknow
GRANT SELECT ANY DICTIONARY TO <user_name>;

```

上一篇

[PL 执行报错 -5542](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000441751)

下一篇

[PL 权限不足，错误代码 ORA-00942](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000001050) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
