Créer Des Corps De Package Oracle
Je suis en train de jeter les bases d'un paquet, mais éprouve de la difficulté même de commencer. J'ai réussi à créer un package de base spec et voulez juste tester le corps de package, mais je vais avoir de la difficulté à arriver à compiler. La spécification code est:
CREATE OR REPLACE PACKAGE synchronize_my_data
AS
PROCEDURE synchronize_data(p_run_date IN date);
END synchronize_my_data;
et ici est le corps de package code:
CREATE OR REPLACE PACKAGE BODY synchronize_my_data
IS
PROCEDURE synchronize_data(p_run_date IN date) IS
PROCEDURE process_deletes(p_run_date IN date) IS
BEGIN
dbms_output.put_line('Run Date: ' || to_char(p_run_date, 'MM/DD/YYYY'));
END process_deletes;
BEGIN
process_deletes(p_run_date);
END synchronize_data;
END synchronize_my_data;
Je reçois une erreur de compilation, mais ne peut pas comprendre quel est le problème avec le code. Il semble que le code de base, suis-je viens de rater quelque chose d'évident?
Tu oublies de nous dire que l'erreur de compilation peut-être?
Les œuvres ici sans aucune modification. Peut-être que vous n'avez pas le droit d'exécuter dbms_output?
my bad, je devrais avoir posté les erreurs de compilation. Je pense que ammoQ cloué, je n'avais pas le droit d'exécuter ebms_output; je me suis connecté en tant que dba, il a couru, et il a exécuté l'amende juste. merci pour les réponses et codage des suggestions.
Les œuvres ici sans aucune modification. Peut-être que vous n'avez pas le droit d'exécuter dbms_output?
my bad, je devrais avoir posté les erreurs de compilation. Je pense que ammoQ cloué, je n'avais pas le droit d'exécuter ebms_output; je me suis connecté en tant que dba, il a couru, et il a exécuté l'amende juste. merci pour les réponses et codage des suggestions.
OriginalL'auteur user1408057 | 2012-12-07
Vous devez vous connecter pour publier un commentaire.
Que le code semble compiler pour moi. Quelle erreur avez-vous?
D'un point de vue stylistique, il fait généralement très peu de sens pour définir une procédure dans une autre procédure dans un corps de package. L'un des avantages de l'utilisation de paquets est que vous pouvez avoir à la fois public et privé, des procédures. Vous pouvez créer le
process_deletes
procédure une procédure privée en définissant simplement dans le corps sans le définir dans la spec.Qui ne devrait pas avoir quelque chose à voir avec ce que l'erreur que vous obtenez. Mais il convient de rendre votre code plus facile à traiter.
Vrai, c'est pourquoi j'ai dit "en général" plutôt que de "toujours". Si vous avez de nombreuses variables locales que de les transmettre à une autre procédure est excessive et que votre procédure est de faire autant que vous vous sentez le besoin de prendre quelque chose dans une procédure distincte, cependant, 99 fois sur 100, je vous suggère de que vous avez besoin de repenser l'architecture un peu et de casser des choses en place dans de multiples procédures avec relativement peu de paramètres.
"il fait généralement très peu de sens pour définir une procédure dans une autre procédure dans un corps de package" en Désaccord tout à fait. J'utilise les procédures privées au sein d'un paquet de tenir code commun, la fonctionnalité qui est appelée par plusieurs sous-routines. Je procédures d'utilisation avec une seule procédure pour organiser mon code. L'idéal est d'avoir un exécutable de base qui est visible dans son intégralité, mais pour le programme "principal" des unités qui ne peuvent être atteints par de fortes modularisation, Si un sous-programme est, peut - être appelé par une seule unité de programme, la mettre dans cette unité de la section de déclaration.
Fascinante. J'ai utilisé des blocs imbriqués parfois dans le code et ne l'a jamais retrouvé aussi esthétiques que méthodes distinctes (et je n'ai pas eu la chance de croiser quelqu'un qui structuré leur code de cette façon). Cela ressemble à une conversation vraiment intéressante à avoir, même si je ne suis pas sûr de l'endroit où il serait approprié d'avoir.
très en lien: programmers.stackexchange.com/questions/137495/...
OriginalL'auteur Justin Cave