Sql 尝试获取用户名可以查看的文档数

Sql 尝试获取用户名可以查看的文档数,sql,function,select,count,Sql,Function,Select,Count,因此,首先我需要创建一个UserPermissions表: CREATE TABLE UserPermissions ( Document varchar2(15), UserName varchar(15) ); INSERT INTO UserPermissions Values('Policy', 'SYSTEM'); INSERT INTO UserPermissions Values('Menu', 'JDOW'); INSERT INTO UserPermissions Values

因此,首先我需要创建一个UserPermissions表:

CREATE TABLE UserPermissions
(
Document varchar2(15),
UserName varchar(15)
);
INSERT INTO UserPermissions
Values('Policy', 'SYSTEM');
INSERT INTO UserPermissions
Values('Menu', 'JDOW');
INSERT INTO UserPermissions
Values('W2', 'USAM');
INSERT INTO UserPermissions
Values('Permissions', 'SYSTEM');
 INSERT INTO UserPermissions
Values('W2', ‘JDOW');
INSERT INTO UserPermissions
Values('Form 1040', 'USAM');
INSERT INTO UserPermissions
Values('Policy', 'JDOW');
INSERT INTO UserPermissions
Values('W2', 'SYSTEM');
然后,编写一个PL/SQL存储函数,将用户名作为输入,并返回用户有权查看的文档数。如果用户名不在表中,则过程应返回“未找到用户”。 到目前为止,这就是我所拥有的:

CREATE or REPLACE FUNCTION user_documents_func (UserName varchar2)
RETURN int AS
num_views INT;
BEGIN
SET num_views = (select count(*) from userpermissions);
IF num_views > 0 THEN
RETURN UserName || ' can view ' || num_views || ' document(s).';
ELSE 
Dbms_output.put_line('Username not found!');
END IF;
END;
/
SET SERVEROUTPUT ON;
SELECT语句缺少或选项无效时出错

我变了

SET num_views = (select count(*) from userpermissions);
致:

并以这种方式声明num_视图

CREATE or REPLACE FUNCTION user_documents_func (UserName varchar2, num_views int)

现在,我从关键字not found中得到错误,您需要首先声明变量,然后分配它

DECLARE @num_views int; // thought as sql-server

BEGIN
SELECT @num_views = count(*)  from userpermissions WHERE UserName LIKE input_var ;

IF @num_views > 0 THEN
RETURN UserName || ' can view ' || num_views || ' document(s).';
ELSE 
Dbms_output.put_line('Username not found!');
END IF;

返回用户名not found(未找到)和打印用户名之间存在差异。我已输入了declare(声明)和not getting(未获取):在预期以下情况之一时遇到了符号declare(声明):begin function pragma过程子类型current cursor delete exists Previous external language
DECLARE @num_views int; // thought as sql-server

BEGIN
SELECT @num_views = count(*)  from userpermissions WHERE UserName LIKE input_var ;

IF @num_views > 0 THEN
RETURN UserName || ' can view ' || num_views || ' document(s).';
ELSE 
Dbms_output.put_line('Username not found!');
END IF;