Postgresql 在函数中包含集合选项
我有一个函数,可以创建一些临时表,并Postgresql 在函数中包含集合选项,postgresql,function,Postgresql,Function,我有一个函数,可以创建一些临时表,并连接这些临时表。当我创建函数时,我可以在查询的顶部包括这一行: SET check_function_bodies = false; 这可防止引发错误“关系确实存在”。到目前为止还不错,但是调用函数时是否可以包含相同的SET行,还是应该包含在函数定义本身中 以下是我的实际函数定义: CREATE OR REPLACE FUNCTION reporting."rsp_TermPositionRawData_WIP"( /* parameters */ ) RE
连接这些临时表。当我创建函数时,我可以在查询的顶部包括这一行:
SET check_function_bodies = false;
这可防止引发错误“关系确实存在”。到目前为止还不错,但是调用函数时是否可以包含相同的SET
行,还是应该包含在函数定义本身中
以下是我的实际函数定义:
CREATE OR REPLACE FUNCTION reporting."rsp_TermPositionRawData_WIP"( /* parameters */ ) RETURNS void LANGUAGE 'sql'
COST 100 VOLATILE SET check_function_bodies=false
AS $BODY$
BEGIN
DROP TABLE IF EXISTS FilteredRequests;
DROP TABLE IF EXISTS FilteredResponses;
DROP TABLE IF EXISTS Ranks;
CREATE TEMP TABLE FilteredRequests AS
SELECT /* large query */;
CREATE TEMP TABLE FilteredResponses AS
SELECT /* large query that references "filteredrequests" */
CREATE TEMP TABLE Ranks AS
SELECT /* large query that references "filteredresponses" */
$BODY$;
错误消息是
ERROR: relation "filteredrequests" does not exist LINE 116: INNER JOIN FilteredRequests FRQ ON FRQ.QuoteID
要避免在创建函数过程中出现错误
,您必须按照所做的方式设置
参数。无法将其包含在CREATE FUNCTION
语句中
CREATE FUNCTION
的SET
子句控制执行函数时的参数,而不是定义函数时的参数。您还可以将函数添加到您的问题中吗?我对您的回答有点困惑。你的第一句话是指选择函数吗?对不起,太简洁了。我的第一句话的意思是,您现在所使用的方法(首先运行SET
语句,然后运行CREATE函数
语句)是正确的方法。在一份声明中无法做到这一点。谢谢。我对函数加冠词没有问题,但是当我在SELECT语句中调用它,为参数指定值时,我得到了“关系不存在”错误。在执行函数时,所有引用的对象都必须在那里,否则你当然会得到错误。我认为你应该提问并显示你的函数代码以及引用的错误消息。如果你发出SET check\u function\u bodies=false,你就不会得到错误代码>首先,对吗?这个函数运行得很好,对吗?