affichage du jeu de résultats à partir d'oracle 10g procédure stockée
Je suis à l'aide de PL/SQL Developer et j'ai écrit une procédure d'exécution d'un rapport, et j'ai besoin de procédure pour la sortie du jeu de résultats.
La procédure accepte les paramètres d'entrée et les besoins pour la sortie du jeu de résultats.
Je ne peux pas utiliser une vue à la suite de la procédure des appels de plusieurs Api qui accepte les paramètres, je suis de passage dans la procédure.
Je comprends de beaucoup de travail de recherche qu'il est possible à l'aide de ref_cursor mais je ne peux pas obtenir ti à travailler.
Une version simplifiée de la procédure est la suivante:
CREATE OR REPLACE PROCEDURE IFSINFO.SHORTAGE_SHEET (vSite IN VARCHAR2,
vBuyer IN VARCHAR2,
vSupplier IN VARCHAR2,
vCursor OUT SYS_REFCURSOR)
AS
BEGIN
OPEN vCursor FOR
SELECT blah blah blah blah blah blah;
END;
J'ai essayé de execture la procédure et d'afficher le jeu de résultats à l'aide de:
BEGIN
vsite := 'S03';
vbuyer := 'AW';
vsupplier := '%';
vcursor refcursor;
IFSINFO.SHORTAGE_SHEET(vsite => :vsite,
vbuyer => :vbuyer,
vsupplier => :vsupplier,
vcursor => :vcursor);
print vcursor;
END;
Et aussi:
variable rc refcursor;
exec IFSINFO.SHORTAGE_SHEET('S03','AW','TQ1',:rc2);
print rc2
Mais ni travail. svp quelqu'un peut-il conseiller je suis à bout de ressources.
Merci
Rob
OriginalL'auteur RobLaw84 | 2010-12-07
Vous devez vous connecter pour publier un commentaire.
Est là une erreur que vous voyez lorsque vous exécutez cette procédure ou de l'exécuter dans SQLPLUS?
Vous pouvez poster votre sqlplus session?
D'IMPRESSION est un sqlplus commande spécifique et il ne peut pas être appelée à l'intérieur de la procédure de bloc. Si vous avez besoin d'imprimer les résultats d'une refcursor à l'intérieur d'une procédure , alors vous aurez besoin de chercher à partir de ce et imprimer chaque enregistrement dans le format que vous avez besoin.
Vous devez également modifier votre procédure (ou) la procédure d'appel d'avoir différents noms de variables.generallt, je préfixe toutes les variables d'entrée avec "i_" et toutes les variables de sortie avec "o_". De cette façon, votre déclaration de procédure devrait ressembler..
et l'appel de procédure serait..
Vous ne devez pas utiliser le ":" au début, pour ces variables, car ils ne sont pas d'accueil des variables d'environnement ( c'est le cas pour votre deuxième exécution à l'aide de SQLPLUS où vous utilisez le sqlplus variable "rc" à l'intérieur de l'appel de procédure)
il n'y a pas d'erreur quand je le lance il en pl/sql developer juste qu'il n'affiche rien.
Il ressemble à ce que "set serveroutput sur" paramètre n'est pas sur pour votre pl/sql developer. Vous pouvez mettre "set serveroutput on" dans la page de Connexion.sql script dans le répertoire où PL/SQL Developer est et de le redémarrer pour résoudre ce problème.
OriginalL'auteur Rajesh Chamarthi
Vers le bas de cette en pl/sql developer, le code est comme suit.
Créer un objet pour stocker le resultset
Créer un type de table de il au-dessus de l'objet
Créer un package pour exécuter le SQL
Créer le corps de package pour exécuter le SQL
Le code à exécuter et de sortie, le jeu de résultats
SELECT * FROM TABLE(ABC.TEST_RPT.get_report(",","))
OriginalL'auteur RobLaw84
Je suppose que vous êtes à l'aide de Sql Plus pour exécuter cette. Tout d'abord, définir un Sql Plus refcursor.
variable vcursor refcursor
Ensuite, exécutez un anonyme pl/sql bloc. Avis de la
declare
mot-clé.Puis exécuter la commande sql plus.
print vcursor
d'impression n'est pas pl/sql
Je ne suis pas à l'aide de SQL PLus, je suis à l'aide de PL/SQL Developer, malheureusement, dans ce cas je ne peux pas utiliser SQL plus.
OriginalL'auteur redcayuga
Votre curseur ref variable est
rc
. Mais ensuite, vous utilisezrc2
.Changement
rc2
àrc
et cela devrait fonctionnerOriginalL'auteur user3177508