我有一个问题,我在postgres中有一个函数,用于生成将用于生成更复杂报告的标题。
一切都很好。对于标题的结构,我根据字段本身向左或向右留空格,这是在lpad和rpad上实现的。
语法基本上是lpad或rpad(string,length,pad_string)。好吧。
复杂的是" length",它应该是一个整数,我必须对控制表中字段的变量值这样做。
值是可变的,所以我创建了一个函数,让我回到它的值。
我试过这样做:
SELECT c_transac||
lpad(c_tr_count,(SELECT crd.get_size_field('CRD',c_transac,'TRANSACTION-SEQUENCE')),' ')||
lpad(c_rc_count,8,' ')||
rpad(to_char(c_ctac_correlativo,'9999'),10,' ')||
rpad(ti.type_right,3,' ')||
lpad(ct.peri_codigo,8,' ')||
lpad(ct.peri_codigo,8,' ')||
lpad(v_pcod_scd_dest,11,' ')||
rpad(v_sigla_dest,45,' ')||
lpad('0',8,' ')||
lpad(to_char(c_decimal,'9'),1,' ')||
lpad(to_char(c_percentage,'9'),1,' ')||
rpad(c_version_crd,5,' ')||
rpad(c_currency,3,' '),
ti.type_right
INTO v_linea_sdn, c_type_right
FROM crd.tidav ti, public.ctact ct
WHERE to_number(ti.tida_codigo, '9') = c_tida_codigo
AND ct.ctac_correlativo = c_ctac_correlativo;
我调用的函数返回一个数值,它给出了以下错误:
ERROR: there is no lpad function (character varying, numeric, unknown)
LINE 2: lpad (c_tr_count, (SELECT crd.get_size_field ('CRD', c_tra ...
答案 0 :(得分:0)
添加类型转换:
lpad(
c_tr_count,
CAST(
crd.get_size_field('CRD',c_transac,'TRANSACTION-SEQUENCE')
AS integer
),
' '
)