Exécuter un SCRIPT à partir de PL/SQL Bloc
Comment utiliser "SCRIPT de lancement" en pl/sql bloc ?
Je veux utiliser quelque chose comme ceci
declare
begin
proc(para1,para2);
execute immediate 'start prompt1' ;
end;
/
Aussi je veux savoir , puis-je obtenir une valeur de prompt1 dans mon PL/SQL bloc où suis appelant le script ? Parce que j'ai besoin d'utiliser la valeur d'effectuer certaines opérations dans le PL/SQL bloc.
Ce script de démarrage?
OriginalL'auteur G.S | 2012-01-12
Vous devez vous connecter pour publier un commentaire.
C'est
20122017. Les Scripts sont un maladroit et cassant la gueule de bois à partir du dernier millénaire. Oracle a une gamme fantastique de fonctionnalité, nous pouvons exécuter en PL/SQL, plus il y a de Java Procédures Stockées, et il y a la planification pour le démarrage des travaux. Autres que l'exécution de DDL pour créer ou modifier les schémas il n'est guère besoin de scripts dans une base de données Oracle de l'environnement; même les scripts DDL devrait être déclenchée à partir d'un client externe, probablement un outil de construction tels que TeamCity.En particulier je voudrais égard de la tentative d'exécution d'un script SQL à partir d'un PL/SQL programme architectural de l'échec. Que faites-vous avec le script qui vous ne pouvez pas faire avec une procédure stockée?
Comme pour le passage de l'entrée d'une procédure stockée, c'est ce que les paramètres sont pour. PL/SQL n'est pas interactif, nous avons besoin d'un client pour saisir les valeurs. Selon le scénario de ce qui peut être fait de manière asynchrone (les valeurs dans un fichier ou une table) ou synchrone (l'appel de la procédure stockée dans SQL*Plus, SQL Developer ou sur mesure, avant la fin).
Après avoir dit tout cela, dans le monde réel, nous travaillons avec malpropre architectures avec les inter-dépendances entre la base de données et l'externe de l'OS. Alors, que pouvons-nous faire?
Noter que toutes ces options, la demande élevée d'accès (subventions sur les objets de l'ANNUAIRE, des informations de sécurité, etc). Elles ne peuvent être attribuées par les utilisateurs privilégiés (c'est à dire Administrateurs de bases de données). À moins que notre base de données dispose d'un étonnant laxisme de la configuration de la sécurité il n'y a aucun moyen pour nous d'exécuter l'arbitraire d'un script shell de PL/SQL.
Enfin, il n'est pas clair quels sont les avantages que vous attendez de l'exécution d'un script SQL PL/SQL. Rappelez-vous que PL/SQL s'exécute sur le serveur de base de données, de sorte il ne peut pas voir les scripts sur la machine client. Cela semble pertinent, à la lumière de l'obligation d'accepter la saisie de l'utilisateur.
Peut-être la solution la plus simple est de reconfiguration du script d'origine. Diviser le PL/SQL appel dans un bloc et ensuite il suffit d'appeler le script nommé:
bootstram_schema_A.sql
oubootstrap_schema_B.sql
. Selon les conditions, on peut exécuter l'un ou l'autre (ou l'un après l'autre.) C'est une simplification, le cas que je traite est un peu plus complexe, mais il semble exagéré d'écrire un pilote dans une autre langue (dire que Java ou un script Ant) lorsque PL/SQL fournit toutes les structures de contrôle, nous devons déterminer ce que les scripts d'invoquer et dans quel ordre.OriginalL'auteur APC
Vous pouvez écrire un pl/sql bloc dans SqlPlus pour vérifier un paramètre à partir d'une table, puis d'exécuter un script. Dans le script à exécuter (MyScript.sql ci-dessous), la déclaration des terminaisons doivent être ";" au lieu de "/"
OriginalL'auteur J Merritt
Si vous êtes à l'aide de sql*plus (ou un outil qui l'utilise), alors vous pouvez faire quelque chose comme ceci:
Si elle tourne dans le lot, alors vous pouvez faire:
et obtenir la valeur de :a comme paramètre-
OriginalL'auteur A.B.Cade
Une autre pratique consiste à exécuter sur un
*.bat
avec des paramètres, comme:OriginalL'auteur victor
Exécution immédiate est d'exécuter des instructions SQL , pas de commandes arbitraires.
Vous pouvez exécuter exécuter un script, mais je doute que vous pouvez capturer des entrées à partir d'un script SQL, esp dans un PL/SQL bloc
OriginalL'auteur Sathyajith Bhat