问题描述
我迷失了方向。在SQL Server中,创建存储过程非常简单。有一个简单的结构,您可以定义并创建。做完了但是,在Postgres中,我已经看到了用于创建函数或存储过程的语法的多种变体,而且我还完全不能创建一个。我总是会出错。总是。在任何示例中,我都尝试过在线。
下面的示例失败,并显示以下错误:
[Sep 3,2020 12:26 PM] 42601: unterminated dollar-quoted string at or near "$$ DECLARE _schemaname text; _tablename text; _key text; _value text; _columns text[]; _values text[]; BEGIN SELECT pg_namespace.nspname,pg_class.relname INTO STRICT _schemaname,_tablename FROM pg_class JOIN pg_namespace ON (pg_namespace.oid = pg_class.relnamespace) WHERE pg_class.oid = $1; FOR _key IN SELECT columns.column_name FROM information_schema.columns WHERE columns.table_schema = _schemaname AND columns.table_name = _tablename ORDER BY columns.ordinal_position LOOP EXECUTE format($s$SELECT format('%%L',((($1)::%s).%I))$s$,$1,_key) USING $2 INTO STRICT _value"
我不知道该如何解决。我进行了一些搜索,并尝试了在脚本的顶部和底部将$$更改为$ BODY $的建议,但是由于相同的错误而失败。我在做什么错了?
这是另一个网站上定义的存储过程。
CREATE OR REPLACE FUNCTION create_insert_statement(regclass,anyelement) RETURNS text
LANGUAGE plpgsql
AS $$
DECLARE
_schemaname text;
_tablename text;
_key text;
_value text;
_columns text[];
_values text[];
BEGIN
SELECT pg_namespace.nspname,pg_class.relname
INTO STRICT _schemaname,_tablename
FROM pg_class
JOIN pg_namespace
ON (pg_namespace.oid = pg_class.relnamespace)
WHERE pg_class.oid = $1;
FOR _key IN
SELECT columns.column_name
FROM information_schema.columns
WHERE columns.table_schema = _schemaname
AND columns.table_name = _tablename
ORDER BY columns.ordinal_position
LOOP
EXECUTE format($s$SELECT format('%%L',_key) USING $2 INTO STRICT _value;
_columns := _columns || _key;
_values := _values || _value;
END LOOP;
RETURN format('INSERT INTO %s (%s) VALUES (%s)',array_to_string(_columns,','),array_to_string(_values,'));
END;
$$;
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)