Ver Mensaje Individual
  #5 (permalink)  
Antiguo 06/02/2014, 17:03
Avatar de Nova
Nova
 
Fecha de Ingreso: enero-2003
Ubicación: Hyo
Mensajes: 832
Antigüedad: 21 años, 3 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