j'ai une procédure qui me retourne un curseur,
y'a t'il une commande pour connaitre le nombre de ligne de mon curseur sans avoir à faire un FETCH ou apres avoir fait un PRINT du curseur dans fichier TXT
Merci
j'ai une procédure qui me retourne un curseur,
y'a t'il une commande pour connaitre le nombre de ligne de mon curseur sans avoir à faire un FETCH ou apres avoir fait un PRINT du curseur dans fichier TXT
Merci
Bonjour,
essaie curseur%rowcount :
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 SQL> declare 2 cursor csr is select ename from emp; 3 v_ename emp.ename%type; 4 begin 5 open csr; 6 loop 7 fetch csr into v_ename; 8 exit when csr%notfound; 9 end loop; 10 dbms_output.put_line('Total :'||csr%rowcount); 11 close csr; 12 end; 13 / Total :14 PL/SQL procedure successfully completed.
bulk collect
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 SQL> create or replace type type1 as table of varchar2(50); 2 / Type created. SQL> declare 2 t1 type1; 3 begin 4 select ename 5 bulk collect into t1 6 from emp; 7 dbms_output.put_line('Total :' ||sql%rowcount); 8 end; 9 / Total :14 PL/SQL procedure successfully completed.
Guillaume HARRY
Expertise bases de données et Java/J2EE
Merci pour ta réponse, mais malheureusement je ne peux pas utiliser rowcount car ça m’oblige de faire un FETCH sur le curseur, et dans le deuxième cas je ne vois pas comment utiliser le bulk collect dans mon curseur
Guillaume HARRY
Expertise bases de données et Java/J2EE
Un COUNT m’oblige à avoir deux requêtes, et pour les maintenances, évolutions ou perfs, c’est difficiles à gérer surtout que c’est de grosse requêtes.
Mais on faisons un Print du CURSEUR dans fichier TXT, il n’ya pas qlq chose qui me retourne le nombre de ligne
Voici mon code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 SET NEWPAGE 0 SET SPACE 0 SET PAGESIZE 0 set linesize 2500 SET ECHO OFF SET FEEDBACK OFF SET HEADING OFF SET MARKUP HTML OFF SET ESCAPE \ Whenever sqlerror Exit Failure WHENEVER SQLERROR EXIT SQL.SQLCODE; --------------------------------------------------------------------------------------------------------------- -- Génération des fichiers plats ENTREPRISE.TXT --------------------------------------------------------------------------------------------------------------- var p_curseur_ENTETE refcursor; var p_curseur refcursor; var p_curseur_FIN refcursor; var p_date DATE; COLUMN l_file new_value l_file p_date = &1 execute PCK_EXPORT_SIERA_BASECO.PRC_ENTETE_FILE( '&1' , 'ENT', :p_curseur_ENTETE); execute PCK_EXPORT_SIERA_BASECO.PRC_EXPORT_ENTREPRISE_BIS ( '&1' , :p_curseur); SELECT 'base_commerciale_entreprise_'||to_char( to_date('&1') , 'YYYYMMDD' )||'.txt' l_file FROM dual; Spool &l_file print p_curseur_ENTETE print p_curseur spool off
L'option feedback permet l'affichage du nombre de lignes, donc au lieu depasse à
Code : Sélectionner tout - Visualiser dans une fenêtre à part set feeedback off
Code : Sélectionner tout - Visualiser dans une fenêtre à part set feeedback on
Guillaume HARRY
Expertise bases de données et Java/J2EE
Merci,
en faisant la modif, ça m'affiche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 680 ligne(s) sélectionnée(s).
j'aimerais avoir le nombre de ligne dans une variable que je pourrais exploiter
c'est possible don juste 680
Il n'y a pas de possiblité, sous Oracle, de connaitre le nombre de lignes ramenées par une requette sans l'executer.
Oracle n'est pas devin .
L'option "feedback" n'est pas du sql, c'est du sql+.
C'est surement l'utilisation de rowcount par sql+ qui permet d'avoir ce résultat.
je ne vois pas vraiment l'intérêt de passer par un fichier de spool plutôt que de faire un fetch...
Tu t'embêtes pour rien.
Guillaume HARRY
Expertise bases de données et Java/J2EE
Je suis un peu limiter dans les solutions à choisir :
- Je dois transmettre un fichier TXT contenant les résultats de ma requête
- Je ne peux pas utiliser la gestion de fichier d’ Oracle (UTL_FILE)
- Et JAVA encore moins!!!
une fois qu'on fait un PRINT du curseur la requete à était excutée? il n'ya rien dans sql+ qui me permet d'avoir ce que je veux
Malheureusement sans faire de count, si tu veux un nombre de lignes, tu dois d'abord les parcourir (fetch ou exécution du select)
Guillaume HARRY
Expertise bases de données et Java/J2EE
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager