执行Alter table后更新表



我正在尝试执行这段代码:

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表还没有完成。还有别的方法可以编程吗?

谢谢。

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

。这就是为什么动态SQL是邪恶的。为什么要在PL/SQL中修改表?在SQL级别更改它并编写一个"normal"有什么问题?代码之后?

如果你坚持这样做,那么你必须把所有都换成因为——正如你注意到的——你不能引用一个还不存在的列。

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

我建议你先修改表,然后再写PL/SQL代码

最新更新