如何更新user_tab_comments表的COMMENTS列?

andywzw 2004-10-25 02:51:59
我在执行update user_tab_comments set COMMENTS=(SELECT A.TBL_NAME FROM TBL_NAME A,user_tab_comments b WHERE A.TBL_NAME=b.TBL_NAME)的时候总是报告ORA-01031: 权限不足,请问如何处理?
用comment on table ADMINAWARDINFO is 'AAA';可以,但是执行效率慢,我的表名信息已经在一个表中。
...全文
878 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
andywzw 2004-10-28
  • 打赏
  • 举报
回复
谢谢你的建议,我会慎重考虑的,我提出这个问题暂时不结贴,希望大家能够继续讨论,因为这个问题可能大家或许会遇到,我想解决的办法会有很多。欢迎高手继续发表看法。
ATGC 2004-10-27
  • 打赏
  • 举报
回复
对了,俺对那些变量定义的时候宽度可能不够
你自己最好写成 %type的形式
andywzw 2004-10-27
  • 打赏
  • 举报
回复
太感谢你啦,高人就是高人!
ATGC 2004-10-27
  • 打赏
  • 举报
回复
,其它的,从未改过,没那个必要,还要冒风险。。弄得不好,数据库就再也无法启动了。。
ATGC 2004-10-27
  • 打赏
  • 举报
回复
俺还是不建议随便更改数据字典
弄得不好,破坏了数据的完整性
你还可以去改数据字典来修改列名呢。。
但是俺从不这么做

除了俺在数据字典改过字符集外,还有哪个AUDIT_TRAIL
jametong 2004-10-27
  • 打赏
  • 举报
回复
如果有sys.com$表的插入更新权限,可以直接对这个表进行插入更新,注意不要把obj#搞错了.^_^


SQL> create table t (t1 int );

Table created.

SQL> select object_id from obj where object_name = 'T';

OBJECT_ID
----------
5871

SQL> conn / as sysdba
Connected.
SQL> insert into com$ values(5871,null,'这只是一个做测试的临时表而已^_^');

1 row created.

SQL> commit;

Commit complete.

SQL> conn jfdata/jf
Connected.
SQL> select * from user_tab_comments where table_name = 'T';

TABLE_NAME TABLE_TYPE
-------------------- --------------------
COMMENTS
------------------------------------------------------------------------------------------------------------------------
T TABLE
这只是一个做测试的临时表而已^_^


SQL> conn / as sysdba
Connected.
SQL> update com$ set comment$ = 'this is just a test for test the comment adding'
2 where obj# = 5871 and col# is null;

1 row updated.

SQL> commit;

Commit complete.

SQL> conn jfdata/jf
Connected.
SQL> select * from user_tab_comments where table_name = 'T';

TABLE_NAME TABLE_TYPE
-------------------- --------------------
COMMENTS
------------------------------------------------------------------------------------------------------------------------
T TABLE
this is just a test for test the comment adding


SQL>
jack_4826 2004-10-26
  • 打赏
  • 举报
回复
修改table
bluelamb 2004-10-26
  • 打赏
  • 举报
回复
不能修改视图呀
ATGC 2004-10-26
  • 打赏
  • 举报
回复
楼主你为啥要更改数据字典啊?
数据字典是不能更改的
如果新建了一张表
那么在数据字典user_tables里就会自动增加一条记录,记录了你刚才增加的表的表名等信息
如果你这时候,把user_tables里面的这条记录手工删除了(事实上你没法删除,因为你不能对数据字典进行此类操作,除了一些特殊情况)

这算什么意思呢?
也就是实际的表是存在的,但是却没有在数据字典里面记录

也就是你是学校的学生,每天来上课
但是班级的学生名单里却没有你。。
andywzw 2004-10-26
  • 打赏
  • 举报
回复
那更改数据字典有什么更好的方法呢?
ATGC 2004-10-26
  • 打赏
  • 举报
