在 Oracle/SqlServer/PgSql 中 table 名称的开头使用 @

Using @ at the beginning of table names in Oracle/SqlServer/PgSql

我想了解使用以 @ 符号开头的 table 名称是否有任何缺点。

我们需要一个易于识别的模式来将这些 table 与同一模式中的其他模式区分开来。

我们目前与以下所有人员合作:
- Oracle 10g 及更高版本
- SqlServer 2008 R2 及更高版本
- Postgres 9.1 及更高版本

我尝试了所有这些并且 table 创建成功,但我找不到好的文档来确定这是否真的被允许。

@ 是(标准)SQL 中标识符的非法字符。

手册中记录了不需要双引号的有效(合法)标识符的规则:

Postgres manual 本质上引用了 SQL 标准:

SQL identifiers and key words must begin with a letter (a-z, but also letters with diacritical marks and non-Latin letters) or an underscore (_). Subsequent characters in an identifier or key word can be letters, underscores, digits (0-9), or dollar signs ($)

Oracle manual 本质上是一样的:

Nonquoted identifiers can contain only alphanumeric characters from your database character set and the underscore (_), dollar sign ($), and pound sign (#).

请注意,Oracle 在涉及 DBLink 时有一个例外:

Database links can also contain periods (.) and "at" signs (@). Oracle strongly discourages you from using $ and # in nonquoted identifiers.

如果您使用带引号的标识符,您可以在标识符中包含 @。但是 Oracle 手册也指出:Oracle 不建议对数据库对象名称使用带引号的标识符

Using @ at the beginning of table names in Oracle

我会坚持使用 Oracle。

据我所知,Oracle 不允许您这样做。

即使允许。实际上,SQL*Plus 是一个会成为问题的地方。如果在 处有 "at"(@) 符号,那么执行脚本将是一场灾难]table_name。

我知道的唯一例外,在此处引用 Oracle 文档 http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements008.htm:

Database links can also contain periods (.) and "at" signs (@). Oracle strongly discourages you from using $ and # in nonquoted identifiers.

您需要以公共字符串(如 acctg 或 payroll)开始每个组的名称,并通过应该在 'every' 数据库中的 information_schema.table 视图搜索名称。要出售以 acctg 开头的所有表格的列表,您必须执行以下操作:

select * 来自 information_schema.tables where left(name,5)='acctg' 应该适用于您列出的所有产品。