sql - 我如何在我的 PostgreSQL 数据库中调用另一个过程
问题描述
我在 PostgreSQL 中有一个数据库,我想创建一个过程,在该过程中我将向表中添加一个新人,但只能添加一个具有特权状态(类型为VARCHAR
)的人等于 'ADMIN' 或'所有者'。
这就是为什么我的想法是创建过程addUser
和另一个addPrivilegeToUser
我将调用的过程addUser
。不幸的是它不能正常工作,我收到错误消息
错误:“CALL”处或附近的语法错误。
这是一些代码:
CREATE PROCEDURE addUser(loginUserToAdd VARCHAR(30),
loginUser VARCHAR(30), accessTypeT VARCHAR(20))
LANGUAGE SQL
AS $$
INSERT INTO privilege(userId, storageId, accessType)
VALUES((SELECT userID
FROM userTable
WHERE(login = loginUserToAdd)),
(SELECT storageId
FROM privilege
WHERE userId = (SELECT userId
FROM userTable
WHERE login = loginUser)), accessTypeT);
$$;
CREATE PROCEDURE addUserToStorage(loginUserToAdd VARCHAR(30),
loginUser VARCHAR(30), accessTypeT VARCHAR(20))
LANGUAGE sql
AS $$
BEGIN
SELECT privilege.accessType, usertable.login, CASE privilege.accessType
WHEN ('OWNER' OR 'ADMIN')
THEN
CALL addUser(loginUserToAdd, loginUser, accessTypeT)
END
FROM privilege
INNER JOIN userTable ON privilege.userId = usertable.userId
WHERE (userTable.login = loginUser);
END
$$;
解决方案
我还补充说,我尝试只创建一个带有IF
如下语句的过程,并且在“IF”处或附近出现错误:语法错误。
CREATE PROCEDURE addUserToStorage1(loginUserToAdd VARCHAR(30), loginUser VARCHAR(30), accessTypeT VARCHAR(20))
LANGUAGE plpgsql
AS $$
IF EXISTS(SELECT privilege.accessType, usertable.login
FROM privilege
INNER JOIN userTable ON privilege.userId = usertable.userId
WHERE ((usertable.login = loginUser) AND (privilege.accessType = 'OWNER'
OR privilege.accessType = 'ADMIN')))
THEN
INSERT INTO privilege(userId, storageId, accessType)
VALUES(loginUserToAdd, (SELECT storageId
FROM privilege
WHERE userId = (SELECT userId
FROM userTable
WHERE login = loginUser)), accessTypeT);
END IF;
$$;
推荐阅读
- ios - 如何在 Xcode 10 中启用“推送到远程”?
- javascript - 卡在 Ajax 表单到 mysql 提交
- netcdf - 从 xarray 数据集创建 NetCDF 时经纬度错误
- rstudio - Rstudio:运行 R 代码的方法,但前提是之前的代码行成功?
- reactjs - 如何使 Link/NavLink 路径更短
- c++ - 在一个变量中保存两种不同的返回类型
- jenkins-pipeline - 如何将工件从一个仓库复制到另一个仓库
- java - 如何使用 SSHJ 实现 SSH 用户/密码认证
- tensorflow - convert tensorflow model to pb tensorflow
- android - ViewModel 中的 Kotliin Dagger 字段注入引发 Dagger/Binding 异常