回复
--这个程序是根据当前用户的所有表的表注释,去更新另一个用户的所有同名表的表注释的程序
--更新字段注释原理也一样的,你可以自己改改
create or replace procedure comm
is
cursor table_name is select table_name from user_tables;
type ref_cursor is ref cursor;
cursor_comm ref_cursor;
tablename varchar2(100);
my_comments varchar2(200);
my_sql varchar2(200);
my_update varchar2(200);
begin
open table_name;
loop
fetch table_name into tablename;
exit when table_name%notfound;
my_sql := 'select comments from user_tab_comments where table_name='''||tablename||'''';
open cursor_comm for my_sql;
loop
fetch cursor_comm into my_comments;
exit when cursor_comm%notfound;
--下面这行可以修改一下,把tablename改成另一个用户的tablename,比如用户2.tablename,就可以了
--如果是两台机器上的,那么有要建立DBLINK
my_update := 'comment on table '||tablename||' is '||''''||my_comments||'''';
--
if (lengthb(my_comments) != 0) then
execute immediate my_update;
end if;
end loop;
close cursor_comm;
end loop;
close table_name;
end comm;
/

ATGC 2004-10-26
  • 打赏
  • 举报
回复
如果你能用update去操作user_tab_comments
那就是怪事了。。

你一个一个手工commnet当然慢了
你可以写一个程序,从user_tab_comment和user_col_comments里面select记录
然后把检索到的记录改写成comment的形式,并保存到一个SQL脚本
然后执行这个脚本不就OK了?
andywzw 2004-10-26
  • 打赏
  • 举报
回复
我现在是这样做的,可是表(字段)太多,效率实在是太低了,所以我想问能不能用sql语句把查询到的直接更新到新的里面去,你刚才的这个方法我已经用了一天时间了,感觉太累。所以问看有没有更好的办法了。
ATGC 2004-10-26
  • 打赏
  • 举报
回复
俺这样说你能明白吗?
就是先从旧的系统查阅注释信息,
然后把查到的信息
再到新系统去更新
用 comment命令
更新表注释user_tab_comments和字段注释user_col_comments
ATGC 2004-10-26
  • 打赏
  • 举报
回复
俺终于明白你的意思
这样好了
先从旧的系统查阅这些注释信息
select comments from user_tab_comments;
select comments from user_col_comments;

comment on table aa is 'DNA表'
SQL> select comments from user_tab_comments where table_name='AA';

COMMENTS
--------------------------------------------------------------------------------
DNA表

comment on column aa.name is '基因名'
SQL> select comments from user_col_comments where table_name='AA';

COMMENTS
--------------------------------------------------------------------------------
基因名
andywzw 2004-10-26
  • 打赏
  • 举报
回复
不是,我明白你的意思,你说的数据字典是机器看的,我要给人做一份看的,我们前期设计的失误,对数据库里好多表都没有说明字段赶什么的,表干什么的,新来的开发人员一头雾水看不懂表,所以我要做一份纸张类型的数据字典,供以后用,你明白了吗?我不是非要强制更新数据字典。我们现在有两个系统,旧版本里面的数据字典在定义表的时候部分做了注释,可是新的没有,我的意思是把旧的读出更新新的,早做个大家都随时能查阅的资料,基本就是这样。
ATGC 2004-10-26
  • 打赏
  • 举报
回复
啥意思啊?
楼主好倔强,看来是非把oracle RDBMS自行维护的data dictionary改了不可^_^

你的一张表假如有10个字段,那么在数据字典USER_COLS_COMMENTS里面就会自动记录这张表的
10个字段名,假如这时候,你又对这张表添加了一个字段
alter table table_name add new_field varchar2(8);
那么,你在USER_COLS_COMMENTS里面就可以查到这张表有11个字段

你还要修改数据字典干吗?

真不明白楼主说的数据字典是什么
建议楼主看看Oracle的数据字典方面的定义。。

我想我说了多了,
andywzw 2004-10-26
  • 打赏
  • 举报
回复
我先后给了表update any table 和dba权限还是不行。
为什么要修改数据字典?因为我们的前期数据库设计工作没有做好文档,一些字段定义,表名做了定义,好多都没有,这样后来的人看不懂,所以现在是逆向做ER工作,为了充分利用已经做了得数据字典,我猜想着这样做的。希望各位高手继续关注中!
zhaokeke2004 2004-10-25
  • 打赏
  • 举报
回复
不能直接改
waxle 2004-10-25
  • 打赏
  • 举报
回复
数据字典应该是自己更新的,除非你是管理员,使管理员的话更新也要考虑清楚地,要不然可能会崩掉
加载更多回复(4)

17,139

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