Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Ubicar las funciones en Oracle

Estas en el tema de Ubicar las funciones en Oracle en el foro de Oracle en Foros del Web. Estimados estoy intentando ubicar las funciones de oracle, he intentado la bsuqueda en las tablas y en las vistas pero no tengo exito hasta el ...
  #1 (permalink)  
Antiguo 06/02/2014, 09:20
Avatar de Nova  
Fecha de Ingreso: enero-2003
Ubicación: Hyo
Mensajes: 832
Antigüedad: 21 años, 9 meses
Puntos: 1
Exclamación Ubicar las funciones en Oracle

Estimados estoy intentando ubicar las funciones de oracle, he intentado la bsuqueda en las tablas y en las vistas pero no tengo exito hasta el momento.
Necesito ubicar ya que algunas funciones están dando valores erroneos y quisiera corregirlos.
Adjunto codigo

Cita:
AAA.ASSETCLASSID,
ARADMIN.ARS_SEC_TO_DATE (AAA.CREATE_DATE),
(SELECT ARADMIN.TEF_SELECTION_VALUES ('AST:AssetPeople', 7, STATUS)
FROM DUAL) AS ESTADO,
AAA.SUBMITTER
__________________
http://about.me/jemano
  #2 (permalink)  
Antiguo 06/02/2014, 10:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Ubicar las funciones en Oracle

¿Las funciones de Oracle, o funciones almacenadas creadas por los usuarios?
Para ver las rutinas almacenadas puedes usar la vista SYS.DBA_SOURCE, si es lo que necesitas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 06/02/2014, 13:13
Avatar de Nova  
Fecha de Ingreso: enero-2003
Ubicación: Hyo
Mensajes: 832
Antigüedad: 21 años, 9 meses
Puntos: 1
Respuesta: Ubicar las funciones en Oracle

Hola gnzsoloyo, gracias por responder en efecto lo que necesito son las rutinas generadas por los usuarios.
En tanto intenté encontrar la vista pero no hay la que dices (SYS.DBA_SOURCE).
Hay una lista de mas o menos 30 vistas con el inicio SYS_xyz..... , pero en ella no hay nada referente a dba_source.
Alguna pista?
Gracias
__________________
http://about.me/jemano
  #4 (permalink)  
Antiguo 06/02/2014, 14:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Ubicar las funciones en Oracle

En el esquema SYS están todos los componentes glbales, pero de allí a poder verlos hay un trecho. No te olvides que Oracle es muy estricto en cuanto a permisos.
¿Qué usuario y qué permisos tiene el que utilizas para consultar?

Prueba con ALL_SOURCE, por ejemplo:
Código SQL:
Ver original
  1. SELECT *
  2.   FROM all_source a
  3.  WHERE a.NAME = 'ARS_SEC_TO_DATE';

o bien all_objects:
Código SQL:
Ver original
  1. SELECT *
  2.   FROM all_objects a
  3.  WHERE a.owner = 'ARADMIN'
  4.    AND a.object_type = 'FUNCTION';

Por supuesto, simepre dependerá de si tienes o n opermisos para realizar esas consultas a las vistas de la base SYS.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 06/02/2014, 17:03
Avatar de Nova  
Fecha de Ingreso: enero-2003
Ubicación: Hyo
Mensajes: 832
Antigüedad: 21 años, 9 meses
Puntos: 1
Respuesta: Ubicar las funciones en Oracle

Me hiciste el día gnzsoloyo,
Tengo los resultados de ambas consultas, pero aun necesito saber (o desifrar) donde consigo los valores que obtiene al realizar dicha consulta, por ahi veo un FROM DUAL, el cual dicha vista/tabla no existe.

