Script ShellPour lire le fichier et mettre des valeurs dans la clause WHERE via script shell
#! /bin/bash
sqlplus -s <username>/<passwd>@dbname << EOF
set echo on
set pagesize 0
set verify off
set lines 32000
set trimspool on
set feedback off
SELECT *
FROM <dbname>.<tablename1> tr
LEFT JOIN <tablename2> t2 ON t2.id2 = tr.id1
LEFT JOIN <tablename3> t3 ON t3.id2 = tr.id1
LEFT JOIN <tablename4> t4 ON t4.id2 = tr.id1
WHERE tr.TIMESTAMP > SYSDATE - 75/1440
AND tr.TIMESTAMP <= SYSDATE - 15/1440
AND t2.value in (value1, value2, etc...)
ORDER BY timestamp;
exit;
EOF
Maintenant, le but est de lire 32000 valeurs dans t2.value colonne. Ces valeurs ne sont que des nombres comme 1234, 4567, 1236, etc. Je suppose que je devrais mettre ces nombres dans un fichier séparé, puis lire ce fichier dans t2.value. Mais je veux que le SQL soit excuté seulement une fois pas 32000 fois. pouvez-vous s'il vous plaît conseiller comment est-ce possible? Comment puis-je obtenir les valeurs (séparées par des virgules) dans t2.value (par une boucle, en lisant la ligne probablement)?
Je suis l'erreur sur erreur de sortie standard: ORA-00972: identifiant est trop long – ErAB
ORA-00972 vient quand vous avez utilisé un identifiant très long,> 38 personnages. Mais nous ne changeons aucun identifiant (colonne, nom de table) n'importe où. Quels changements avez-vous faits? – codaddict
Je vais coller le script complet. – ErAB