You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义发票号生成函数报错:relation 'transpending_h'不存在

解决get_generated_kodesj()函数报错:"relation 'transpending_h' does not exist"

嘿,看你的问题描述,这个错误其实很好定位——PostgreSQL找不到你函数里引用的transpending_h表,而且错误指向第19行的FROM transpendi...,明显是表名拼写出问题了(看起来是截断了,少写了末尾的_h)。下面给你一步步的排查和修复方案:

第一步:先修正表名拼写

从错误提示和你给出的代码片段来看,第19行的FROM transpendi...应该是FROM transpending_h的笔误。把这个拼写修正过来,是最可能解决问题的办法。

比如把函数里的这行:

END END END AS "KODETRANSNEW" FROM transpendi...

改成:

END END END AS "KODETRANSNEW" FROM transpending_h

第二步:确认表是否真的存在

如果修正拼写后还是报错,那得先确认这个表到底在不在你的数据库里。执行这条SQL查一下:

SELECT table_name, table_schema FROM information_schema.tables WHERE table_name = 'transpending_h';
  • 如果没返回结果:说明你还没创建transpending_h表,得先把这个表建好才能让函数正常工作。
  • 如果有结果:说明表存在,但可能不在当前的搜索路径里。这时候你可以在函数里用全限定表名(比如your_schema.transpending_h,把your_schema换成实际的 schema 名称),或者调整数据库的搜索路径。

第三步:检查权限

另外还要注意,执行这个函数的数据库用户必须有transpending_h表的SELECT权限。如果没有的话,用这条命令给用户赋权(把your_user换成实际用户名):

GRANT SELECT ON transpending_h TO your_user;

修正后的完整函数示例

这里给你补全一下修正后的函数框架(保留你原来的逻辑,只修正表名部分,还补了容易遗漏的变量赋值):

CREATE FUNCTION get_generated_kodesj() RETURNS CHAR AS $$
DECLARE 
    kodeSJ CHAR;
BEGIN
    SELECT 
        CASE 
            WHEN MAX(RIGHT("KODETRANS",4)) IS NULL THEN 
                CONCAT('SJ-',EXTRACT(YEAR FROM NOW()),LPAD(CAST(EXTRACT(MONTH from NOW()) AS CHAR), 2 ,'0'),'0001')
            ELSE 
                -- 这里替换成你原本的CASE分支逻辑
                CONCAT('SJ-',EXTRACT(YEAR FROM NOW()),LPAD(CAST(EXTRACT(MONTH from NOW()) AS CHAR), 2 ,'0'),
                       LPAD(CAST(MAX(RIGHT("KODETRANS",4)) + 1 AS CHAR),4,'0'))
        END AS "KODETRANSNEW" 
    INTO kodeSJ -- 必须把查询结果赋值给声明的变量,否则函数返回空
    FROM transpending_h; -- 这里修正为正确的表名

    RETURN kodeSJ;
END;
$$ LANGUAGE plpgsql;

最后测试

重新创建修正后的函数,再执行:

SELECT get_generated_kodesj();

如果表存在、拼写正确、权限也够,应该就能正常生成你要的发票编号了。

内容的提问来源于stack exchange,提问作者Agoeng Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:56:45