是否可以确定哪些数据库对象是在Oracle中使用带引号的标识符创建的



我有一个模式,其中数千个存储过程中的一小部分是用带引号的标识符创建的。我需要修理它们。我目前识别它们的唯一方法是在SQLDeveloper中打开它们,一次打开一个,并检查顶部的CREATE OR REPLACE...位是否在过程名称周围有引号。有人有什么狡猾的方法可以更容易地识别这些麻烦的物体吗?我是否忽略了一些带有this_uses_quoted_identifiers标志的Oracle系统视图?请开导我!

至少有两种方法:

select * from all_source where type = 'PROCEDURE' and line = 1 and text like '%"%'

select * from all_procedures where procedure_name != upper(procedure_name)

然而,没有一个是100%正确和完整的。第一个查找第一行中的任意双引号。第二种方法只能找到名称中大写字母较低的程序,这意味着使用了双引号。

据我所知,如果你引用了一个标识符,但所有的字母都是大写的,那么它就相当于未引用的标识符。因此,您可以从ALL_OBJECTS中进行选择,以查看哪些对象名称具有非大写字母的名称。

最新更新