ORACLE 关连更新 update select
日月明王 http://sunmoonking.spaces.live.com 今天写了个复杂的SQL,用来更新另一个表 select vin,(max(in_mileage)-min(in_mileage))/(max(start_time)-min(start_time)) from (select vin,in_mileage,start_timefrom (select vin,in_mileage,start_time ,r
日月明王
http://sunmoonking.spaces.live.com
今天写了个复杂的SQL,用来更新另一个表
select vin,(max(in_mileage)-min(in_mileage))/(max(start_time)-min(start_time)) from ( select vin,in_mileage,start_time from (select vin,in_mileage,start_time , row_number() over (partition by vin order by start_time) wwmnum from (select vin,max(in_mileage) in_mileage,max(start_time) start_time from (select vin,in_mileage,start_time from tt_repair_order union select vin,in_mileage,start_time from tt_ro_balanced) group by vin,to_char(start_time,'yyyymmdd') ) ) where wwmnum0 and to_char(max(start_time),'yyyymmdd')to_char(min(start_time),'yyyymmdd')
写完这个SQL交给程序员后,程序员跟我说不会UPDATE,也就是说通过B表更新A表程序员是有困难的,于是在这里整理下各种不同的方法以供以后使用.
$ sqlplus user/pass
SQL*Plus: Release 9.2.0.6.0 - Production on Wed Aug 2 17:38:39 2006
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to: Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.6.0 - Production
SQL> select * from wwm2; --要更新的表
TOWN ID -------------------- ---------- 222 222 111 111 ww'jj 111 llll 1111 dddd 2222 lllldf 111 lllldf 111 dsafdf 111 3435 111 ljjjjj 222 dsafdf 111
TOWN ID -------------------- ---------- 3435 111 ljjjjj 222
SQL> select * from wwm5; --更新的条件表
TOWN ID -------------------- ---------- lllldf 111 test 9984
SQL> select wwm2.* from wwm2,wwm5 where wwm2.id=wwm5.id 2 /
TOWN ID -------------------- ---------- 111 111 ww'jj 111 lllldf 111 lllldf 111 dsafdf 111 3435 111 dsafdf 111 3435 111
8 rows selected.
所以,每次需要更新8条数据就是正确的.
相信程序员是通过以下类似的SQL更新的,这是错误的,因为没有加WHERE SQL> update wwm2 set wwm2.town=(select wwm5.town from wwm5 where wwm5.id=wwm2.id) 2 /
13 rows updated.
SQL> select * from wwm2;
TOWN ID -------------------- ---------- 222 lllldf 111 lllldf 111 1111 2222 lllldf 111 lllldf 111 lllldf 111 lllldf 111 222 lllldf 111
TOWN ID -------------------- ---------- lllldf 111 222 13 rows selected.
可以看到13条记录被更新,符合条件的更新正确,不符合条件的也更新为NULL.以下是正确的方法
方法一: SQL> update wwm2 2 set town=(select town from wwm5 where wwm5.id=wwm2.id) 3 where id=(select wwm5.id from wwm5 where wwm5.id=wwm2.id) 4 /
8 rows updated.
方法二: 与方法一道理相同,这里需要掌握EXIST的相关用法. SQL> update wwm2 set town=(select town from wwm5 where wwm5.id=wwm2.id) where exists (select 1 from wwm5 where wwm5.id=wwm2.id) 8 rows updated.
方法三: SQL> update (select a.town atown,a.id aid,b.town btown,b.id bid from wwm2 a,wwm5 b where a.id=b.id) 2 set atown=btown 3 / set atown=btown * ERROR at line 2: ORA-01779: cannot modify a column which maps to a non key-preserved table
1* alter table wwm5 add primary key (id) SQL> /
Table altered.
1 update (select a.town atown,a.id aid,b.town btown,b.id bid from wwm2 a,wwm5 b where a.id=b.id) 2* set atown=btown SQL> /
8 rows updated.
这种方法的局限性就是需要PRIMARY 的支持.
方法四: 1 declare 2 cursor cur_wwm is select town,id from wwm5; 3 begin 4 for my_wwm in cur_wwm loop 5 update wwm2 set town=my_wwm.town 6 where id=my_wwm.id; 7 end loop; 8* end; SQL> /
PL/SQL procedure successfully completed.
SQL> select * from wwm2;
TOWN ID -------------------- ---------- 222 222 lllldf 111 lllldf 111 llll 1111 dddd 2222 lllldf 111 lllldf 111 lllldf 111 lllldf 111 ljjjjj 222 lllldf 111
TOWN ID -------------------- ---------- lllldf 111 ljjjjj 222
这个方法是最灵活的了.
方法五:
注意,方法五只能适用于WWM5是WWM2的子集的时候. 1 merge into wwm2 2 using (select town,id from wwm5) b 3 on (wwm2.id=b.id) 4 when matched then update set town=b.town 5* when not matched then insert (town,id) values (null,null) SQL> /
9 rows merged.
SQL> select * from wwm2;
TOWN ID -------------------- ---------- ---注意这个地方,被插入了一个空值.因为WWM5的ID=9984在WWM2中不能匹配,根本原因是ORACLE9必须有WHEN NOT MATCHED子句,但是ORACLE10可以不许要,也就是ORACLE10可以不写WHEN NOT MATCHED ,就不必插入NULL值了,为解决这个问题,下一步会DELETE WWM5的ID=9984,这样一来就不会执行WHEN NOT MATCHED 222 222 lllldf 111 lllldf 111 llll 1111 dddd 2222 lllldf 111 lllldf 111 lllldf 111 lllldf 111 ljjjjj 222
TOWN ID -------------------- ---------- lllldf 111 lllldf 111 ljjjjj 222
14 rows selected.
SQL> delete from wwm5 where id=9984;
1 row deleted.
SQL> 1 merge into wwm2 SQL> 2 using (select town,id from wwm5) b SQL> 3 on (wwm2.id=b.id) SQL> 4 when matched then update set town=b.town SQL> 5* when not matched then insert (town,id) values (null,null) SQL> /
8 rows merged.
以上就是5种关连更新的例子了,希望能给开发人员解惑.

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

La durée de conservation des journaux de la base de données Oracle dépend du type de journal et de la configuration, notamment : Redo logs : déterminé par la taille maximale configurée avec le paramètre "LOG_ARCHIVE_DEST". Redo logs archivés : Déterminé par la taille maximale configurée par le paramètre "DB_RECOVERY_FILE_DEST_SIZE". Redo logs en ligne : non archivés, perdus au redémarrage de la base de données et la durée de conservation est cohérente avec la durée d'exécution de l'instance. Journal d'audit : Configuré par le paramètre "AUDIT_TRAIL", conservé 30 jours par défaut.

La séquence de démarrage de la base de données Oracle est la suivante : 1. Vérifiez les conditions préalables ; 2. Démarrez l'écouteur ; 3. Démarrez l'instance de base de données ; 4. Attendez que la base de données s'ouvre ; 6. Vérifiez l'état de la base de données ; . Activez le service (si nécessaire) ; 8. Testez la connexion.

L'ordinateur d'un ami présente un tel défaut. Lors de l'ouverture de "Ce PC" et du fichier du lecteur C, il affichera "Explorer.EXE Windows ne peut pas accéder au périphérique, au chemin ou au fichier spécifié. Vous ne disposez peut-être pas des autorisations appropriées pour accéder au projet. " Y compris les dossiers, fichiers, cet ordinateur, la corbeille, etc., un double-clic fera apparaître une telle fenêtre, et un clic droit pour l'ouvrir est normal. Ceci est dû à une mise à jour du système. Si vous rencontrez également cette situation, l'éditeur ci-dessous vous apprendra comment la résoudre. 1. Ouvrez l'éditeur de registre Win+R et entrez regedit, ou cliquez avec le bouton droit sur le menu Démarrer pour exécuter et entrez regedit. 2. Localisez le registre « Computer\HKEY_CLASSES_ROOT\PackagedCom\ClassInd » ;

Pour trouver le nombre d'occurrences d'un caractère dans Oracle, effectuez les étapes suivantes : Obtenez la longueur totale d'une chaîne ; Obtenez la longueur de la sous-chaîne dans laquelle un caractère apparaît. Comptez le nombre d'occurrences d'un caractère en soustrayant la longueur de la sous-chaîne ; de la longueur totale.

Exigences de configuration matérielle du serveur de base de données Oracle : Processeur : multicœur, avec une fréquence principale d'au moins 2,5 GHz Pour les grandes bases de données, 32 cœurs ou plus sont recommandés. Mémoire : au moins 8 Go pour les petites bases de données, 16 à 64 Go pour les tailles moyennes, jusqu'à 512 Go ou plus pour les grandes bases de données ou les charges de travail lourdes. Stockage : disques SSD ou NVMe, matrices RAID pour la redondance et les performances. Réseau : réseau haut débit (10GbE ou supérieur), carte réseau dédiée, réseau à faible latence. Autres : alimentation stable, composants redondants, système d'exploitation et logiciels compatibles, dissipation thermique et système de refroidissement.

La quantité de mémoire requise par Oracle dépend de la taille de la base de données, du niveau d'activité et du niveau de performances requis : pour le stockage des tampons de données, des tampons d'index, l'exécution d'instructions SQL et la gestion du cache du dictionnaire de données. Le montant exact dépend de la taille de la base de données, du niveau d'activité et du niveau de performances requis. Les meilleures pratiques incluent la définition de la taille SGA appropriée, le dimensionnement des composants SGA, l'utilisation d'AMM et la surveillance de l'utilisation de la mémoire.

Les mises à jour Windows peuvent provoquer certains des problèmes suivants : 1. Problèmes de compatibilité : certaines applications, pilotes ou périphériques matériels peuvent être incompatibles avec les nouvelles mises à jour Windows, ce qui entraîne un dysfonctionnement ou un blocage. 2. Problèmes de performances : Parfois, les mises à jour de Windows peuvent ralentir le système ou subir une dégradation des performances. Cela peut être dû à de nouvelles fonctionnalités ou à des améliorations nécessitant davantage de ressources pour fonctionner. 3. Problèmes de stabilité du système : certains utilisateurs ont signalé qu'après l'installation des mises à jour Windows, le système pouvait rencontrer des pannes inattendues ou des erreurs d'écran bleu. 4. Perte de données : Dans de rares cas, les mises à jour Windows peuvent entraîner une perte de données ou une corruption de fichiers. C'est pourquoi avant d'effectuer des mises à jour importantes, sauvegardez votre

Après plusieurs pré-versions, l'équipe de développement de KDE Plasma a dévoilé le 28 février la version 6.0 de son environnement de bureau pour les systèmes Linux et BSD, utilisant pour la première fois le framework Qt6. KDE Plasma 6.1 est désormais livré avec un certain nombre de nouvelles fonctionnalités
