在 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' 应该适用于您列出的所有产品。
我想了解使用以 @
符号开头的 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' 应该适用于您列出的所有产品。