Oracle的触发器中怎么使用得到的变量值作为表名?
Oracle的触发器中如何使用得到的变量值作为表名???????????????
假设有一个表A, 字段 name,value,tablename, 其中当value更新的时候,要在tablename字段值为名的表中也写入一份拷贝。把这个作为触发器,总是失败,不知道字段如何作为表名。
定义了一个 declare tname varchar2(50)
然后在begin中
select tablename into tname from A where name = :new.name;
然后 insert into tname 这样就是错的。怎么解决?
------解决方案--------------------
现在这样,tname是个字符串,代表不了 表。
不知怎么解决,同求解
------解决方案--------------------
考虑使用动态sql
------解决方案--------------------
如果需要以查询结果中的内容为字段名和字段类型建表该怎么办呢?比如:
------解决方案--------------------
假设有一个表A, 字段 name,value,tablename, 其中当value更新的时候,要在tablename字段值为名的表中也写入一份拷贝。把这个作为触发器,总是失败,不知道字段如何作为表名。
定义了一个 declare tname varchar2(50)
然后在begin中
select tablename into tname from A where name = :new.name;
然后 insert into tname 这样就是错的。怎么解决?
------解决方案--------------------
现在这样,tname是个字符串,代表不了 表。
不知怎么解决,同求解
------解决方案--------------------
考虑使用动态sql
v_sql := 'insert into '
------解决方案--------------------
tname
------解决方案--------------------
' values(...)';
execute immediate v_sql;
------解决方案--------------------
如果需要以查询结果中的内容为字段名和字段类型建表该怎么办呢?比如:
DECLARE
CURSOR cursor_temp IS
SELECT * FROM TAB1 INNER JOIN TAB2 ON TAB1.FIELD1 = TAB2.FIELD1;
BEGIN
FOR e_Info IN cursor_temp
LOOP
-- 在这里 以e_Info.tabName为表名(其实还需要添加个后缀),以e_Info.FIELDNAME1 TAB1.FIELDNAME1%TYPE 为字段名和字段类型,然后在增加几个自定义字段建表,怎么办?
END LOOP;
END;
------解决方案--------------------