Oracle 此处不允许使用ora-01733虚拟列
我有一个变量vTipoIdCompartido,报告了一个列的名称。但似乎您不能这样做,因为每次我使用它时,它都会给我错误“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,
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,编译时的错误