如何在SQL中创建派生属性(Oracle Application Express)

5gfr0r5j  于 2023-04-20  发布在  Oracle
关注(0)|答案(2)|浏览(137)

我正在尝试创建一个派生属性(从第一季派生的季节数)。我想我需要创建一个视图,但我不确定。
下面是我的代码:

Create Table Officials(
Fname varchar2(15) not null,
Lname varchar2(15) not null,
Sport_ID number(10,2),
First_Season number(10,2),
primary key (Lname),
foreign key (Sport_ID) references Sports(Sport_ID)
);

Create View Number_of_Seasons as
Select Fs.*, extract(year from (current_date-First_Season))  as Number_of_Seasons
From Officials;

我一直得到错误:
无效字符

mklgxw1f

mklgxw1f1#

选择Fs.,extract(year from(current_date-First_Season))可能无法在创建的表中找到Fs.。请精确说明您所指的列。
如果你指的是First_Season,那么就把它作为你进入表格的方式。

u1ehiz5o

u1ehiz5o2#

你说你用的是Oracle Apex,我想你是在它的SQL命令中运行了这段代码;如果是的话,请注意-即使你可以在那里 * 输入 * 你想要的命令,你必须选择你想执行的语句,然后按下“运行”按钮(或键盘上的〈CTRL + Enter〉)。
我创造了

  • sports表(因为它被officials引用)
  • officials
  • number_of_seasons视图
  • 不清楚你的意思是什么fs.*,因为在你发布的查询中没有类似的内容。它看起来像 * 一个表别名。因为你选择的唯一表是officials,我使用了该表的别名。一切正常(就创建而言):

另一方面,还有一些其他的“问题”。

  • 姓氏是主键吗?如果两个(或更多)官员有相同的姓氏怎么办?主键约束不允许重复。
  • 你选择了一种奇怪的数据类型。first_season列应该包含什么?它是一个小数点后两位的数字。此外,它然后在create view语句中使用。你从current_date中减去的数量,得到例如。
SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';

Session altered.

SQL> select current_date - 5.82 as number_of_seasons from dual;

NUMBER_OF_SEASONS
-------------------
05.04.2023 11:38:49

这对我来说不太对

  • sport_id也是一样。一个 decimal ID?可能,但我不认为我见过有人使用它。

因此,就代码本身而言,它背后的逻辑不是(至少对我来说)。

相关问题