Código SQL:
Ver original
  1. FUNCTION TEF_SELECTION_VALUES ( FORMULARIO VARCHAR2, IDFIELD VARCHAR2, P_CODIGO NUMBER) RETURN varchar2 IS
  2.  
  3.     XXXX                      VARCHAR2(90);
  4.  
  5.     L_TEF_TAB_SELECT_VALUES   TEF_TAB_SELECT_VALUES:= TEF_TAB_SELECT_VALUES();
  6.  
  7.     F_DATOS                   VARCHAR2(4000);
  8.  
  9.     F_ELEMENTOS               NUMBER(15);
  10.  
  11.     F_LONGUITUD               NUMBER(15);
  12.  
  13.     L_LOCALE                  VARCHAR2(30);
  14.  
  15.     L_VALUE                   VARCHAR2(255);
  16.  
  17.     L_NUMBER                  NUMBER(15);
  18.  
  19.     X                         NUMBER(15) :=0;
  20.  
  21.     R                         NUMBER(15) :=0;
  22.  
  23.     CURSOR C1 IS
  24.  
  25.         SELECT DISTINCT
  26.  
  27.                        TO_NUMBER(FUENTE.LONGUITUD, '999990') AS LONGUITUD,
  28.  
  29.                        TO_NUMBER(SUBSTR(SUBSTR(FUENTE.CADENA, LENGTH(FUENTE.LONGUITUD)+2, LENGTH(FUENTE.CADENA)-LENGTH(FUENTE.LONGUITUD)+1), 1, INSTR(SUBSTR(FUENTE.CADENA, LENGTH(FUENTE.LONGUITUD)+2, LENGTH(FUENTE.CADENA)-LENGTH(FUENTE.LONGUITUD)+1), '\')-1), '999990') AS ELEMENTOS,
  30.  
  31.                       SUBSTR(SUBSTR(SUBSTR(FUENTE.CADENA, LENGTH(FUENTE.LONGUITUD)+2, LENGTH(FUENTE.CADENA)-LENGTH(FUENTE.LONGUITUD)+1), INSTR(SUBSTR(FUENTE.CADENA, LENGTH(FUENTE.LONGUITUD)+2, LENGTH(FUENTE.CADENA)-LENGTH(FUENTE.LONGUITUD)+1), '\'), LENGTH(SUBSTR(FUENTE.CADENA, LENGTH(FUENTE.LONGUITUD)+2, LENGTH(FUENTE.CADENA)-LENGTH(FUENTE.LONGUITUD)+1))-INSTR(SUBSTR(FUENTE.CADENA, LENGTH(FUENTE.LONGUITUD)+2, LENGTH(FUENTE.CADENA)-LENGTH(FUENTE.LONGUITUD)), '\')), 1,  FUENTE.LONGUITUD) AS CADENA,
  32.  
  33.                       FUENTE.LOCALE AS LOCALE
  34.  
  35.        FROM
  36.  
  37.        (SELECT SUBSTR(SUBSTR(NVL(PROPSHORT, PROPLONG), INSTR(NVL(PROPSHORT, PROPLONG), '\230\4\')+7, LENGTH(NVL(PROPSHORT, PROPLONG))-INSTR(NVL(PROPSHORT, PROPLONG), '\230\4\')), 1, INSTR(SUBSTR(NVL(PROPSHORT, PROPLONG), INSTR(NVL(PROPSHORT, PROPLONG), '\230\4\')+7, LENGTH(NVL(PROPSHORT, PROPLONG))-INSTR(NVL(PROPSHORT, PROPLONG), '\230\4\')), '\')-1) AS LONGUITUD,
  38.  
  39.                SUBSTR(NVL(PROPSHORT, PROPLONG), INSTR(NVL(PROPSHORT, PROPLONG), '\230\4\')+7, LENGTH(NVL(PROPSHORT, PROPLONG))-INSTR(NVL(PROPSHORT, PROPLONG), '\230\4\')) AS CADENA,
  40.                D.LOCALE AS LOCALE
  41.         FROM   ARSCHEMA A, FIELD B, FIELD_DISPPROP C, VUI D
  42.         WHERE  A.SCHEMAID = B.SCHEMAID
  43.         AND    B.SCHEMAID = C.SCHEMAID
  44.         AND    A.SCHEMAID = D.SCHEMAID
  45.         AND    C.FIELDID  = B.FIELDID
  46.         AND    D.VUIID = C.VUIID
  47.         AND    D.LOCALE LIKE 'es%'
  48.         AND    B.FIELDID  = IDFIELD
  49.         AND    A.SCHEMAID = (SELECT SCHEMAID FROM ARSCHEMA WHERE NAME = FORMULARIO)) FUENTE;
  50.    BEGIN
  51.  
  52.        OPEN C1;
  53.        FETCH C1 INTO F_LONGUITUD, F_ELEMENTOS, F_DATOS, L_LOCALE;
  54.  
  55.        LOOP
  56.            IF F_DATOS IS NULL THEN EXIT; END IF;
  57.            --x :=0;
  58.  
  59.            R :=0;
  60.  
  61.            FOR R IN 1..F_ELEMENTOS LOOP
  62.  
  63.                --dbms_output.PUT_LINE(f_datos);
  64.  
  65.                SELECT REPLACE(SUBSTR(F_DATOS, 1, INSTR(F_DATOS, '\', 2)), '\', '') INTO L_NUMBER FROM DUAL;
  66.  
  67.                --dbms_output.PUT_LINE(l_number);
  68.  
  69.                SELECT '\' || REPLACE('@' || F_DATOS, '@' || SUBSTR(F_DATOS, 1, INSTR(F_DATOS, '\', 2)), '') INTO F_DATOS  FROM DUAL;
  70.  
  71.                --dbms_output.PUT_LINE(f_datos);
  72.  
  73.                SELECT REPLACE(SUBSTR(F_DATOS, 1, INSTR(F_DATOS, '\', 2)), '\', '') INTO L_VALUE FROM DUAL;
  74.  
  75.                --dbms_output.PUT_LINE(l_value);
  76.  
  77.                SELECT '\' || REPLACE('@' || F_DATOS, '@' || SUBSTR(F_DATOS, 1, INSTR(F_DATOS, '\', 2)), '') INTO F_DATOS FROM DUAL;
  78.  
  79.                L_TEF_TAB_SELECT_VALUES.EXTEND;
  80.  
  81.                L_TEF_TAB_SELECT_VALUES (X + 1) := TEF_OBJ_SELECT_VALUES(FORMULARIO, IDFIELD, L_NUMBER, L_VALUE, L_LOCALE);
  82.  
  83.                XXXX:=L_VALUE;
  84.  
  85.                EXIT WHEN L_NUMBER=P_CODIGO;
  86.  
  87.                X := X + 1;
  88.  
  89.            END LOOP;
  90.  
  91.        FETCH C1 INTO F_LONGUITUD, F_ELEMENTOS, F_DATOS, L_LOCALE;
  92.  
  93.        EXIT WHEN C1%NOTFOUND;
  94.  
  95.    END LOOP;
  96.  
  97.    CLOSE C1;
  98.  
  99.    RETURN XXXX;
  100.  
  101.   END;
[/QUOTE]
__________________
http://about.me/jemano

Última edición por gnzsoloyo; 06/02/2014 a las 20:29
  #6 (permalink)  
Antiguo 06/02/2014, 20:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Ubicar las funciones en Oracle

Cita:
Iniciado por Nova Ver Mensaje
Me hiciste el día gnzsoloyo,
Tengo los resultados de ambas consultas, pero aun necesito saber (o desifrar) donde consigo los valores que obtiene al realizar dicha consulta, por ahi veo un FROM DUAL, el cual dicha vista/tabla no existe.
Sin pretender ofenderte, esa observación que haces demuestra que te falta aprender algunas cosas de Oracle... Yo te sugeriría que antes de proseguir busques un tutorial básico para comprender algunos detalles de ese tenor y otros más.

DUAL es una tabla ficticia o "dummie" que se usa cuando se pretende obtener un resultado que no proviene de ninguna tabla física ni vista (datos creados por un SELECT), o bien se intenta almacenar un valor sin usar SET en una o más variables.
Oracle no acepta que un SELECT no tenga un FROM. Es una restricción que posee, a diferencia, por ejemplo, de MySQL.
¿Se entiende?
Por ello, eso no es un error.

Por otro lado, tu estás mencionando "valores erróneos", pero no nos dices ni cuáles, ni cómo sabes que son erróneos, ni tampoco en qué contexto de datos aparecen.

Con tan poca información no podemos ayudarte.

Previamente estabas buscando cómo encontrar las SF, y eso ya te lo dije. El resto del problema es algo que debes hacer tu, a menos que nos expliques concretamente lo que te menciono:
1) ¿Qué errores?
2) ¿En qué contexto?
3) ¿Cómo sabes que son errores de los SP y no errores producto de datos incorrectos ingressados?

Lo que sí te puedo hacer notar anticipadamente, es que esa SF tiene agregados puntos de control (ahora inactivos) tales que si la ejecutas a mano, te pueden mostrar en pantalla el estado parcial de ciertos datos en la ejecución. Tales controles se mostrarían en el spool o en pantalla si lo haces en consola.
Por lo demás, la forma de armado de la SF muestra bastante profesionalismo, por lo que no esperaría errores de programación, sino en todo caso de datos entrantes...

Código SQL:
Ver original
  1. FUNCTION TEF_SELECTION_VALUES (FORMULARIO VARCHAR2, IDFIELD VARCHAR2, P_CODIGO NUMBER)
  2.     RETURN VARCHAR2
  3. IS
  4.     XXXX                      VARCHAR2 (90);
  5.     L_TEF_TAB_SELECT_VALUES   TEF_TAB_SELECT_VALUES := TEF_TAB_SELECT_VALUES ();
  6.     F_DATOS                   VARCHAR2 (4000);
  7.     F_ELEMENTOS               NUMBER (15);
  8.     F_LONGUITUD               NUMBER (15);
  9.     L_LOCALE                  VARCHAR2 (30);
  10.     L_VALUE                   VARCHAR2 (255);
  11.     L_NUMBER                  NUMBER (15);
  12.     X                         NUMBER (15)           := 0;
  13.     R                         NUMBER (15)           := 0;
  14.  
  15.     CURSOR C1
  16.     IS
  17.         SELECT DISTINCT TO_NUMBER (FUENTE.LONGUITUD, '999990') AS LONGUITUD,
  18.                         TO_NUMBER (SUBSTR (SUBSTR (FUENTE.CADENA,
  19.                                                    LENGTH (FUENTE.LONGUITUD) + 2,
  20.                                                    LENGTH (FUENTE.CADENA) - LENGTH (FUENTE.LONGUITUD) + 1
  21.                                                   ),
  22.                                            1,
  23.                                              INSTR (SUBSTR (FUENTE.CADENA,
  24.                                                             LENGTH (FUENTE.LONGUITUD) + 2,
  25.                                                             LENGTH (FUENTE.CADENA) - LENGTH (FUENTE.LONGUITUD) + 1
  26.                                                            ),
  27.                                                     '\')
  28.                                           - 1
  29.                                          ),
  30.                                   '999990') AS ELEMENTOS,
  31.                        SUBSTR (SUBSTR (SUBSTR (FUENTE.CADENA,
  32.                                                LENGTH (FUENTE.LONGUITUD) + 2,
  33.                                                LENGTH (FUENTE.CADENA) - LENGTH (FUENTE.LONGUITUD) + 1
  34.                                               ),
  35.                                        INSTR (SUBSTR (FUENTE.CADENA,
  36.                                                       LENGTH (FUENTE.LONGUITUD) + 2,
  37.                                                       LENGTH (FUENTE.CADENA) - LENGTH (FUENTE.LONGUITUD) + 1
  38.                                                      ),
  39.                                               '\'),
  40.                                          LENGTH (SUBSTR (FUENTE.CADENA,
  41.                                                          LENGTH (FUENTE.LONGUITUD) + 2,
  42.                                                          LENGTH (FUENTE.CADENA) - LENGTH (FUENTE.LONGUITUD) + 1
  43.                                                         ))
  44.                                        - INSTR (SUBSTR (FUENTE.CADENA,
  45.                                                         LENGTH (FUENTE.LONGUITUD) + 2,
  46.                                                         LENGTH (FUENTE.CADENA) - LENGTH (FUENTE.LONGUITUD)
  47.                                                        ),
  48.                                                 '\')
  49.                                       ),
  50.                                1,
  51.                                FUENTE.LONGUITUD
  52.                               ) AS CADENA,
  53.                        FUENTE.LOCALE AS LOCALE
  54.                   FROM (SELECT SUBSTR (SUBSTR (NVL (PROPSHORT, PROPLONG),
  55.                                                INSTR (NVL (PROPSHORT, PROPLONG), '\230\4\') + 7,
  56.                                                LENGTH (NVL (PROPSHORT, PROPLONG))
  57.                                                - INSTR (NVL (PROPSHORT, PROPLONG), '\230\4\')
  58.                                               ),
  59.                                        1,
  60.                                          INSTR (SUBSTR (NVL (PROPSHORT, PROPLONG),
  61.                                                         INSTR (NVL (PROPSHORT, PROPLONG), '\230\4\') + 7,
  62.                                                           LENGTH (NVL (PROPSHORT, PROPLONG))
  63.                                                         - INSTR (NVL (PROPSHORT, PROPLONG), '\230\4\')
  64.                                                        ),
  65.                                                 '\')
  66.                                        - 1
  67.                                       ) AS LONGUITUD,
  68.                                SUBSTR (NVL (PROPSHORT, PROPLONG),
  69.                                        INSTR (NVL (PROPSHORT, PROPLONG), '\230\4\') + 7,
  70.                                        LENGTH (NVL (PROPSHORT, PROPLONG)) - INSTR (NVL (PROPSHORT, PROPLONG), '\230\4\')
  71.                                       ) AS CADENA,
  72.                                D.LOCALE AS LOCALE
  73.                           FROM ARSCHEMA A, FIELD B, FIELD_DISPPROP C, VUI D
  74.                          WHERE A.SCHEMAID = B.SCHEMAID
  75.                            AND B.SCHEMAID = C.SCHEMAID
  76.                            AND A.SCHEMAID = D.SCHEMAID
  77.                            AND C.FIELDID = B.FIELDID
  78.                            AND D.VUIID = C.VUIID
  79.                            AND D.LOCALE LIKE 'es%'
  80.                            AND B.FIELDID = IDFIELD
  81.                            AND A.SCHEMAID = (SELECT SCHEMAID
  82.                                                FROM ARSCHEMA
  83.                                               WHERE NAME = FORMULARIO)) FUENTE;
  84. BEGIN
  85.    OPEN C1;
  86.  
  87.    FETCH C1
  88.     INTO F_LONGUITUD, F_ELEMENTOS, F_DATOS, L_LOCALE;
  89.    LOOP
  90.        IF F_DATOS IS NULL
  91.        THEN
  92.            EXIT;
  93.        END IF;
  94.        --x :=0;
  95.        R    := 0;
  96.        FOR R IN 1 .. F_ELEMENTOS LOOP
  97.            --dbms_output.PUT_LINE(f_datos);
  98.            SELECT REPLACE (SUBSTR (F_DATOS, 1, INSTR (F_DATOS, '\', 2)), '\', '')
  99.              INTO L_NUMBER
  100.              FROM DUAL;
  101.              
  102.            --dbms_output.PUT_LINE(l_number);
  103.            SELECT '\' || REPLACE ('@' || F_DATOS, '@' || SUBSTR (F_DATOS, 1, INSTR (F_DATOS, '\', 2)), '')
  104.              INTO F_DATOS
  105.              FROM DUAL;
  106.  
  107.            --dbms_output.PUT_LINE(f_datos);
  108.            SELECT REPLACE (SUBSTR (F_DATOS, 1, INSTR (F_DATOS, '\', 2)), '\', '')
  109.              INTO L_VALUE
  110.              FROM DUAL;
  111.  
  112.            --dbms_output.PUT_LINE(l_value);
  113.            SELECT '\' || REPLACE ('@' || F_DATOS, '@' || SUBSTR (F_DATOS, 1, INSTR (F_DATOS, '\', 2)), '')
  114.              INTO F_DATOS
  115.              FROM DUAL;
  116.  
  117.            L_TEF_TAB_SELECT_VALUES.EXTEND;
  118.            L_TEF_TAB_SELECT_VALUES (X + 1)    := TEF_OBJ_SELECT_VALUES (FORMULARIO,
  119.                                                                         IDFIELD,
  120.                                                                         L_NUMBER,
  121.                                                                         L_VALUE,
  122.                                                                         L_LOCALE
  123.                                                                        );
  124.            XXXX                               := L_VALUE;
  125.            EXIT WHEN L_NUMBER = P_CODIGO;
  126.            X                                  := X + 1;
  127.        END LOOP;
  128.        FETCH C1
  129.         INTO F_LONGUITUD, F_ELEMENTOS, F_DATOS, L_LOCALE;
  130.        EXIT WHEN C1%NOTFOUND;
  131.    END LOOP;
  132.    CLOSE C1;
  133.    RETURN XXXX;
  134. END;
Explicanos lo que te digo y veremos por donde es el problema.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 07/02/2014 a las 06:15

Etiquetas: funcion, funciones, select, tabla, ubicar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:21.