'INSERT ALL INTO throws ORA-01722: invalid number
I want to copy a view into a table. Below procedure throws ORA-01722: invalid number
BEGIN
INSERT ALL
INTO DB_LOCATIONS
SELECT * FROM DB_LOCVIEW ;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
BEGIN
DBMS_OUTPUT.put_line ('SQLCODE: ' || SQLCODE||' -SQLERRM: '||SQLERRM);
END;
END;
On the other hand, If I try it with for loop, everything is fine:
DECLARE
currow integer := 1;
BEGIN
DBMS_OUTPUT.put_line ('starting.....');
for xxinserteddata in (select * from DB_LOCVIEW )
LOOP
BEGIN
DBMS_OUTPUT.put_line('currow: ' || currow);
INSERT INTO DB_LOCATIONS (
DB_DATE,
LOCATIONID,
MX_ET,
MX_MT,
BAND,
SITE)
VALUES (
xxinserteddata.DB_DATE,
xxinserteddata.LOCATIONID,
xxinserteddata.MX_ET,
xxinserteddata.MX_MT,
xxinserteddata.BAND,
xxinserteddata.SITE );
currow := currow + 1;
END;
END LOOP;
COMMIT;
DBMS_OUTPUT.put_line ('end.');
EXCEPTION
WHEN OTHERS
THEN
BEGIN
DBMS_OUTPUT.put_line ('-currow: ' || currow || ' -SQLCODE: ' || SQLCODE||' -SQLERRM: '||SQLERRM);
END;
END;
Both view and table has only 5 same columns. Any idea why insert all throws exception?
EDIT: Adding create procedures:
View:
CREATE OR REPLACE FORCE VIEW DB_LOCVIEW ("LOCATIONID", "SITE", "MX_ET", "MX_MT", "DB_DATE", "BAND") AS
SELECT
l.LOCATIONID,
l.SITE,
l.MX_ET,
l.MX_MT,
l.CHANGE_DATE AS db_date,
d.BAND
FROM ALL_LOCATIONS l
INNER JOIN LOC_DETATILS d ON (l.location = d.location)
WHERE l.status = 'ACTIVE' ;
Table:
CREATE TABLE DB_LOCATIONS
( "LOCATIONID" NUMBER,
"DB_DATE" DATE,
"MX_ET" NUMBER(10,2),
"MX_MT" NUMBER(10,2),
"SITE" VARCHAR2(8),
"BAND" NUMBER
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "DB_DATA" ;
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
