J'essaie de déboguer une sélection à l'intérieur d'une procédure et j'essaie d'utiliser un bloc anonyme. J'aimerais que ce développeur SQL renvoie simplement la dernière instruction SELECT, mais j'obtiens l'erreur suivante:
set serveroutput on format wrapped; DECLARE p_cd_doc_type number; p_dc_doc_code varchar2(200); p_dt_base date; p_qt_days number; p_vl_mov_total number; p_qt_transac number; v_dt_max date; v_dt_min date; begin p_dt_base := sysdate; p_qt_days := 1; v_dt_max := trunc(p_dt_base) + 1; v_dt_min := v_dt_max - p_qt_days; p_vl_mov_total := 0; DBMS_OUTPUT.PUT_LINE('v_dt_max = ' || v_dt_max); DBMS_OUTPUT.PUT_LINE('v_dt_min = ' || v_dt_min); select * from tb_cad_cliente a join tb_trn_transacao b on a.cd_cliente = b.cd_cliente where a.cd_doc_type = p_cd_doc_type and a.dc_doc_code = p_dc_doc_code and b.dt_row between v_dt_min and v_dt_max and b.cd_status = 3; end;
5 Réponses :
Pour renvoyer la valeur du SELECT, il doit être sélectionné dans em> un conteneur (un curseur de référence ou un curseur REF). Dans votre déclaration, vous devez inclure dans le développeur SQL, il existe une option (je suis un utilisateur de crapaud, alors j'oublie où dans SD) qui indique à l'IDE de charger le jeu de résultats dans une grille Pour voir. p> [modifier: par commentaire de @DCOOKIE, merci pour la prise!] em> p> p> p> p> p> P> P> ref_cursor_out sys_refcursor; code>
et changez votre sélection à:
Si j'ajoute un curseur de référence Tblresult; Avant le début, je reçois un PLS-00201: l'identifiant 'curseur' doit être déclaré
Votre déclaration de ref_cursor_out devrait être "ref_cursor_out sys_refcursor;"
Tks @dcookie. Il compile et tout ... J'utilise l'Open Tblresult pour sélectionner * de (...). Je cherche et creuser ... Comment imprimer le Tblresult? 100% des échantillons sont des résultats des Procs. Aucun concernant les blocs anonymes ..: - /
Pour ce que je sais, quel que soit l'outil que vous utilisez pour déboguer, les blocs PL / SQL (anonyme et nommé) doivent être pls-00428: une clause dans une clause est attendue
Dans cette déclaration de sélection
Cause: la clause dans une déclaration sélectionnée a été omise. Pour
exemple, le code pourrait ressembler
Sélectionnez Deptno, Dname, Loc de Dept
Où ... au lieu de choisir Deptno,
DNAME, LOC IN DEPT_REC DE DEPTH
Où ... dans pl / sql, seulement une sous-requête
est écrit sans entrer en clause.
Action: ajouter le besoin dans la clause p>
blockQuote>
et p>
ora-06550: chaîne de ligne, chaîne de colonne:
chaîne de caractères
Cause: généralement une erreur de compilation PL / SQL.
Action: Aucune p>
blockQuote>
pourquoi erreur forte> p>
Lorsqu'une erreur PL / SQL apparaît, vous n'avez le choix que d'enquêter dans le code PS: strong>
La route est toujours la même: p>
Comment demander forte > p>
Tks pour les informations. Je suis au courant de tout cela, et j'ai fait plus d'une heure de recherche, et je n'ai pas pu trouver un moyen simple de résoudre mon problème sans créer de types. Après toute l'enquête, je n'ai toujours pas pu trouver un moyen simple de résoudre ce problème. Peut-être qu'il n'y a pas de moyen simple, et c'est la réponse. Je ne sais tout simplement pas, même après la recherche. Les activités fonctionnent bien dans mon proc. Il suffit de savoir comment le faire dans un bloc anonyme et l'afficher sur le développeur SQL
Cette réponse peut vous donner une idée: Stackoverflow.com/Questions/6265160/...
Vous pouvez essayer avec cela, d'imprimer facilement votre résultat:
declare your_variable varchar2(19); BEGIN DBMS_OUTPUT.PUT_LINE('init..'); FOR x IN (SELECT your_column FROM you_table where rownum<2 order by 1) LOOP DBMS_OUTPUT.PUT_LINE(x.your_column); END LOOP; END;
J'ai récemment changé de MSSQL en PLSQL et je manque les valeurs de retour en tant que tables des procédures à des fins analytiques. J'ai écrit simplement une requête dynamique qui retourne la table de deux étapes. Peut-être que quelqu'un l'utilise:
pour oracle 12c ou supérieur