2013-02-22 458 views
2

嘿,我的任务是编写一个脚本来重命名表。虽然这听起来很容易,但还有其他一些事情需要记住。有一个表格,其中包含所有其他需要更改名称的表格。表中各行由3列组成,第一列为未分区,第二列为原始纳米,第三列为可分区表。我被告知使用select语句来选择两个表,然后使用这些表来更改名称。这是我到目前为止有:使用select语句重命名表的PL/SQL脚本

declare 
begin 
    execute immediate 'select unpartitiontablenm "table1", originaltablenm "table2" 
        from tabletransformation      
        alter table table1 
        rename to table2'; 
end; 

现在我试图把他送到其他方法可以做到这一点,如重命名参数,只是一个简单的脚本来接受这两个表,他想重新命名,但所有这些他不想要。也许我只是不明白为什么这种方式更好,但哦,当你需要薪水时你可以做什么。无论如何,我需要一些帮助,准确理解他希望我做什么以及离我有多远。提前致谢。

我明白上面的代码是错误的,但它可能会让你更好地理解他如何向我描述它。

回答

3

这听起来像你想要的东西像

DECLARE 
    l_sql_stmt VARCHAR2(4000); 
BEGIN 
    FOR i IN (SELECT unpartitiontablenm, originaltablenm 
       FROM tableTransformation) 
    LOOP 
    l_sql_stmt := 'ALTER TABLE ' || i.unpartitiontablenm|| 
        ' RENAME TO ' || i.originaltablenm ; 
    EXECUTE IMMEDIATE l_sql_stmt; 
    END LOOP; 
END; 
+0

咦,我从来没有想过这个问题。他总是提到一次只能做一张桌子,但也许这只是一个错误的交流。感谢您指点我正确的方向。 – 2013-02-22 16:38:53

+0

@AdamHalegua - 请注意,它一次只能处理一个表。 – 2013-02-22 16:58:51

+0

谢谢贾斯汀,但我发现他真的想要这样的: 'select'rename table'|| unpartitiontablenm ||'从'tabletransformation'到'|| || || || || || |||这是我们的沟通不畅。 – 2013-02-22 18:32:04