---
title: Oracle 模式如何查看存储过程创建与编译过程中语法错误或不兼容的语法 -OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于Oracle 模式如何查看存储过程创建与编译过程中语法错误或不兼容的语法 相关的常见问题和使用技巧，帮助您快速解决Oracle 模式如何查看存储过程创建与编译过程中语法错误或不兼容的语法 的难题。
---
切换语言

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

划线反馈

# Oracle 模式如何查看存储过程创建与编译过程中语法错误或不兼容的语法

更新时间：2024-01-22 01:56

适用版本： V2.2.x、V3.1.x、V3.2.x 内容类型：How-to  

本文主要介绍如何通过 OBClient 查看存储过程创建与编译过程中语法错误或不兼容的语法。

## 适用版本

OceanBase 数据库 V2.x 及后续版本。

## 问题引入

用户从 Oracle 迁移到 OceanBase 数据库的 Oracle 模式存储过程中存在不兼容语法，提示存在无效对象。

![obclient_odc](https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/8200771161/p233085.png)

用户从 Oracle 迁移的存储过程可能很长，但是目前 ODC 等图形工具还不支持 Oracle PL/SQL Developer 工具等图形界面编译存储过程、函数、包等语法校验提示。

## 排查方法

较大的存储过程创建和在 OeceanBase 数据库的编译调试较为困难。但可以在 OBClient 中创建或编译后，查看 OBClient 客户端返回错误信息方式辅助定位。

- 对于语法错误，可以通过错误信息查看存在语法错误文本的位置，以及部分错误文本。例如 ORA-00900 表示语法错误。

  ```unknow
  obclient> CREATE OR REPLACE PROCEDURE proc_t1 AS CURSOR c1 IS SELECT * FROM t1; BEGIN FOR x IN c1 LOOP DBMS_OUTPUT.put_line(x); END LOOP; END proc_t1; /
  ORA-00900: You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near 't1' at line 1

  ```
 - 对于语义错误，可以通过 `SHOW ERRORS` 命令查看。

  `SHOW ERRORS` 可以展示编译过程中的语义错误，您可以根据错误提示信息修改存储过程。有关语义错误的详细原因，请参见《OceanBase 数据库 参考指南》 中的 **错误码** 章节。

  ![showerrors](https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/8200771161/p233087.png)

上一篇

[OceanBase 数据库 Mysql 模式下存储过程内是否支持创建临时表](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000267167)

下一篇

[OceanBase 数据库 Oracle 模式查看各类对象上次编译的错误信息](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000209958) ![有帮助](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) 咨询热线
