浏览 3015 次
锁定老帖子 主题:请教一个PL/SQL的问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-12-25
CREATE OR REPLACE PROCEDURE relate_transaction AS CURSOR c_Tablename IS SELECT tc.tablename FROM test.changetable tc; v_Tablename test.changetable.tablename%TYPE; BEGIN FOR v_TableData IN c_Tablename LOOP SELECT tc.tablename INTO v_Tablename FROM test.changetable tc WHERE tc.tablename=v_TableData.tablename; DBMS_OUTPUT.PUT_LINE(v_Tablename); DELETE FROM kevin.v_Tablename; INSERT INTO kevin.v_Tablename SELECT * FROM tony.v_Tablename; END LOOP; END; 我在表changetable里保存了各个表的表名,test是个schema,我想从changetable表里取的各个表名, 用tony用户下同名的表去替代kevin用户下同名的表,这两个用户下表结构也是相同的。我想把表名存在 v_Tablename里,但是系统会认为v_Tablename本身就是个表名,报错,朋友给我支招,用%ROWTYPE, 但是这样 DECLARE v_Student student%ROWTYPE; BEGIN 。。。。。。 END; 声明变量时这个student也要是表名才行,想的头都疼了,哪位朋友知道,或做过类似的说下,最好能贴出 原代码,谢谢了 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-12-25
你的过程思路有点奇怪,游标取出来的东西可以直接fetch到变量里的,何必要再加一句select into呢?
你从changetable里取出来的tablename只是一个字符串,不能直接用在dml和ddl语句里面的。 要这样用才行 asql:='delete from ' || tablename; execute immediate asql; |
|
返回顶楼 | |
发表时间:2006-12-25
clamp兄,真是太感谢了, ,问题已经解决了,PL/SQL我都忘的差不多了,刚巧要写这个,而且动态SQL语句以前都没学过,现在学到了一点,呵呵
|
|
返回顶楼 | |