在tableau中回写(在greenplum db中实现时出错)

时间:2015-11-30 13:50:27

标签: postgresql tableau

我尝试通过Oracle DB回写,它的工作就像魅力!但我需要通过Greenplum Postgresql DB来实现。当我通过postgre尝试完全相同的事情时,它显示错误.. enter image description here

以下是我使用的功能:

CREATE OR REPLACE FUNCTION fn_upd_user_comments(var_id_text IN VARCHAR)
  RETURNS varchar AS $$
  BEGIN       
   UPDATE xxxx.Main_Table_Comment
   SET comment = ('RTY')
   WHERE ID = 1;
   RETURN 'TRUE';
   EXCEPTION
        WHEN unique_violation THEN
     raise notice 'Error in Updating Records';
  END;
  $$ LANGUAGE plpgsql;

在上面的函数中,我对该值进行了硬编码。

2 个答案:

答案 0 :(得分:1)

我在Tableau网站上找到了您的帖子以及您在此处提供的链接:http://community.tableau.com/message/194207#194207

普遍的共识是这个"功能"是一个黑客,不应该做。使用Tableau作为只读报告工具。您似乎想要某种类型的用户表单,它将允许DML语句然后调用报表。

以下是您尝试做的一个示例,它不起作用:

    create table emp
    (empno int, 
     ename varchar,
     job varchar,
     mgr varchar,
     hiredate date,
     sal numeric,
     comm numeric,
     deptno int)
     distributed by (empno);

    create table tab_comment
     (val varchar) 
     distributed randomly;

    create or replace function fn_save_my_parameter(p_val varchar) returns varchar as
    $$
    insert into tab_comment select $1;
    select 'true'::varchar;
    $$
    language sql;

    insert into emp (empno, ename)
    select i, 'name_' || i from generate_series(1, 100) as i;

当您尝试使用Oracle示例完成SQL时,它无法正常工作。

    select  empno, ename, job, 
            mgr, hiredate, sal,
            comm, deptno, val
    from emp cross join tab_comment
    where fn_save_my_parameter('some comment') = 'true';

    ERROR: function cannot execute on segment because it issues a non-SELECT statement (functions.c:135)  (seg0 slice2 gpdbvm43.localdomain:50000 pid=1462) (cdbdisp.c:1326)
    SQL state: XX000
    Detail: SQL function "fn_save_my_parameter" during startup

这看起来就像你的错误信息。这不是Greenplum中的函数支持的功能。

答案 1 :(得分:0)

刚刚解决了这个问题...

在自定义SQL中,查询中略有添加:

Select *
from xxxx.main_table
where ( SELECT fn_upd_user_comments (<Parameters.Param>))='TRUE'

命令之前缺少选择。

这解决了我的疑问...... 谢谢大家的时间。