CREATE OR REPLACE FUNCTION f_old_transactions (IN p_fromdate date, IN p_todate date, IN p_transtype varchar,IN OUT p_cancelled boolean,
OUT p_transaction_date date,
OUT p_type varchar,
OUT p_description varchar,
OUT p_amount numeric)
RETURNS SETOF record AS
$BODY$
declare lRunQuery text;
declare lTotalRec record;
declare lBranchList text[];
declare lTranstype text[];
BEGIN
select into lTranstype
dt.type
from
v_data_types dt;
lTranstype := regexp_split_to_array(p_transtype, ',');
lrunquery := 'select
it.transaction_date trandate,
dt.type,
it.description,
ita.amount,
it.cancelled
from
import_transaction it
inner join import_transaction_account ita on it.import_transaction_id=ita.import_transaction_id
where
it.transaction_date >= ' || quote_literal(p_fromdate) || '
and it.transaction_date <= ' || quote_literal(p_todate) || '
and dt.type = any(' || quote_literall(p_transtype) || ') and';
if (p_cancelled = TRUE) then
lrunquery := lrunquery || '
it.cancelled = ' || quote_literal(p_cancelled) || '';
else
lrunquery := lrunquery || '
it.cancelled = ' || quote_literal(p_cancelled) || '';
end if;
FOR lTotalrec in
execute lRunQuery
LOOP
p_transaction_date := ltotalrec.trandate;
p_type :=ltotalrec.type;
p_description :=ltotalrec.description;
p_amount :=ltotalrec.amount;
p_cancelled := ltotalrec.cancelled;
return next;
END LOOP;
return ;
end;
$BODY$
LANGUAGE plpgsql IMMUTABLE
COST 100
ROWS 1000;
ALTER FUNCTION f_old_transactions(date,date,varchar,boolean) OWNER TO "CompuLoanPostgres";
select * from f_old_transactions ('01-Jan-2010','31-Dec-2018','Receipt Cash','FALSE')
我收到的错误是我的数组值必须以&#34; {&#34;开头。我尝试创建的数组来自视图 v_data_type ,该视图只包含一个varchar类型的列。
有人可以指导我在我的代码中出现问题吗?
提前谢谢
答案 0 :(得分:0)
我不认为你给了我们足够的信息来确定出了什么问题。值得注意的是,我不知道表格应该是什么样子,无论是在架构还是内容中。没有它,我无法在自己的数据库中构建测试用例来进行调试。
那就是说,我注意到了一些事情,特别是lTranstype
变量:
您已经两次分配lTranstype
。首先你SELECT INTO
,然后立即将它分配给从p_transtype
参数解压缩的值。我不清楚你在那个变量中想要什么。
稍后构建查询时,请添加and dt.type = any(' || quote_literall(p_transtype) || ')
。问题是p_transtype
是一个varchar参数,你试图像数组一样访问它。我怀疑你想要阅读and dt.type = any(' || quote_literall(lTranstype) || ')
,但我可能会弄错。
我猜测您的类型错误来自第二个问题,但似乎您需要重新评估此函数中的不同变量的用途。祝你好运。