Pl/SQL afficher les résultats d'une instruction select
Set ServerOutput on size 100000;
declare
countTab number := 0;
countCol number := 0;
currDate varchar2(30);
scale number := 0;
Begin
select count(*) into countCol from USER_TAB_COLUMNS where TABLE_NAME = 'EVAPP_INTERFACE' and COLUMN_NAME = 'TARGET_AMNT_LTV_NUM' and DATA_SCALE is null;
IF (countCol <> 0) then
DBMS_OUTPUT.put_line(' EVAPP_INTERFACE.TARGET_AMNT_LTV_NUM values begin');
execute immediate 'select APPSEQNO, TARGET_AMNT_LTV_NUM from evapp_interface where TARGET_AMNT_LTV_NUM > 999999999999';
END IF;
END;
\
J'essaie d'afficher les résultats de la requête select. J'ai essayé de courir juste les instructions select est aussi, mais il donne une exception en disant qu'il ne peut pas trouver les colonnes mentionnées. Donc, j'ai essayé de mettre le nom de la table en face des colonnes, et il se plaint que j'avais besoin d'utiliser INTO
, et que j'ai utilisé, mais encore il n'aime pas la syntaxe.
et DATA_SCALE est nulle ?? Ce n'est pas une colonne de table USER_TAB_COLUMNS
oui; 'Chiffres à droite de la virgule dans un nombre".
oui; 'Chiffres à droite de la virgule dans un nombre".
OriginalL'auteur roymustang86 | 2012-07-23
Vous devez vous connecter pour publier un commentaire.
En supposant que vous utilisez SQL*Plus, l'option la plus simple est probablement de faire quelque chose comme
Si vous voulez afficher le résultat de PL/SQL, vous devez ouvrir le curseur, de récupérer les résultats dans les variables locales, et de faire quelque chose avec les variables locales telles que l'écriture sur le
DBMS_OUTPUT
.Je ne suis pas sûr que je comprends la question. Un curseur est un pointeur à une requête. Si vous déclarant que vous avez besoin d'exécuter plusieurs requêtes dynamiques et que vous souhaitez imprimer les résultats de chacune des requêtes après avoir mené à bien de nombreux anonymes PL/SQL blocs, vous devez déclarer plusieurs
refcursor
variables dans SQLPlus. Si vous avez l'intention d'exécuter un bloc anonyme, de l'impression des résultats, exécutez un autre bloc anonyme, de l'impression des résultats, etc. ensuite, vous pouvez utiliser un seulrefcursor
variable dans SQLPlus.J'ai fait ce que vous avez dit, mais après 8 curseurs, il me donne le message d'erreur indiquant que le curseur est fermé. Aussi, n'Oracle prenez soin de fermer le curseur à la fin d'un script?
vous êtes de l'ouverture du curseur à l'intérieur d'un
if
bloc; si vous n'allez pas dans ce bloc, le curseur ne sera pas ouvert, de sorte que peut être ce que vous voyez. Vous pourriez faire unelse
qui ouvre le curseur pour quelque chose d'autre, par exempleopen :rc for 'select ''count was zero'' from dual
. Et oui, les curseurs ne survivra pas le script.OriginalL'auteur Justin Cave