简体   繁体   中英

Insert data from table to another table using PL/SQL

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM