【问题标题】:Postgres Anonymous Code Block Syntax ErrorPostgres 匿名代码块语法错误
【发布时间】:2014-02-11 15:43:53
【问题描述】:

我在使用 pl-pgsql 语法时遇到了困难。

代码如下:

DO $$
DECLARE 
dia_semana INT := CAST(EXTRACT(DOW FROM CURRENT_DATE)as INT);
dia INT :=  CASE WHEN dia_semana = 0 THEN dia := 7;
         WHEN dia_semana = 1 THEN dia := 6;
         WHEN dia_semana = 2 THEN dia := 5;
         WHEN dia_semana = 3 THEN dia := 4;
         WHEN dia_semana = 4 THEN dia := 3;
         WHEN dia_semana = 5 THEN dia := 2;
         WHEN dia_semana = 6 THEN dia := 1;
BEGIN   
COPY(SELECT CURRENT_DATE + dia)
TO '/tmp/dump.sql';
END $$;

引发错误:

'第 4 行:dia INT := CASE WHEN dia_semana = 0 THEN dia := 7;'

光标位于“:”“直径:= 7”上。 已经尝试正常分配“dia = 7”但没有成功。有人可以帮我看看吗?

tnx.

【问题讨论】:

    标签: postgresql plpgsql


    【解决方案1】:

    案例之间没有分号;,每个案例内部的赋值也没有。 case 语法在这里更好

    dia int := case dia_semana
    
        when 0 then 7
        when 1 then 6
        when 2 then 5
        when 3 then 4
        when 4 then 3
        when 5 then 2
        when 6 then 1
        end;
    

    但你可以做的很简单

    dia int := 7 - dia_semana;
    

    【讨论】:

    • 嗨 Clodoaldo,tnx 的帮助,现在已经处理了那个“案例”问题。但是代码仍然不起作用。 PGSQL 将我的变量视为一列...继承消息:“错误:列“dia”不存在 LINE 1:COPY(SELECT CURRENT_DATE + dia)”
    • @XVirtusX:我认为您需要将 COPY 构建为字符串并执行它:stackoverflow.com/a/19970705/479863
    • @XVirtusX 我无法重现该错误。显示修改后的代码
    • @muistooshort 我应该如何将变量与字符串连接起来?我尝试了以下...没有成功:“执行'COPY(SELECT CURRENT_DATE +'|| dia ||')'||'TO /home/tmp/dump.sql';
    • @XVirtusX 这个错误在 9.3 中不会发生在我身上。你的版本是什么?
    猜你喜欢
    • 1970-01-01
    • 2017-05-18
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    相关资源
    最近更新 更多