Je voudrais trouver le nombre de lignes dans un curseur. Est-il un mot-clé qui peut vous aider? À l'aide de COUNT, nous devons écrire une requête. Toute aide sera grandement appréciée.
La cursor_variable.%ROWCOUNT est la solution. Mais sa valeur sera 0 si vous le vérifier après l'ouverture. Vous avez besoin d'une boucle sur tous les enregistrements, pour obtenir le total du nombre de lignes. L'exemple ci-dessous:
DECLARE
cur sys_refcursor;
cur_rec YOUR_TABLE%rowtype;BEGINOPEN cur FORSELECT*FROM YOUR_TABLE;
dbms_output.put_line(cur%rowcount);--returning 0
LOOP
FETCH cur INTO cur_rec;EXITWHEN cur%notfound;
dbms_output.put_line(cur%rowcount);--will return row number beginning with 1
dbms_output.put_line(cur_rec.SOME_COLUMN);END LOOP;
dbms_output.put_line('Total Rows: '|| cur%rowcount);--here you will get total row countEND;/
Vous pouvez également utiliser VRAC RECUEILLIR, de sorte qu'une BOUCLE n'est pas nécessaire,
DECLARECURSOR c
ISSELECT*FROM employee;
TYPE emp_tab ISTABLEOF employee%ROWTYPE INDEXBY BINARY_INTEGER;
v_emp_tab emp_tab;BEGINOPEN c;FETCH c BULK COLLECT INTO v_emp_tab;
DBMS_OUTPUT.PUT_LINE(v_emp_tab.COUNT);CLOSE c;END;/
DECLARE@STRVALUE NVARCHAR(MAX),@CREATEDDATE DATETIME,@STANTANCEVALUE NVARCHAR(MAX),@COUNT INT=0,@JOBCODE NVARCHAR(50)='JOB00123654',@DATE DATETIME=GETDATE(),@NAME NVARCHAR(50)='Ramkumar',@JOBID INT;CREATETABLE#TempContentSplitValue (ITEMS NVARCHAR(200))SELECT@JOBID = i.Id FROM JobHeader_TBL i WHERE Id=1201;IFEXISTS(SELECT1FROM JobHeader_TBL WHERE Id=@JOBID)BEGINSELECT@STRVALUE= Description from ContentTemplate_TBL where Id=1INSERTINTO#TempContentSplitValue SELECT*FROM dbo.split(@STRVALUE,'_')SET@STRVALUE=''DECLARE db_contentcursor CURSORFORSELECT ITEMS FROM#TempContentSplitValue
OPEN db_contentcursor
FETCH NEXT FROM db_contentcursor
INTO@STANTANCEVALUE
WHILE(@@FETCH_STATUS =0)BEGINSET@STRVALUE +=@STANTANCEVALUE +'JOB00123654'SET@COUNT +=1SELECT@COUNT
FETCH NEXT FROM db_contentcursor INTO@STANTANCEVALUE
ENDCLOSE db_contentcursor
DEALLOCATE db_contentcursor
DROPTABLE#TempContentSplitValue
SELECT@STRVALUE
END
Certains commentaires de code pourrait aider l'original de l'affiche de comprendre comment le code résout le problème.
Ici, je suis en train de compter le nombre total de clients ayant un âge supérieur à 25. Afin de stocker le résultat dans le curseur. Comptez ensuite la taille du curseur à l'intérieur de la fonction ou dans les principaux commencer à lui-même.
DECLARE
cname customer24.cust_name%type;
count1 integer :=0;CURSOR MORETHAN isSELECT cust_name
FROM customer24
where age>25;BEGINOPEN MORETHAN;
LOOP
FETCH MORETHAN into cname;
count1:=count1+1;EXITWHEN MORETHAN%notfound;END LOOP;-- dbms_output.put_line(count1);
dbms_output.put_line(MORETHAN%ROWCOUNT);CLOSE MORETHAN;END;
Vous ne pouvez pas avoir le curseur de comte à démarrer. Pour cela, vous avez besoin de récupérer complète curseur, c'est la façon d'obtenir curseur comte.
declarecursor c2 isselect*from dept;
var c2%rowtype;
i number :=0;beginopen c2;
loop
fetch c2 into var;exitwhen c2%NOTFOUND;
i:= i+1;end loop;close c2;
dbms_output.put_line('total records in cursor'||i);end;
Vous devez expliquer pourquoi cela répond à la question posée. Un bloc de code n'est pas une bonne réponse. Veuillez ajouter des explications.
Vous pouvez utiliser
%ROWCOUNT
attribut d'un curseur.e.g:
Cela renvoie toujours zéro, car aucune ligne n'a été récupéré.
OriginalL'auteur Chandu
La
cursor_variable.%ROWCOUNT
est la solution. Mais sa valeur sera 0 si vous le vérifier après l'ouverture. Vous avez besoin d'une boucle sur tous les enregistrements, pour obtenir le total du nombre de lignes. L'exemple ci-dessous:OriginalL'auteur Brij
Vous devez ouvrir le curseur, puis extraire et de compter chaque ligne. Rien d'autre ne fonctionne.
OriginalL'auteur Oracle McSnackers
Vous pouvez utiliser la suite simple à une seule ligne de code pour imprimer curseur compter
OriginalL'auteur sgrpwr
Vous pouvez également utiliser VRAC RECUEILLIR, de sorte qu'une BOUCLE n'est pas nécessaire,
OriginalL'auteur eifla001
OriginalL'auteur Ramkumar
Ici, je suis en train de compter le nombre total de clients ayant un âge supérieur à 25. Afin de stocker le résultat dans le curseur. Comptez ensuite la taille du curseur à l'intérieur de la fonction ou dans les principaux commencer à lui-même.
OriginalL'auteur ambakick
Vous ne pouvez pas avoir le curseur de comte à démarrer. Pour cela, vous avez besoin de récupérer complète curseur, c'est la façon d'obtenir curseur comte.
Un bloc de code n'est pas une bonne réponse. Veuillez ajouter des explications.
OriginalL'auteur