首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

Oracle的触发器中怎么使用得到的变量值作为表名?

2013-07-26 
Oracle的触发器中如何使用得到的变量值作为表名???????????????假设有一个表A, 字段 name,value,tablename

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

v_sql := 'insert into ' 
[解决办法]
 tname 
[解决办法]
 ' values(...)';

execute immediate v_sql;

[解决办法]
引用:
考虑使用动态sql

SQL code?123v_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;

[解决办法]
引用:
假设有一个表A, 字段 name,value,tablename, 其中当value更新的时候,要在tablename字段值为名的表中也写入一份拷贝。把这个作为触发器,总是失败,不知道字段如何作为表名。

定义了一个 declare tname varchar2(50)
然后在begin中
select tablename into tname  from A w……



INSERT INTO TNAME?  
[解决办法]
3楼那个同样可以使用动态sql


v_sql := 'create table ' 
[解决办法]
 e_Info.tabName 
[解决办法]
 '( ' 
[解决办法]
 e_Info.FIELDNAME1 
[解决办法]
 ' ' 
[解决办法]
 【数据类型及长度须先取回..】 
[解决办法]
 ', col2 varchar2(20), col3 date, ... )';
execute immedate v_sql;


[解决办法]
建表语句本身就是强制commit,不可能在触发器中使用,非要使用只能用自治事务。
[解决办法]
引用:
3楼那个同样可以使用动态sql

SQL code?12v_sql := 'create table ' 
[解决办法]
 e_Info.tabName 
[解决办法]
 '( ' 
[解决办法]
 e_Info.FIELDNAME1 
[解决办法]
 ' ' 
[解决办法]
 【数据类型及长度须先取回..】 
[解决办法]
 ', col2 varchar2(20), col3 date, ... )';execute immedate……


【数据类型及长度须先取回..】 ?

这个怎么取啊?我就卡在这了?求助啊,谢谢啦!
[解决办法]
引用:
引用:3楼那个同样可以使用动态sql

SQL code?12v_sql := 'create table ' 
[解决办法]
 e_Info.tabName 
[解决办法]
 '( ' 
------解决方案--------------------


 e_Info.FIELDNAME1 
[解决办法]
 ' ' 
[解决办法]
 【数据类型及长度须先取回..】 
[解决办法]
 ', col2 varchar2(20), col3 date, ...……



这个大概需要你去读取数据字典了,或者预先跟FIELDNAME1一起写入表TAB1内……

热点排行