论坛首页 综合技术论坛

请教一个PL/SQL的问题

浏览 2980 次
精华帖 (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也要是表名才行,想的头都疼了,哪位朋友知道,或做过类似的说下,最好能贴出
原代码,谢谢了
   发表时间:2006-12-25  
你的过程思路有点奇怪,游标取出来的东西可以直接fetch到变量里的,何必要再加一句select into呢?

你从changetable里取出来的tablename只是一个字符串,不能直接用在dml和ddl语句里面的。

要这样用才行
  asql:='delete from ' || tablename;
  execute immediate asql;
0 请登录后投票
   发表时间:2006-12-25  
clamp兄,真是太感谢了, ,问题已经解决了,PL/SQL我都忘的差不多了,刚巧要写这个,而且动态SQL语句以前都没学过,现在学到了一点,呵呵
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics