POSTGRESQL PG / PGSQL-带参数的函数

时间:2018-04-26 15:44:59

标签: postgresql plpgsql

我在Postgresql中有一些问题,我有这个功能:

CREATE OR REPLACE FUNCTION public.isp_ticket(_cr integer, _grupo character varying(255), _numero integer, _descripcion text, _resumen character varying(255), _fechaaper timestamp with time zone, _fechacierr timestamp with time zone, _tipo smallint, _apellidousuarioafectado character varying(255), _apellidosolicitante character varying(255), _tenant character varying(255), _metodoreportado character varying(100), _prioridad smallint, _sla character varying(255), _categoria character varying(255), _estado character varying(255), _herramienta_id integer, _asignado character varying(255), _nombresolicitante character varying(255), _nombreusuarioafectado character varying(255))
RETURNS void AS $$

BEGIN
     CASE 
         WHEN _asignado = '' AND _close_date = '' AND _sla = '' 
         THEN  INSERT INTO public.website_ticket(cr, grupo, numero, descripcion, resumen, fechaaper, tipo, apellidousuarioafectado, apellidosolicitante, tenant, metodoreportado, prioridad, categoria, estado, herramienta_id, nombresolicitante, nombreusuarioafectado) VALUES (_cr, _grupo, _numero, _descripcion, _resumen, _fechaaper, _tipo, _apellidousuarioafectado, _apellidosolicitante, _tenant, _metodoreportado, _prioridad, _categoria, estado, _herramienta_id, _nombresolicitante, _nombreusuarioafectado);
         WHEN _asignado = '' AND _close_date = ''
         THEN INSERT INTO public.website_ticket(cr, grupo, numero, descripcion, resumen, fechaaper, tipo, apellidousuarioafectado, apellidosolicitante, tenant, metodoreportado, prioridad, sla, categoria, estado, herramienta_id, nombresolicitante, nombreusuarioafectado) VALUES (_cr, _grupo, _numero, _descripcion, _resumen, _fechaaper, _tipo, _apellidousuarioafectado, _apellidosolicitante, _tenant, _metodoreportado, _prioridad, _sla, _categoria, _estado, _herramienta_id, _nombresolicitante, _nombreusuarioafectado);
         WHEN new_close_date = ''
         THEN INSERT INTO public.website_ticket(cr, grupo, numero, descripcion, resumen, fechaaper, tipo, apellidousuarioafectado, apellidosolicitante, tenant, metodoreportado, prioridad, sla, categoria, estado, herramienta_id, asignado,nombresolicitante, nombreusuarioafectado)
    VALUES (_cr, _grupo, _numero, _descripcion, _resumen, _fechaaper, _tipo, _apellidousuarioafectado, _apellidosolicitante, _tenant, _metodoreportado, _prioridad, _sla, _categoria, _estado, _herramienta_id, _asignado, _nombresolicitante, _nombreusuarioafectado);
ELSE
UPDATE public.website_ticket SET fechacierr = _fechacierr WHERE numero = _numero;
END CASE;
END;
$$ LANGUAGE plpgsql;

当我尝试使用这个函数时:

SELECT public.isp_ticket(924266, 
'EUS_Zona V Region', 
512294,
'Nombre: Gisselle Espinoza Contreras\nCorreo: gespinoza@bancoripley.cl   
\nAnexo: 6221\nUbicación: Valparaiso\nPais: Chile\nMotivo: Usuario indica 
que su computador se apagó repentinamente. Se pudo entrar a windows después 
de un buen rato, pero no puede ingresar a las aplicaciones que se conecten a 
red.\n\nDirección: Plaza Victoria 1646 - Piso 1 - Banco',
'Valparaiso // Computador con problemas de conexión.',
'2018-01-23 15:17:51',
'',
1,
'Espinoza Contreras',
'Espinoza Contreras',
'Ripley',
'Telephone',
3,
'',
'Ripley.Hardware.Desktop.Falla',
'Open',
1,
'',
'Gissel Rose Marie',
'Gissel Rose Marie')

我尝试过CAST每个值,但它也不起作用,总是出现相同的错误:

错误:没有existefunciónpublic.isp_ticket(整数,字符变化,整数,文本,字符变化,带时区的时间戳,未知,整数,字符变化,字符变化,字符变化,字符变化,整数,未知,字符变化,字符变化,整数,未知,字符变化,字符变化) 第1行:SELECT public.isp_ticket(                ^ SQL状态:42883 性格:8

我需要帮助如何解决?

谢谢大家!!!

1 个答案:

答案 0 :(得分:2)

参数#7,_fechacierr应为timestamp with time zone。如果您需要空值,则无法传递'',将其更改为null(并将其转换为timestamp with time zone)。

值得一读how PostgreSQL finds specific function to call,尤其是:

  

如果任何输入参数未知,请检查接受的类型类别   其余候选人在这些论点上的立场。在每一个   如果任何候选人接受,则选择字符串类别   类别。 (这对字符串的偏见是合适的,因为a   unknown-type literal看起来像一个字符串。)否则,如果全部   剩下的候选人接受相同类型的类别,选择那个   类别;否则失败,因为无法推断出正确的选择   没有更多的线索。现在丢弃不接受的候选人   选择的类型类别。此外,如果任何候选人接受a   该类别中的首选类型,丢弃接受的候选人   该参数的非首选类型。保留所有候选人(如果没有   经受住这些考验。如果只剩下一名候选人,请使用它;其他   继续下一步。