2010-12-13 41 views
1

Je suis en train de mettre à jour un package dans Oracle, venant de SQL Server cela a été source de confusion.Mise à jour d'un package à partir de SQLPLUS

J'ai écrit un fichier batch qui exécute le fichier .spec premier et le fichier .Body seconde, mais même en cours d'exécution, il ne fonctionne pas manuellement.

J'utilise cette syntaxe:

sqlplus username/[email protected] @c:\temp\myfile.spec 
sqlplus username/[email protected] @c:\temp\myfile.body 

Quand je vais revenir à Sql Developer je peux regarder les procédures stockées dans le paquet et voir qu'ils n'ont pas été mis à jour.

Pourquoi mes paquets ne sont-ils pas mis à jour?

+0

Est-ce que les fichiers spec & body ont une fin '/'? – Sathya

+0

Pouvez-vous exécuter le contenu des fichiers batch dans SQLDeveloper (couper et coller)? –

+0

@Jack lorsque je les coupe et les collez dans SQL Developer, mais le même fichier ne fonctionne pas via SQL * Plus. –

Répondre

2

Les fichiers de spécifications et de corps doivent avoir / pour que SQL * Plus crée/remplace l'objet.

Sans /:

CREATE OR REPLACE PACKAGE TEST12_13 AS 

PROCEDURE TEST12_13; 

END; 

[email protected]>@C:\TEST.PKS 
    6 

Avec le /:

CREATE OR REPLACE PACKAGE TEST12_13 AS 

PROCEDURE TEST12_13; 

END; 

/

[email protected]>@C:\TEST.PKS 

Package created. 

En réponse à vos commentaires sur le nom de fichier qui passe comme paramètre, au lieu de passer le nom du fichier en tant que paramètre, ont SQL * Plus vous demande le nom de fichier

wrapper.sql 

ACCEPT filename_var Prompt 'Enter filename' 

@c:\temp\&filename_var 
/
@c:\temp\&filename_var 
/
+0

Lorsque j'ajoute le/à la fin SQL * Plus ne m'indique pas d'entrer une valeur. Je n'ai pas écrit le paquet et c'est assez gros. Quelles conditions provoquent cela? –

+0

@H. Abraham quelle valeur est attendue? La réponse standard devrait être une réponse 'Package created'. Pouvez-vous poster le message affiché? Ouvrez SQL * Plus et exécutez '@c: \ temp \ myfile.spec' depuis l'invite. – Sathya

+0

Mes excuses J'ai fait une faute de frappe. Je voulais dire que: SQL * Plus m'invite MAINTENANT à entrer une valeur. Je veux que je fournisse une valeur pour ce que je suppose être une variable dans le paquet. Je souhaite uniquement apporter des modifications à mes fichiers de package et les appliquer à la base de données. –

3

Connectez-vous à SQL * Plus avec

sqlplus username/[email protected] 

Ensuite, exécutez le script de l'invite SQL * plus:

set echo on 
@c:\temp\myfile.spec 

Vous devriez être capable de voir ce qui se passe comme ceci, y compris les messages d'erreur.