J'ai vu beaucoup de questions similaires & réponses, mais ils ont utilisé d'autres astuces spécifiques à DB, ou l'ont fait dans le code, etc. Je suis à la recherche d'un fichier batch SQL direct solution (si elle existe).Charger deux tables liées dans une base de données Oracle
J'ai deux tables avec une relation parent/enfant, appelez-les Exécute & Run_Values.
Exécute a PK "auto" généré, runID (une séquence & un déclencheur), et deux colonnes, Model_Type & Temps qui identifient également de manière unique la ligne (imposée avec une contrainte). Pour chaque ligne de Run, il y a beaucoup d'entrées dans Run_Values, qui a deux colonnes, RunId & Value.
Je voudrais créer quelque chose comme ceci à partir du processus qui rend les données (mélange de sql je sais existe et SQL que je voudrais lui):
insert into Runs (Model_Type, Time) values ('model1', to_date('01-01-2009 14:47:00', 'MM-DD-YYYY HH24:MI:SS'));
set someVariable = SELECT runId FROM Runs WHERE Model_Type like 'model1' and Time = to_date('01-01-2009 14:47:00', 'MM-DD-YYYY HH24:MI:SS'));
insert into Run_Values (run_id, Value) values (someVariable, 1.0);
etc - lots more insert statements with Values for this model run.
Toutes les pensées, les références, etc. sont appréciés.
Merci - une question. Que se passe-t-il si un autre processus/session crée un nouveau modèle alors que le processus/la session en cours insère les résultats du précédent? Le currval de cette session/transaction est-il seulement? – Marc
Bonne question, Marc. Oui, CURRVAL est pour la session, ne sera pas affecté par d'autres sessions. – spencer7593
Oui, currval ne fonctionne que pour la session en cours. Si une autre session insère une nouvelle exécution, elle augmente la séquence, mais la valeur de l'autre session reste la même. –