免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1620 | 回复: 9
打印 上一主题 下一主题

oracle 求助 急!!! 在线等候~~~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-08-09 13:19 |只看该作者 |倒序浏览
各位前辈,我是个初学者,对SQL还不熟悉,现有2张表 A、B
分别有 字段 PERSONID 、NAME 两个字段,
怎样把 B中的PERSONID修改为A中相应PERSON的PERSONID

谢谢,
在线等候!!     

update b set b.personid=a.personneid where b.name=a.name;

update b set b.personnid=a.personnid where b.name=a.name
                                                                                               *
ERROR 位于第 1 行:
ORA-00904: 无效列名

论坛徽章:
0
2 [报告]
发表于 2003-08-09 13:27 |只看该作者

oracle 求助 急!!! 在线等候~~~

这里是不是要用到一个 嵌套 应该怎么写?

论坛徽章:
0
3 [报告]
发表于 2003-08-09 14:08 |只看该作者

oracle 求助 急!!! 在线等候~~~

update b set personid=(select personid from a where b.name=a.name and rownum<2);

论坛徽章:
0
4 [报告]
发表于 2003-08-09 14:19 |只看该作者

oracle 求助 急!!! 在线等候~~~

SQL>;update b set personid=(select personid from a where b.name=a.name and rownum<2);
update b set personid=(select personid from a where b.name=a.name and rownum<2);
                                                                           *
ERROR 位于第 1 行:
ORA-00904: 无效列名

论坛徽章:
0
5 [报告]
发表于 2003-08-09 15:43 |只看该作者

oracle 求助 急!!! 在线等候~~~

update b set personid=(select a.personid from a where b.name=a.name and rownum<2);

论坛徽章:
0
6 [报告]
发表于 2003-08-10 10:04 |只看该作者

oracle 求助 急!!! 在线等候~~~

update b set personid=(select a.personid from a where b.name=a.name and rownum<2);

ERROR 位于第 1 行:
ORA-00904: 无效列名
( * 指向a.personid )

select a.personid from a where b.name=a.name and rownum<2
ERROR 位于第 1 行:
ORA-00904: 无效列名
( * 指向b.name)

论坛徽章:
0
7 [报告]
发表于 2003-08-10 13:02 |只看该作者

oracle 求助 急!!! 在线等候~~~

这可以写一个PROCEDURE
CREATE OR REPLACE PROCEDURE update_b AS
CURSOR my_cur IS
  SELECT personid,name
  FROM a;
my_check VARCHAR2(1);

BEGIN

FOR my_rec IN my_cur
LOOP

BEGIN

SELECT '1'
INTO my_check
FROM b
WHERE name=my_rec.name;

UPDATE b
SET personid=my_rec.personid
WHERE name=my_rec.name;

COMMIT;

EXCEPTION
   WHEN NO_DATA_FOUND THEN
     RAISE_APPLICATION_ERROR(-20001,'Can not find name in b');
  END;

  EXIT WHEN my_cur%NOTFOUND;

  END LOOP;

END;

*****************
把以上存为文件update_b.sql
然后在sqlplus下:
@update_b.sql
exec update_b;

论坛徽章:
0
8 [报告]
发表于 2003-08-10 13:38 |只看该作者

oracle 求助 急!!! 在线等候~~~

注意oracle表,列名区分大小。
实例:

SQL>; create table a (personid number,name varchar2(40));

Table created

SQL>; insert into a values(1,'n1');

1 row inserted

SQL>; insert into a values(2,'n2');

1 row inserted

SQL>; create table b (personid number,name varchar2(40));

Table created

SQL>; insert into b values(0,'n1');

1 row inserted

SQL>; insert into b values(0,'n2');

1 row inserted

SQL>; select a.name,a.personid a_id,b.personid b_id from a,b where a.name=b.name;

NAME                                           A_ID       B_ID
---------------------------------------- ---------- ----------
n1                                                1          0
n2                                                2          0

SQL>; update b set personid=(select personid from a where b.name=a.name and rownum<2);

2 rows updated

SQL>; select a.name,a.personid a_id,b.personid b_id from a,b where a.name=b.name;

NAME                                           A_ID       B_ID
---------------------------------------- ---------- ----------
n1                                                1          1
n2                                                2          2

SQL>;

论坛徽章:
0
9 [报告]
发表于 2003-08-13 15:29 |只看该作者

oracle 求助 急!!! 在线等候~~~

谢谢!

论坛徽章:
0
10 [报告]
发表于 2003-08-13 15:34 |只看该作者

oracle 求助 急!!! 在线等候~~~

谢谢各位的帮助!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP