首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行Alter table后更新Table

执行Alter table后更新Table
EN

Stack Overflow用户
提问于 2021-10-19 07:53:24
回答 1查看 27关注 0票数 0

我正在尝试执行以下代码:

代码语言:javascript
复制
DECLARE 
    CURSOR select_grupos IS SELECT * FROM grupo_musical;
    grupo grupo_musical%ROWTYPE;
    contador NUMBER;
    TYPE ciudades IS TABLE OF VARCHAR2(30);
    capitales_vascas ciudades;
BEGIN
    EXECUTE IMMEDIATE 'ALTER TABLE GRUPO_MUSICAL ADD ciudad_origen VARCHAR2(30)';  
    capitales_vascas := ciudades('Bilbao', 'Donostia', 'Gasteiz');
    contador := 0;
    FOR grupo IN select_grupos LOOP
        grupo.ciudad_origen := capitales_vascas(MOD(contador, 3) + 1); 
        UPDATE grupo_musical SET ROW=grupo WHERE id_grupo=grupo.id_grupo;
        contador := contador + 1; 
    END LOOP;
END;
/

它说我必须声明'ciudad_origen‘。我理解这是因为当我创建游标时,Alter table还没有完成。有没有其他方法可以让我编程呢?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-10-19 08:02:20

我理解这是因为当我创建游标时,Alter table还没有完成

一点儿没错。这就是为什么动态SQL是邪恶的。为什么要更改PL/SQL中的表?在SQL级别更改它,然后编写“普通”代码有什么错?

如果您坚持这样做,那么您将不得不将everything转换为dynamic SQL,因为您已经注意到,您不能引用还不存在的列。

那么,为什么它是邪恶的呢?因为动态SQL很难调试和维护。注意你必须转义的所有单引号(或使用q-quoting机制),格式不佳的代码(没有GUI内置格式化程序会接触引号中的代码,就其而言,引号只是一个字符串)等。

我建议您先修改table,然后编写PL/SQL代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69626968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档