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

经过调查,发现问题出在某些表的NUMBER类型没有设置精度上。解决方案是修改表结构,增加精度。具体操作如下:
考虑到有些表可能有多个字段未设置精度,因此我们采用以下方法来实现。
–分割函数
create or replace type type_split as table of varchar2(4000);/create or replace function test_split(p_list VARCHAR2, p_sep VARCHAR2) return type_splitPIPELINED ISl_idx PLS_INTEGER;v_list VARCHAR2(32767) := p_list;beginLOOPl_idx := instr(v_list, p_sep);IF l_idx > 0 THENPIPE ROW(substr(v_list, 1, l_idx - 1));v_list := substr(v_list, l_idx + length(p_sep));ELSEPIPE ROW(v_list);EXIT;END IF;END LOOP;RETURN;end test_split;/
–修改表增加精度的存储过程
create or replace procedure changefield(tablename in varchar2,fieldname in varchar2) asCURSOR c1ISSELECT FROM table(test_split(fieldname,','));beginexecute immediate 'create table temp_table as select from '|| tablename;execute immediate 'DELETE FROM '|| tablename;FOR x IN c1LOOPexecute 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类型增加精度的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/32477.html
微信扫一扫
支付宝扫一扫