Ver Mensaje Individual
  #6 (permalink)  
Antiguo 06/02/2014, 20:37
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
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