大家好,又见面了,我是你们的朋友全栈君。
在将Oracle数据库迁移到SQL Server时,遇到了如下图所示的错误:

经过调查,发现问题出在某些表的NUMBER类型没有设置精度上。解决方案是修改表结构,增加精度。具体操作如下:
考虑到有些表可能有多个字段未设置精度,因此我们采用以下方法来实现。
–分割函数
create or replace type type_split as table of varchar2(4000); / <p>create or replace function test_split(p_list VARCHAR2, p_sep VARCHAR2) return type_split PIPELINED IS l_idx PLS_INTEGER; v_list VARCHAR2(32767) := p_list; begin LOOP l_idx := instr(v_list, p_sep); IF l_idx > 0 THEN PIPE ROW(substr(v_list, 1, l_idx - 1)); v_list := substr(v_list, l_idx + length(p_sep)); ELSE PIPE ROW(v_list); EXIT; END IF; END LOOP; RETURN; end test_split; /
–修改表增加精度的存储过程
create or replace procedure changefield (tablename in varchar2, fieldname in varchar2 ) as CURSOR c1 IS SELECT <em> FROM table(test_split(fieldname,',')); begin execute immediate 'create table temp_table as select </em> from '|| tablename; execute immediate 'DELETE FROM '|| tablename; FOR x IN c1 LOOP execute immediate 'alter table ' || tablename || ' modify ' || x.column_value || ' NUMBER(38, 0)'; END LOOP; execute immediate 'INSERT INTO '|| tablename||' SELECT * FROM temp_table'; execute immediate 'DROP TABLE temp_table'; end; /
–执行示例,需要手动修改参数,参数为表名和字段名,字段名可以是一个也可以是多个,多个字段以逗号分隔
exec changefield('A25','A2517,SORT');
exec changefield('A36','A3617');发布者:全栈程序员栈长,转载请注明出处:https://www.php.cn/link/27f0681af3b501d1a5e313be097da0a6 原文链接:https://www.php.cn/link/c8377ad2a50fb65de28b11cfc628d75c
以上就是oracle字段精度修改,oracle number类型增加精度的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号