我在oracle中声明了这些表。 referencias已加载数据,我想在envase中加载一些属性。如果我运行以下插入,我得到一个01722无效数字oracle。什么是rtrim格式来避免错误?
CREATE TABLE envase (
referencia VARCHAR2(15) NOT NULL,
descripcion VARCHAR2(50) NOT NULL,
precio number(9,2) NOT NULL,
CONSTRAINT PK_ENVASE PRIMARY KEY (referencia)
);
CREATE TABLE referencias(
producto VARCHAR2(50),
codBarras VARCHAR2(15),
tipoProducto VARCHAR2(20),
marcaCafetera VARCHAR2(10),
modelCafetera VARCHAR2(12),
tipoCafe VARCHAR2(10),
varietal VARCHAR2(30),
procedencia VARCHAR2(15),
tueste VARCHAR2(10),
proceso VARCHAR2(12),
envase VARCHAR2(15),
precio VARCHAR2(10),
stock NUMBER(5),
min_stock NUMBER(5),
max_stock NUMBER(5),
coste VARCHAR(10),
proveedor VARCHAR2(35),
CIF VARCHAR2(10),
Comercial VARCHAR2(90),
email VARCHAR2(60),
telefono NUMBER(9),
cuentaBank VARCHAR2(30),
TipoVia VARCHAR2(10),
nombreVia VARCHAR2(30),
portal VARCHAR2(3),
bloque NUMBER(1),
escalera NUMBER(2),
planta VARCHAR2(7),
puerta VARCHAR2(1),
CP NUMBER(5),
localidad VARCHAR2(45),
pais VARCHAR2(45)
);
INSERT INTO envase
(referencia,descripcion,precio)
SELECT DISTINCT
codBarras, envase,TO_NUMBER(RTRIM(precio,' €'),'999999999.99')
FROM referencias;
答案 0 :(得分:0)
你宣布它为:
precio number(9,2) NOT NULL,
NUMBER(9,2)
表示9个数字..其中2个是小数。 最大人数:9999999.99
但是,您的数字模式似乎是:
codBarras, envase,TO_NUMBER(RTRIM(precio,' €'),'999999999.99')
其中有11位数,其中2位为小数。
我假设您的数据大于1000万,这会在插入期间将其炸毁。
将envase的初始创建更改为11,2而不是9,2并再次尝试?
CREATE TABLE envase (
referencia VARCHAR2(15) NOT NULL,
descripcion VARCHAR2(50) NOT NULL,
precio number(11,2) NOT NULL,
CONSTRAINT PK_ENVASE PRIMARY KEY (referencia)
);
[编辑]
虽然当我测试它时,我得到了
ORA-01438: value larger than specified precision allowed for this column
;)所以它可能是别的东西或问题的组合......
[/编辑]
答案 1 :(得分:0)
我建议简单地从“to_number”中取消格式掩码,并允许Oracle找出数字格式:
这对我来说很好用:
select to_number(rtrim('4.10 €', ' €')) from dual;