编了几段小代码,频频报错,还找不出错误在哪里,求教高手!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说我触发器有错误但又没有任何调试信息,从逻辑上看应该正确的,请大家帮我一起看看,谢谢!
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说我触发器有错误但又没有任何调试信息,从逻辑上看应该正确的,请大家帮我一起看看,谢谢!
解决方案 »
- 关于orcal的别名运用范围限制和子查询里的order by必须用在ruownum的矛盾问题。
- 求教一 oracle sql 正则表达式
- t_APAS_DICT
- ORA-01460: unimplemented or unreasonable conversion requested
- 求一个SQL语句,很急
- 在虚拟机下安装ORACLE 11G,无法打开OEM
- oracle 如何高效查询一个月中最早成交的记录
- 請問學習Oracle developer 6I有什么中文好書?
- 存储过程出现缓冲溢出的问题
- 一个没人提过但很关键的问题!!!!!!连接ORACLE的结果集为什么是只读的???
- java程序中如何用RunTime执行sql plus命令
- 如何编程获得Oracle客户端的版本?
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';
后面那个触发器我按照你的试了一下,好象还是有问题。
我现在重新把问题发帖了,谢谢你。