Otra forma de seleccionar de la tabla de retorno de funciones en Oracle

Tengo una función de Oracle my_func () que devuelve la tabla de tipo de usuario.

Ahora puedo seleccionar de esta manera:

SELECT * FROM TABLE(my_func(3));

Pero mi proyecto no debería depender de la base de datos, y me gustaría tener la oportunidad de escribir esto:

SELECT * FROM my_func(3);

¿Hay alguna manera de hacer esto en Oracle?

Respuesta 1

Debe usar la expresión de colección de tablas Table () para hacer esto directamente.

Si no necesita pasar ese parámetro, puede encapsular una consulta con la expresión de colección de tablas en una vista.

De lo contrario, podría haber una manera de pasar el parámetro a la función a través de una variable global empaquetada, pero probablemente no sería algo así como una base de datos independiente.

Respuesta: 2

Estás en un planeta diferente con Oracle en comparación con MS SQL en posibilidades programáticas. No es realmente más difícil, solo conceptos diferentes

Ejemplo 1:

  PROCEDURE Get_EligPlanTypes_sp    (I_EMPLID         IN     VARCHAR2,
                                 EligPlanTypesCur OUT    CurRefType) IS

  BEGIN

--* Retrieve eligible plan types for entry into the plan object. 

   OPEN EligPlanTypesCur FOR SELECT DISPLAY_PLN_SEQ
                   ,PLAN_TYPE
                   ,OPTION_CD
                   ,ELECTION_MADE
                               FROM ENR_PARTIC_PLAN
                      WHERE EMPLID   = I_EMPLID
                           ORDER BY DISPLAY_PLN_SEQ;

    EXCEPTION
     WHEN OTHERS THEN
             RAISE;

  END Get_EligPlanTypes_sp;

Función de muestra:

CREATE OR REPLACE PACKAGE dba_Functions_Package
AS


Function InstrCount         (strValue     Varchar2
                ,strTarget        Varchar2)
                RETURN NUMBER;


END dba_Functions_Package;

/

CREATE OR REPLACE PACKAGE BODY dba_Functions_Package
AS
-- *********************************************************************
-- ***  F U N C  T I O N (InstrCount) D E C L A R A T I O N S      *****
-- *********************************************************************

Function InstrCount     (strValue     IN Varchar2
            ,strTarget        IN Varchar2)
    RETURN Number
IS
        numOccurs   Integer :=  0;
        numReturn   Number  := -1;
    BEGIN

        While numReturn != 0 Loop
            numReturn := Instr(strValue,strTarget,1,numOccurs+1);
            If numReturn <> 0 Then
                numOccurs := numOccurs + 1;
            End If;
        End Loop While;

    RETURN(numOccurs);

    EXCEPTION
            WHEN OTHERS THEN RAISE;

End InstrCount;



END dba_Functions_Package;

/

Mira la consulta jerárquica. debería llevarte bien Link

Respuesta: 3

Los ejemplos funcionan mejor, imagine que Object es un Byte e intentamos convertirlo en un largo ... Actualmente, el código de byte se parece un poco a este Byte b = Byte.valueOf (1); Fuente del objeto = b; Largo largo = (...

Estoy usando el dominio de datos para la autenticación de inicio de sesión. funciona bien. También estoy usando componentes primefaces 3.2 en mi aplicación, también funcionan bien, PERO el problema ocurre en la página de inicio antes de iniciar sesión. Las primeras caras ...

Estoy haciendo una aplicación en Android. Tengo muchos archivos en el servidor como abc.doc, abc.xls, abc.mp3, etc. Quiero descargar todos estos archivos en un solo archivo como .zip, .rar y luego almacenarlos en la SDCARD. Que ...

Recientemente instalé el complemento del generador de ventanas en mi Eclipse IDE. Cuando creo un nuevo proyecto y agrego un generador de ventanas o cualquier cosa, no puedo arrastrar ni siquiera un botón de la paleta. Podría estar arrastrando ...