Bonjour,
Je bloqué dans la création d'une fonction pipelinée qui recherche la taille de tous les segments (lob, index...) associés à une table.
J'utilise pour cela la fonction DBMS_SPACE.OBJECT_DEPENDENT_SEGMENTS.
A l 'execution de mon code j'ai l'erreur suivante :
=> la ligne 40 est celle où j'appelle DBMS_SPACE.OBJECT_DEPENDENT_SEGMENTS
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SQL> Select * from table(yke_size_info('SAPRD', 'REPOSRC')); * ERROR at line 1: ORA-20000: Object does not exist ORA-06512: at "SYS.DBMS_SPACE", line 2673 ORA-06512: at "SYS.YKE_SIZE_INFO", line 40
Si je transforme ma fonction en procédure cela marche, si pour tester je passe en dur les paramètres cela marche...
Je tourne en rond cela me rend fou... à la base je suis DBA pas développeur !
PS : j'ai aussi posté ce message sur OTN.
Merci pour votre aide.
Si je code les paramètres en dur cela passe :
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
30 create or replace type r_size_info as object ( nb_par_tbl number , nb_idx number , nb_par_idx number , nb_lob number , used_par_tbl number , used_idx number , used_par_idx number , used_lob number , free_par_tbl number , free_idx number , free_par_idx number , free_lob number ) / create or replace type t_size_info as table of r_size_info; / CREATE OR REPLACE FUNCTION yke_size_info(o_wner varchar2, o_bject varchar2 ) RETURN t_size_info PIPELINED AS r_size r_size_info := r_size_info(0,0,0,0,0,0,0,0,0,0,0,0); obj_segment_owner VARCHAR2(100); obj_segment_name VARCHAR2(100); obj_segment_type VARCHAR2(100); obj_tablespace_name VARCHAR2(100); BEGIN FOR obj IN (SELECT segment_owner, segment_name, segment_type, tablespace_name FROM TABLE(dbms_space.object_dependent_segments(o_wner, o_bject, NULL, 1))) LOOP ...
Si je transforme ma fonction en procédure cela passe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part FOR obj IN (SELECT segment_owner, segment_name, segment_type, tablespace_name FROM TABLE(dbms_space.object_dependent_segments('SAPSR3', 'REPOSRC', NULL, 1)))
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE OR REPLACE PROCEDURE yke_size_inf (o_wner varchar2, o_bject varchar2) AS obj_segment_owner VARCHAR2(100); obj_segment_name VARCHAR2(100); obj_segment_type VARCHAR2(100); obj_tablespace_name VARCHAR2(100); BEGIN FOR obj IN (SELECT segment_owner, segment_name, segment_type, tablespace_name FROM (TABLE(dbms_space.object_dependent_segments (o_wner, o_bject, NULL, 1)))) LOOP ...
Partager