Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 此处不允许使用ora-01733虚拟列_Oracle_Oracle11g_Virtual Column - Fatal编程技术网

Oracle 此处不允许使用ora-01733虚拟列

Oracle 此处不允许使用ora-01733虚拟列,oracle,oracle11g,virtual-column,Oracle,Oracle11g,Virtual Column,我有一个变量vTipoIdCompartido,报告了一个列的名称。但似乎您不能这样做,因为每次我使用它时,它都会给我错误“ora-01733虚拟列此处不允许”。我必须做不同的事吗 create or replace PROCEDURE spCompartirPrestacion ( pIdQuien IN PRESTACIONES.IDPRESTACION%TYPE, pIdConQuien IN PRESTACIONES.IDPRESTACION%TYPE,

我有一个变量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"))

请将所用表/视图的DDL语句添加到您的问题中(胡乱猜测:您可能正在尝试更新视图。请尝试直接更新表而不是更新视图,或者使用替代触发器)@FrankSchmitt,DDL add,谢谢。@kowalcyck在表
PRESTACIONES
中,我看不到任何列的名称
vTipoIdCompartido
。除非使用动态SQL,否则不能将变量用作列名(在select或update中);但这会给出
ORA-00904:“VTIPOIDCOMPARTIDO”:无效标识符。我不明白你怎么能从这里得到ORA-01733。您确定这是您当前的表定义,并且尚未修改吗?你在编译时或运行时看到那个错误了吗?@AlexPoole,编译时的错误