这里不允许使用ora-01733虚拟列

时间:2015-06-17 10:39:18

标签: oracle oracle11g virtual-column

我有一个变量vTipoIdCompartido,报告了一个列的名称。但似乎你不能这样做,因为它给了我错误' ora-01733虚拟列不允许在这里',每次我使用它。我必须采取不同的方式吗?

    create or replace PROCEDURE spCompartirPrestacion
(
    pIdQuien IN PRESTACIONES.IDPRESTACION%TYPE,
    pIdConQuien IN PRESTACIONES.IDPRESTACION%TYPE,
    pTipo NUMBER
)
AS
    vIdCompartidoQuien PRESTACIONES.IDCOMPARTIDOANUAL%TYPE := null;
    vIdCompartidoConQuien PRESTACIONES.IDCOMPARTIDOEVENTO%TYPE := null;
    vIdCompartido PRESTACIONES.IDCOMPARTIDOEVENTO%TYPE := null;
    vTipoIdCompartido CHAR(20) := null;

    BEGIN

    IF pTipo = 0 THEN -- ANUAL
        vTipoIdCompartido := 'IDCOMPARTIDOANUAL';
    ELSE -- EVENTO
        vTipoIdCompartido := 'IDCOMPARTIDOEVENTO';
    END IF;

    SELECT vTipoIdCompartido
    INTO   vIdCompartidoQuien
    FROM   PRESTACIONES
    WHERE  IDPRESTACION = pIdQuien;

    SELECT vTipoIdCompartido
    INTO   vIdCompartidoConQuien
    FROM   PRESTACIONES
    WHERE  IDPRESTACION = pIdConQuien;

    vIdCompartido := TO_NUMBER(to_char(systimestamp,'yyyyMMddHHmmssff'));

    IF vIdCompartidoQuien = null AND vIdCompartidoConQuien = null THEN

        UPDATE PRESTACIONES SET
        vTipoIdCompartido = vIdCompartido,
        ESTOPECOMPARTIDOANUAL = 1
        WHERE IDPRESTACION = pIdQuien;

        UPDATE PRESTACIONES SET
        vTipoIdCompartido = vIdCompartido,
        ESTOPECOMPARTIDOANUAL = 1
        WHERE IDPRESTACION = pIdConQuien;

        COMMIT;
        RETURN;
    END IF;

    IF vIdCompartidoQuien != null OR vIdCompartidoConQuien != null THEN

    IF vIdCompartidoQuien = null THEN
        UPDATE PRESTACIONES SET
        vTipoIdCompartido = vIdCompartidoConQuien,
        ESTOPECOMPARTIDOANUAL = 1
        WHERE IDPRESTACION = pIdQuien;

        COMMIT;
        RETURN;
    END IF;

    IF vIdCompartidoConQuien = null THEN
        UPDATE PRESTACIONES SET
        vTipoIdCompartido = vIdCompartidoQuien,
        ESTOPECOMPARTIDOANUAL = 1
        WHERE IDPRESTACION = pIdConQuien;
        COMMIT;
        RETURN;
    END IF;

    END IF;

    IF vIdCompartidoQuien != null AND vIdCompartidoConQuien != null THEN
        UPDATE PRESTACIONES SET
        vTipoIdCompartido = vIdCompartidoConQuien,
        ESTOPECOMPARTIDOANUAL = 1
        WHERE IDPRESTACION = pIdQuien;
        COMMIT;
        RETURN;

    END IF;

END spCompartirPrestacion;

CREATE TABLE "SERMECOOP"."PRESTACIONES"(
"IDPLAN" NUMBER(9,0) NOT NULL ENABLE, 
"IDPRESTACION" NUMBER(9,0), 
"IDBENEFICIO" NUMBER(9,0) NOT NULL ENABLE, 
"BONIFICACION" NUMBER(9,0), 
"CARENCIA" NUMBER(9,0), 
"TOPEPOREVENTO" NUMBER(19,4), 
"TOPEANUAL" NUMBER(19,4), 
"SINTOPE" NUMBER(1,0) DEFAULT '0', 
"ESTOPECOMPARTIDOEVENTO" NUMBER(1,0) DEFAULT '0', 
"IDBENEFICIOPADRE" NUMBER(9,0), 
"IDCATEGORIABENEFICIO" NUMBER(9,0), 
"EXCEPCION" NUMBER(1,0) DEFAULT '0', 
"IDPORCENTAJEEXCEPCION" NUMBER(9,4), 
"IDBENEFICIOCOMPARTIDO" NUMBER(9,0), 
"ESTOPECOMPARTIDOANUAL" NUMBER(1,0) DEFAULT '0', 
"IDCOMPARTIDOANUAL" NUMBER(20,0), 
"IDCOMPARTIDOEVENTO" NUMBER(20,0), 
 PRIMARY KEY ("IDPRESTACION"))

0 个答案:

没有答案