Per inserire un row-
DECLARE
v_record event%rowtype;
BEGIN
SELECT * INTO v_record from event where rownum=1; --or whatever where clause
Insert into tmp_event values v_record;
END;
o una versione più elaborata per inserire tutte le righe da event
-
DECLARE
TYPE t_bulk_collect_test_tab IS TABLE OF event%ROWTYPE;
l_tab t_bulk_collect_test_tab;
CURSOR c_data IS
SELECT *
FROM event;
BEGIN
OPEN c_data;
LOOP
FETCH c_data
BULK COLLECT INTO l_tab LIMIT 10000;
EXIT WHEN l_tab.count = 0;
-- Process contents of collection here.
Insert into tmp_event values v_record;
END LOOP;
CLOSE c_data;
END;
/
In un trigger, sì è possibile ma è come l'uovo o la uovo. Bisogna inizializzare ogni campo della rowtype
con i valori delle colonne :new
come-
v_record.col1 := :new.col1;
v_record.col2 := :new.col2;
v_record.col3 := :new.col3;
....
A quanto pare, gli esempi PLSQL sopra non possono essere utilizzati in un trigger in quanto sarebbe lanciare un errore di attivazione mutazione. E non c'è altro modo per ottenere l'intera riga nel trigger oltre all'accesso a ciascuna colonna separatamente come spiego sopra, quindi se fai tutto questo perché non usi direttamente lo :new.col
nello stesso INSERT into temp_event
, ti farà risparmiare un sacco di lavoro .
Anche perché si dice che è un sacco di lavoro per parlare di tutte le colonne, (in Oracle 11gR2), ecco un modo veloce di fare quello generando la dichiarazione INSERT
e l'esecuzione in modo dinamico (anche se non testato per prestazione).
CREATE OR REPLACE TRIGGER event_air --air stands for "after insert of row"
AFTER INSERT ON EVENT
FOR EACH ROW
L_query varchar2(2000); --size it appropriately
BEGIN
SELECT 'INSERT INTO tmp_event VALUES ('|| listagg (':new.'||column_name, ',')
WITHIN GROUP (ORDER BY column_name) ||')'
INTO l_query
FROM all_tab_columns
WHERE table_name='EVENT';
EXECUTE IMMEDIATE l_query;
EXCEPTION
WHEN OTHERS THEN
--Meaningful exception handling here
END;
aggiornato la risposta con l'uso in 'trigger'. – Annjawn
Ho risposto a domanda simile qui: [http://stackoverflow.com/a/26343423/2235483][1] [1]: http://stackoverflow.com/a/26343423/2235483 – Rusty