ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 对面试中问题的解决,请高手提意见!

对面试中问题的解决,请高手提意见!

原创 Linux操作系统 作者:anchen211 时间:2006-06-20 19:26:23 0 删除 编辑
问题如下:
1 有a,b,c,d,e5个表,用a表的某个字段如a_id与e表中的字段进行比较,将重复的a表记录插入B表,不重复的C表,B表有主键约束(b_id),在插入B表中的过程中如发生主键冲突,将A表的a_char字段与相应的B表的B_char字段合并,并将id和char字段信息插入B表,A表记录有2000万条,E表记录有3000万条。如何书写一个存储过程进行以上的处理?

2 有两个数据库A,B,A库字符集US7ASCII,B库ZHS16GBK,A库中存在汉字,如何从B库中通过DBLINK查询而不产生乱码?

我的作法如下:

一 建表并插入数据:
--create tables;

CREATE TABLE A
(
  A_ID    NUMBER(8),
  A_CHAR  CHAR(10 BYTE)
)
TABLESPACE USERS

CREATE TABLE B
(
  B_ID    NUMBER(8),
  B_CHAR  CHAR(10 BYTE)
)
TABLESPACE USERS;

ALTER TABLE SCOTT.B ADD
CONSTRAINT pk_b
PRIMARY KEY (B_ID);

CREATE TABLE C
(
  C_ID    NUMBER(8),
  C_CHAR  CHAR(10 BYTE)
)
TABLESPACE USERS;

CREATE TABLE D
(
  D_ID    NUMBER(8),
  D_CHAR  CHAR(20 BYTE)
)
TABLESPACE USERS;

CREATE TABLE E
(
  E_ID    NUMBER(8)
)
TABLESPACE USERS;

--insert records
--insert into table a
declare
  l_cnt number:=0;
  l_rows number := &1;
--  l_id number(8);
--  l_char char(10);
begin
  execute immediate 'truncate table a';
  while (l_cnt < l_rows) loop
  execute immediate 'insert into a values (:1,:2)' using dbms_random.value(1,999) ,dbms_random.string('P',10);
  l_cnt:=l_cnt+1;
  end loop;
  commit;
end;
/

--insert into table b
declare
  l_cnt number:=0;
  l_rows number := &1;
--  l_id number(8);
--  l_char char(10);
begin
  execute immediate 'truncate table b';
  while (l_cnt < l_rows) loop
  execute immediate 'insert into b values (:1,:2)' using l_cnt ,dbms_random.string('P',10);
  l_cnt:=l_cnt+1;
  end loop;
  commit;
end;
/

--insert into table e
declare
  l_cnt number:=0;
  l_rows number := &1;
--  l_id number(8);
--  l_char char(10);
begin
  execute immediate 'truncate table e';

  while (l_cnt < l_rows) loop
  execute immediate 'insert into e values (:1)' using dbms_random.value(1,999);
  l_cnt:=l_cnt+1;
  end loop;
  commit;
end;
/

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9375/viewspace-555075/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-11-04

  • 博文量
    129
  • 访问量
    176368