Bonjour à tous,

Version Oracle: Enterprise Edition Release 11.2.0.1.0 - 64bit
OS: Linux Fedora Core 17 (X86_64)


J'ai une question concernant la déclaration et la définition des Explicit Cursors. D'après la documentation en ligne

http://docs.oracle.com/cd/E11882_01/...c.htm#BABHEBAI

On peut très bien d'abord déclarer un Cursor et ensuite, toujours dans le même bloc PL/SQL le définir complètement avec le SELECT qui va avec.

En se basant sur l'exemple 6-5 du lien ci-dessus, j'ai essayé le bloc suivant:

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
 
SQL> DECLARE
  2      CURSOR c1 RETURN hr.employees%ROWTYPE; -- Ici je déclarer le Cursor
  3      CURSOR c1 IS                           -- Ici je définie le Cursor
  4          SELECT *
  5          FROM hr.employees
  6          WHERE department_id = 100;
  7  BEGIN
  8      FOR emp In c1 LOOP
  9          sys.dbms_output.put_line(emp.employee_id);
 10      END LOOP;
 11  END;
 12  /
    FOR emp In c1 LOOP
               *
ERROR at line 8:
ORA-06550: line 8, column 16:
PLS-00307: too many declarations of 'C1' match this call
ORA-06550: line 8, column 5:
PL/SQL: Statement ignored
 
 
SQL>
Comme vous constatez, d'après oracle la déclaration et définition de C1 est ambigue puisque j'ai enlevé la clause RETURN hr.employees%ROWTYPE dans la définition. Par contre si vous regardez bien l'exmple de oracle dans le lien que j'ai donné ci-dessus, j'ai procédé exactement (enfin, il me semble ) comme la documentation (regardez le cursor c3 dans Example 6-5 dans le lien que j'ai donné). Du coup, je n'arrive pas à trouver mon erreur.

Je voudrais demander de bien vouloir m'éclairer sur ce problème.