编了几段小代码,频频报错,还找不出错误在哪里,求教高手!1. 
SQL> declare
2 v_cmpnt frep.component.cmpnt_name%type;
3 cursor c_column is
4 select distinct column_name from all_tab_columns where table_name = 'COMPONENT'
5 and owner = 'FREP'
6 and column_name not like '%ID'
7 union select distinct column_name from all_tab_columns where table_name = 'COMPONENT'
8 and owner = 'FREP'
9 and column_name like '%UID';
10 begin
11 for v_column in c_column loop
12 for v_cmpnt in (select cmpnt_name from frep.component) loop
13 execute immediate 'update frep_targe.component
14 set '||v_column.column_name||' = (select '||v_column.column_name||' from frep.component where v_cmpnt.cmpnt_name = cmpnt_name)
15 where cmpnt_name = v_cmpnt.cmpnt_name';
16 end loop;
17 end loop;
18 end;
19 /ORA-00942: 表或视图不存在
ORA-06512: 在line 13但是第13行中frep_targe.component.component这张用户表是真实存在的,实在找不出错误在哪里,想请问高手帮忙想想可能是什么问题?
2.触发器
SQL> CREATE OR REPLACE TRIGGER TR_NEW_CABLE
  2   BEFORE INSERT ON wire_terminal
  3  DECLARE
  4   v_count NUMBER;
  5   v_cable_num cable.cable_num%TYPE;
  6   v_panel_name panel.panel_name%TYPE;
  7   v_cable_side VARCHAR2;
  8   v_string VARCHAR2(30);
  9  FOR EACH ROW
 10  BEGIN
 11   select count(*) into v_count from wire_terminal where cable_id = :new.cable_id and cable_side = :new.cable_side;
 12   if v_count = 0 then
 13       select cable_num into v_cable_num,panel_name into v_panel_name,:new.cable_side into v_cable_side from cable,panel,wire_terminal
 14   where cable.cable_id = :new.cable_id and
 15   panel.panel_id = :new.panel_id;
 16       v_string = 'side_' & v_cable_side & '_desc'
 17       update cable set v_string  = :v_panel_name where cable_id = :new.cable_id;
 18   else
 19       break;
 20   end if
 21  
 22  END TR_NEW_CABLE;
 23  /Warning: Trigger created with compilation errors说我触发器有错误但又没有任何调试信息,从逻辑上看应该正确的,请大家帮我一起看看,谢谢!

解决方案 »

  1.   

    13 execute immediate 'update frep_targe.component楼主的13行里面的“'update frep_targe.component”这句话中的frep_targe是否是另外一个已存在的用户名,如果是,请确认该用户下是否存在component表;如果不是,那就是楼主的用户名写错了,因为其他地方用的都是frep
      

  2.   

    13      select cable_num into v_cable_num,panel_name into v_panel_name,:new.cable_side into v_cable_side from cable,panel,wire_terminal
     14  where cable.cable_id = :new.cable_id and
     15  panel.panel_id = :new.panel_id;
     16      v_string = 'side_' & v_cable_side & '_desc'楼主的这一段写得很混乱,我依照我的想法修改了一下,看符不符合楼主的意思:
    那个查询:
    SELECT
    CABLE_NUM,
    PANEL_NAME,
    :NEW.CABLE_SIDE
    INTO
    V_CABLE_NUM,
    V_PANEL_NAME,
    V_CABLE_SIDE 
    FROM
    CABLE,
    PANEL,
    WIRE_TERMINAL
    WHERE
    CABLE.CABLE_ID = :NEW.CABLE_ID AND
    PANEL.PANEL_ID = :NEW.PANEL_ID;
    那个赋值:
    V_STRING := 'SIDE_' || V_CABLE_SIDE || '_DESC';
      

  3.   

    bwl314(jackaroo)不好意思,可能我没有说明清楚。我以sys用户名以sysdba的身份登陆pl/sql developer,数据库中存在两个用户,cnstd和cnstd_target.两者的数据库结构完全一致,只是数据不同。我现在要完成的目标是把这两个用户名下的数据库中component表的数据进行拷贝。component(cmpnt_id,cmpnt_type_id,cmpnt_name,column1,column2,cmpnt_uid)其中cmpnt_id为主键,由系统自动分配。我现在拷贝的目标是把cnstd.component中除了以id结尾(不包括uid结尾)的所有字段中的数据,以cmpnt_name为标准传递到cnstd_target.component表中。
    后面那个触发器我按照你的试了一下,好象还是有问题。
    我现在重新把问题发帖了,谢谢你。