Sql 在oracle上失败的alter语句
我是Oracle的新手(有SQL Server背景)。我正在尝试执行此匿名块,但ORA-06550失败。我觉得我可能不明白在匿名区块中可以做什么和不可以做什么。如果有人能如此好心地教育我,我将不胜感激Sql 在oracle上失败的alter语句,sql,oracle,ddl,Sql,Oracle,Ddl,我是Oracle的新手(有SQL Server背景)。我正在尝试执行此匿名块,但ORA-06550失败。我觉得我可能不明白在匿名区块中可以做什么和不可以做什么。如果有人能如此好心地教育我,我将不胜感激 BEGIN ALTER TABLE <SCHEMA_NAME>.<TABLE_1_NAME> MODIFY <FIELD_NAME> VARCHAR2(50); ALTER TABLE <SCHEMA_NAME>.<TABL
BEGIN
ALTER TABLE <SCHEMA_NAME>.<TABLE_1_NAME> MODIFY <FIELD_NAME> VARCHAR2(50);
ALTER TABLE <SCHEMA_NAME>.<TABLE_2_NAME> MODIFY <FIELD_NAME> VARCHAR2(50);
ALTER TABLE <SCHEMA_NAME>.<TABLE_3_NAME> MODIFY <FIELD_NAME> VARCHAR2(50);
END;
开始
改变桌子。修改VARCHAR2(50);
改变桌子。修改VARCHAR2(50);
改变桌子。修改VARCHAR2(50);
结束;
错误:
ORA-06550:第2行第1列:PLS-00103:在预期以下情况时遇到符号“ALTER”: (如果循环mod null pragma,则开始案例为goto声明退出
使用
不能在PL/SQL块内执行
DDL
语句。请删除BEGIN-END
语句,然后在纯SQL
中执行alter语句:
ALTER TABLE <SCHEMA_NAME>.<TABLE_1_NAME> MODIFY <FIELD_NAME> VARCHAR2(50);
ALTER TABLE <SCHEMA_NAME>.<TABLE_2_NAME> MODIFY <FIELD_NAME> VARCHAR2(50);
ALTER TABLE <SCHEMA_NAME>.<TABLE_3_NAME> MODIFY <FIELD_NAME> VARCHAR2(50);
ALTER TABLE.修改VARCHAR2(50);
修改表格。修改VARCHAR2(50);
修改表格。修改VARCHAR2(50);
作为一种最佳实践,您应该避免对DDL语句使用
PL/SQL
。PL/SQL是一种过程性语言,而您不会定期动态地创建/删除/修改对象。在某些特定的情况下,您可能必须将其作为脚本在PL/SQL中执行,您可以在PL/SQL块中使用动态SQL
,作为sugg@Littlefoot.如果出于某种原因,它必须是PL/SQL,则需要使用executeimmediate
以动态SQL的形式执行。例如:
SQL> desc test
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER
FNAME VARCHAR2(10) --> 10
LNAME VARCHAR2(10)
SQL> begin
2 execute immediate 'alter table test modify fname varchar2(20)';
3 end;
4 /
PL/SQL procedure successfully completed.
SQL> desc test
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER
FNAME VARCHAR2(20) --> 20
LNAME VARCHAR2(10)
SQL>
您不能在PL/SQL中运行DDL语句当然,您可以使用动态SQL(立即执行)。