首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >` `Publisher(pub_name,pub_branch)`中的` `Publisher()`是什么?

` `Publisher(pub_name,pub_branch)`中的` `Publisher()`是什么?
EN

Stack Overflow用户
提问于 2018-07-20 06:07:09
回答 1查看 32关注 0票数 1

在数据库系统概念中,对于对象关系数据库的SQL命令:

代码语言:javascript
运行
复制
create type Publisher as
(name varchar(20),
branch varchar(20));

create type Book as
(title varchar(20),
author array varchar(20) array [10],
pub date date,
publisher Publisher,
keyword set varchar(20) multiset);

insert into books
values (’Compilers’, array[’Smith’, ’Jones’],
new Publisher(’McGraw-Hill’, ’New York’),
multiset[’parsing’, ’analysis’]);

create table flat_Book as
(title varchar(20),
author array varchar(20) array [10],
pub_name varchar(20),
pub_branch varchar(20));

select title, author, Publisher(pub_name, pub_branch) as publisher
from flat_books
group by title, author, publisher;

它里面的Publisher(pub_name, pub_branch)Publisher()是什么?

Publisher()似乎不是Publisher类型的构造函数方法,因为对构造函数方法的调用需要new,例如new Publisher(’McGraw-Hill’, ’New York’)

我猜PostgreSQL可能有类似的命令,因为它很好地遵循SQL标准,而且也是对象关系型数据库管理系统。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-07-20 12:37:48

正如Laurenz Albe在回答昨天的类似问题时提到的,create table T在幕后执行隐式create type T,以创建具有与表相同结构的复合类型。

然后我们来看一下type casts in the fine manual

类型转换指定从一种数据类型到另一种数据类型的转换。PostgreSQL接受两种等价的类型转换语法:

CAST (表达式作为类型) expression::type

..。

还可以使用类似函数的语法指定类型转换:

typename (表达式)

和:

备注

类似函数的语法实际上只是一个函数调用。当两种标准强制转换语法中的一种用于执行运行时转换时,它将在内部调用一个已注册的函数来执行转换。按照惯例,这些转换函数具有与其输出类型相同的名称,因此“类似函数的语法”只不过是对底层转换函数的直接调用。

把这些放在一起:

  • create table publisher还对给定的类型T执行create type publisher.
  • For,T(expr)是一种类型转换。
  • 因此publisher(a, b)本质上是使用基础类型转换函数的类型转换。

查看文档的Composite Types部分也会很有帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51432380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档