2010-08-28 2 views
1

Utilisation de sqlplus 11g sous Windows pour exécuter le script SQL sur une base de données 11g. Sqlplus se bloque si la ligne d'insertion est laissée dans le script. Si je commente la ligne d'insertion, le script renvoie les enregistrements.Le script de ligne de commande SQLPlus se bloque lors de l'insertion d'enregistrements

L'exécution du script est < 1 s lors de l'exécution dans le développeur sql.

J'ai essayé de faire en sorte que le texte d'insertion soit une ligne continue avec les mêmes résultats. En utilisant echo on, il se bloque juste après la dernière ligne sql (... est null;) et montre une nouvelle ligne commençant, commit n'est jamais traité. Je suppose que ma déclaration d'insertion n'est pas syntaxed correctement pour fonctionner dans sqlplus

appel Ligne de commande:

sqlplus e_fraud/[email protected] @"C:\temp\Actimize_ETL\Versions\03\sql\merge2000_insert_new_bank_keys.sql" 

script sql:

--insert into e_fraud.bank 
select stg.bank_key bank_key, stg.bank_key bank_name from 
(
select distinct account_bank bank_key 
from e_fraud.rgbk_stg_account 
where account_bank is not null 
or account_bank != '' 
UNION 
select distinct bank_key 
from e_fraud.rgbk_stg_branch 
where bank_key is not null 
or bank_key != '' 
) stg 
left outer join e_fraud.bank b 
on stg.bank_key = b.bank_key 
where b.bank_key is null; 

commit; 

exit; 

Répondre

5

Si la syntaxe est erronée il vous dire que, non pendre.

Il n'est pas clair si vous l'avez exécuté avec succès dans SQL Developer avant ou après l'avoir essayé depuis SQL * Plus. Je suppose que vous avez d'abord exécuté l'insertion et n'avez pas validé ou annulé cette transaction, provoquant un verrou - ce qui suggère qu'il pourrait y avoir une contrainte unique sur l'une des colonnes e_fraud. Ou peut-être moins probable, vous avez inséré et commis dans une session, mais dans une autre session, vous avez supprimé les enregistrements avant de réexécuter, mais pas commis.

Votre session SQL * Plus attend qu'une autre transaction soit finalisée dans un sens ou dans l'autre, de sorte qu'elle peut effectuer l'insertion ou signaler la violation de contrainte, mais elle est actuellement en suspens. Assurez-vous que vous avez activé ou annulé chaque session ouverte. Il existe des moyens de vérifier les verrous si nécessaire. Par ailleurs, comme null et la chaîne vide sont traités de la même manière par Oracle, vous n'avez besoin d'aucune des clauses != ''.

+1

développeur SQL ouvert où j'ai testé l'instruction d'insertion, exécuté une validation; sqlplus exécute maintenant le script correctement. Réponse parfaite. – longday

+0

oh wow vous m'avez sauvé tellement de temps ... exactement le même scénario (sqlplus + sql developer). – rogerdpack

2

Je crois que la logique "ou" dans bank_key n'est pas nulle ou bank_key! = '' Finit par dire essentiellement retourner tout en confondant fondamentalement l'assemblage de niveau inférieur. Donc, quand il arrive à une bank_key qui est nulle, il va essayer d'insérer et de bloquer.

Questions connexes