我尝试通过Oracle DB回写,它的工作就像魅力!但我需要通过Greenplum Postgresql DB来实现。当我通过postgre尝试完全相同的事情时,它显示错误..
以下是我使用的功能:
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;
在上面的函数中,我对该值进行了硬编码。
答案 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'
命令之前缺少选择。
这解决了我的疑问...... 谢谢大家的时间。