如果我要添加的列具有我创建的类型,是不是可以使用 alter table 添加列?

Posted

技术标签:

【中文标题】如果我要添加的列具有我创建的类型,是不是可以使用 alter table 添加列?【英文标题】:Is it possible to add a column with alter table if the column that i'm adding has a type created by me?如果我要添加的列具有我创建的类型,是否可以使用 alter table 添加列? 【发布时间】:2018-03-27 23:03:43 【问题描述】:

如果我添加的列具有我创建的类型,是否可以使用 alter table 添加列?

这是代码:

CREATE OR REPLACE TYPE istoric IS table OF number(6,2);  
ALTER TABLE studenti ADD (history istoric) NESTED TABLE history STORE AS lista_tab;

我得到错误:

ORA-01031:权限不足。

我已经尝试授予权限,但这并没有改变任何东西。

【问题讨论】:

dba.stackexchange.com/questions/37651/… 【参考方案1】:

您的用户 ID 没有更改表的权限。 DBA 应通过以下方式GRANT 具有所需权限的用户 ID:

grant alter on tablename to youruserid;

参考:Oracle alter table insufficient privileges

要了解有关 Oracle 中权限的更多信息:https://docs.oracle.com/database/121/DBSEG/authorization.htm#DBSEG99869

【讨论】:

我解决了权限问题。但现在我有错误: SQL 错误:ORA-00902:无效数据类型 我知道我可以使用用户定义的数据类型创建 TABLE,但我不知道是否可以使用 ALTER TABLE 添加包含用户定义数据的列类型。 我自己没有经历过使用用户定义的数据类型更改表,但根据我检查的一些在线资源,这似乎是肯定的。见:java2s.com/Tutorial/Oracle/0620__Object-Oriented/… 拥有您的代码应该运行的适当权限。【参考方案2】:

没有什么特殊你应该做的;我在我的 Oracle 11g XE 数据库上对其进行了测试。显然,您所需要的只是CREATE TABLECREATE TYPE 权限。看看这个演示:首先,作为一个特权用户,我正在创建一个全新的用户,授予它特权,然后做你在你的问题中所做的事情。效果很好。

SQL> create user vlad identified by sima
  2  default tablespace users
  3  quota unlimited on users;

User created.

SQL> grant create session, create table, create type to vlad;

Grant succeeded.

SQL> connect vlad/sima@xe
Connected.

Session altered.

SQL> create table studenti (id number);

Table created.

SQL> create type istoric is table of number(6, 2);
  2  /

Type created.

SQL> alter table studenti add (history istoric) nested table history store as lista_tab;

Table altered.

SQL>

那么,STUDENTI 表属于谁?你,还是别人?如果是后者,那么是的 - 你可能缺乏某些特权。

【讨论】:

以上是关于如果我要添加的列具有我创建的类型,是不是可以使用 alter table 添加列?的主要内容,如果未能解决你的问题,请参考以下文章

迭代具有固定行的列

在R中添加具有连续数字的列

SSIS:将不存在的列添加到 CSV 源

Oracle - 验证表是不是存在与具有表名值的列同名

将具有当前时间戳的列添加到 Hive 中的表

如果源文件中不存在,ssis 添加具有默认值的列