如何在“EXECUTE format()”中使用 unnest 参数在 plpgsql 中?
我试图在“unnest”内发送一个数组,但在“EXECUTE format()”中使用它,我该怎么做?
表
CREATE TABLE IF NOT EXISTS table_xvx(
row_id SERIAL NOT NULL PRIMARY KEY,
open FLOAT(36),
high FLOAT(36),
low FLOAT(36),
close FLOAT(36),
volume FLOAT(36),
capital FLOAT(36),
transactions FLOAT(36)
)
类型
CREATE TYPE type_ohlcvct AS(
type_open float,
type_high float,
type_low float,
type_close float,
type_volume float,
type_capital float,
type_transactions float
);
函数
CREATE OR REPLACE FUNCTION insert_data_ohlcvct(table_name_ varchar(70) , data_list type_ohlcvct[])
RETURNS VOID AS
$$
DECLARE
error_message varchar;
BEGIN
EXECUTE format(
'INSERT INTO %I(open,high,low,close,volume,capital,transactions)
SELECT * FROM unnest(%s)',table_name_ , data_list);
END;
$$ LANGUAGE plpgsql;
调用方式
SELECT insert_data_ohlcvct('table_xvx' ,'{"(10,10,10,10,10,10,10)","(10,10,10,10,10,10,10)"}'::type_ohlcvct[]);
SELECT insert_data_ohlcvct('table_xvx' , (ARRAY['(10,10,10,10,10,10,10)','(10,10,10,10,10,10,10)'])::type_ohlcvct[]);
SELECT insert_data_ohlcvct('table_xvx' , ARRAY['(10,10,10,10,10,10,10)'::type_ohlcvct,'(10,10,10,10,10,10,10)']);
错误总是一样
ERROR: syntax error at or near "{"
LINE 2: SELECT * FROM unnest({"(10,10,10,10,10,10,10)","(10,10,10,...
^
QUERY: INSERT INTO table_xvx(open,high,low,close,volume,capital,transactions)
SELECT * FROM unnest({"(10,10,10,10,10,10,10)","(10,10,10,10,10,10,10)"})
CONTEXT: PL/pgSQL function insert_data_ohlcvct(character varying,type_ohlcvct[]) line 5 at EXECUTE
SQL state: 42601
Im trying to send an array inside a "unnest" but using it in an a "EXECUTE format()" , how can i do that?
Table
CREATE TABLE IF NOT EXISTS table_xvx(
row_id SERIAL NOT NULL PRIMARY KEY,
open FLOAT(36),
high FLOAT(36),
low FLOAT(36),
close FLOAT(36),
volume FLOAT(36),
capital FLOAT(36),
transactions FLOAT(36)
)
Type
CREATE TYPE type_ohlcvct AS(
type_open float,
type_high float,
type_low float,
type_close float,
type_volume float,
type_capital float,
type_transactions float
);
Function
CREATE OR REPLACE FUNCTION insert_data_ohlcvct(table_name_ varchar(70) , data_list type_ohlcvct[])
RETURNS VOID AS
$
DECLARE
error_message varchar;
BEGIN
EXECUTE format(
'INSERT INTO %I(open,high,low,close,volume,capital,transactions)
SELECT * FROM unnest(%s)',table_name_ , data_list);
END;
$ LANGUAGE plpgsql;
Ways to call
SELECT insert_data_ohlcvct('table_xvx' ,'{"(10,10,10,10,10,10,10)","(10,10,10,10,10,10,10)"}'::type_ohlcvct[]);
SELECT insert_data_ohlcvct('table_xvx' , (ARRAY['(10,10,10,10,10,10,10)','(10,10,10,10,10,10,10)'])::type_ohlcvct[]);
SELECT insert_data_ohlcvct('table_xvx' , ARRAY['(10,10,10,10,10,10,10)'::type_ohlcvct,'(10,10,10,10,10,10,10)']);
The error is always the same
ERROR: syntax error at or near "{"
LINE 2: SELECT * FROM unnest({"(10,10,10,10,10,10,10)","(10,10,10,...
^
QUERY: INSERT INTO table_xvx(open,high,low,close,volume,capital,transactions)
SELECT * FROM unnest({"(10,10,10,10,10,10,10)","(10,10,10,10,10,10,10)"})
CONTEXT: PL/pgSQL function insert_data_ohlcvct(character varying,type_ohlcvct[]) line 5 at EXECUTE
SQL state: 42601
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不要将参数作为字符串传递给动态 SQL - 将它们作为参数传递:
Don't pass parameters to dynamic SQL as strings - pass them as parameters: