oracle客户端执行sql语句发生乱码
可编辑系统环境变量
NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
> ORA-01451: 要修改为 NULL 的列无法修改为 NULL
使用以下sql修改,将原本非空约束的字段修改为可为NULL
ALTER TABLE 用户名.表名 MODIFY 字段 VARCHAR2(50) NULL;
若重复执行将出现> ORA-01451: 要修改为 NULL 的列无法修改为 NULL,
网络上有写这样的思路:先新增一个字段,存储原有的值,删除原有的字段,新增原有的字段添加值,最后删除新增的字段,这种太麻烦了,可以使用以下sql
只要加上只修改本身就是非空约束的:
DECLARE
AN_FLAG NUMBER;
BEGIN
SELECT COUNT(1)
INTO AN_FLAG
FROM ALL_TAB_COLUMNS
WHERE OWNER = '用户'
AND TABLE_NAME = '表名'
AND COLUMN_NAME = '字段'
AND NULLABLE='N';
IF AN_FLAG = 1 THEN
EXECUTE IMMEDIATE 'ALTER TABLE 用户.表名 MODIFY 字段VARCHAR2(50) NULL';
END IF;
END;
/