如果我要添加的列具有我创建的类型,是不是可以使用 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 TABLE
和CREATE 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 添加列?的主要内容,如果未能解决你的问题,请参考以下文章