如何使用SQL/PLSQL检查有效的Oracle表名

3
我需要检查一个字符串是否包含一个有效的Oracle表名,使用sql/plsql。我找到的Oracle表名的标准如下:
  1. 表名必须以字母开头。
  2. 表名不能超过30个字符。
  3. 表名必须由字母数字字符或以下特殊字符组成:$、_和#。
  4. 表名不能是保留字。
第1、2、3点似乎不太难解决。但是第4点怎么办?如果没有实际创建给定名称的表并查看其成功或失败的选项,我们有哪些选择呢?

3
规则4比规则1-3更加复杂,只要使用双引号将任何字符串括起来即可创建一张表(可以创建带有非ASCII字符的表)。 除了检查保留字之外,建议使用Jim Hudson提出的dbms_assert代替规则1-3。 - Vincent Malgrat
4个回答

7

Oracle内置了一个有用的功能,可以检查SQL名称是否有效。在构建动态查询并需要防止SQL注入时,这特别有用。

请查看dbms_assert.simple_sql_name内置,并查看Oracle白皮书《如何编写防注入PL/SQL代码》以获取更多详细信息。

v$reserved_words也很有用,正如其他人所指出的那样。


1
+1 建议使用内置函数。请注意,dbms_assert 仅适用于 Oracle11。 - Rob van Wijk
嗨,Rob,显然该软件包已在2005年的补丁中后移至Oracle的所有版本(包括8.1.7.4),以处理SQL注入威胁。它在新的10gR2实例上肯定可用,但同时也不在10gr2文档中。干杯。 - Vincent Malgrat

5

对于SQL保留字,您可以检查v$reserved_words。这里是来自文档的链接


很遗憾,在Oracle 9i中,这个视图只包含关键字和长度。 - jva

0
我有一个SQL_RESERVED_WORDS表,我会对其进行检查。
编辑:
(我撒谎了...它只是carpenteri帖子中表的同义词)

0

这是一个相当大的list需要检查。您是否可以简单地向表格添加默认前缀,从而完全避免这些问题?用户_xxx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接