I have a table which called Logiciel
:
Name Null? Type
---------- -------- -------------
NLOG NOT NULL VARCHAR2(5)
NOMLOG NOT NULL VARCHAR2(20)
DATEACH DATE
VERSION VARCHAR2(7)
TYPELOG VARCHAR2(9)
PRIX NUMBER(6,2)
Using PL/SQL
I want to add an entry which has the same data as the entry with NLOG = 'log3'
, and the value PRIX as the average of PRIX
: AVG(PRIX)
of all entries.
This is the script I wrote:
DECLARE
unLog LOGICIEL%ROWTYPE;
moy LOGICIEL.PRIX%TYPE;
BEGIN
SELECT AVG(PRIX) INTO moy FROM LOGICIEL;
SELECT * INTO unLog FROM LOGICIEL WHERE NLOG='log5';
unLog.PRIX := moy;
unLog.NLOG := 'logS';
INSERT INTO LOGICIEL SELECT * FROM unLog;
END;
/
The problem is when I execute this script I get this error :
ERROR at line 9:
ORA-06550: line 9, column 37:
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: line 9, column 2:
PL/SQL: SQL Statement ignored
How can I solve this problem ?
Just use insert . . . select
insert . . . select
insert . . . select
:
INSERT INTO LOGICIEL(NLOG, NOMLOG, DATEACH, VERSION, TYPELOG, PRIX)
SELECT NLOG, NOMLOG, DATEACH, VERSION, TYPELOG,
(SELECT AVG(PRIX) FROM LOGICIEL) as PRIX
FROM LOGICIEL
WHERE NLOG = 'log3';
EDIT:
Is this what you mean?
INSERT INTO LOGICIEL(NLOG, NOMLOG, DATEACH, VERSION, TYPELOG, PRIX)
SELECT unlog.NLOG, unlog.NOMLOG, unlog.DATEACH, unlog.VERSION, unlog.TYPELOG, unlog.PRIX
FROM dual;
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.