Postgresql 13.13.以下函数的任何导数都成功创建,但函数中缺少我的参数。
CREATE OR REPLACE FUNCTION delete_user_and_related_data(p_username TEXT)
RETURNS VOID
LANGUAGE plpgsql
as
$$
DECLARE
v_uid INTEGER;
BEGIN
-- Get UID based on the provided username
SELECT uid INTO v_uid FROM users WHERE username = p_username;
-- Delete records from user_sessions where uid matches
DELETE FROM user_sessions WHERE uid = v_uid;
---more delete queries...
-- Delete record from users where username matches
DELETE FROM users WHERE username = p_username;
END;
$$;
字符串
我尝试将参数定义为一个varchar,在变量前加上“IN”nada。如果我查看函数,如果我尝试调用我得到的函数,参数将丢失:
delete_user_and_related_data(unknown)不是过程
下面是对象定义后的样子:
CREATE FUNCTION "public"."delete_user_and_related_data"() RETURNS void LANGUAGE PLPGSQL
AS
$$
DECLARE
v_uid INTEGER;
BEGIN
-- Get UID based on the provided username
SELECT uid INTO v_uid FROM users WHERE username = p_username;
-- Delete records from user_sessions where uid matches
DELETE FROM user_sessions WHERE uid = v_uid;
-- Delete records from zofolio_user_dream_coins where uid matches
DELETE FROM zofolio_user_dream_coins WHERE uid = v_uid;
-- Delete records from zofolio_user_trades where uid matches
DELETE FROM zofolio_user_trades WHERE uid = v_uid;
-- Delete record from users where username matches
DELETE FROM users WHERE username = p_username;
END;
$$
型
使用DBGrip,我不认为这有什么关系。我也试着用同样的信息创建一个过程,遇到了同样的问题。
1条答案
按热度按时间guicsvcw1#
当使用
CALL
而不是SELECT
调用函数时,就会发生这种情况。SELECT
应该用于调用函数(用CREATE FUNCTION
声明),即使是那些返回void
的函数,而CALL
用于过程(用CREATE PROCEDURE
声明)。如果你先创建了一个没有参数的函数,然后创建了一个同名但有参数的函数,你会得到两个不同的函数。这就是Function Overloading。如果你不需要这个函数,你想删除它:
字符串
如果你想删除另一个函数,你可以写
型
删除您不需要的版本应该可以消除导致您使用的客户端SQL工具查看错误版本的混淆。