2015-02-07 2 views
0

Итак, сначала мне нужно создать таблицу (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; 

Я получаю сообщение об ошибке на ЗЕЬЕСТ «отсутствует или недействительный вариант».

Я изменил

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

To:

SELECT num_views = count(*) from userpermissions WHERE UserName; 

и объявил NUM_VIEWS таким образом

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

Сейчас я получаю сообщение об ошибке "FROM ключевое слово не найдено, где ожидается"

+0

Существует разница между возвратом «Имя пользователя не найдено» и его печать. –

ответ

0

Вам необходимо d eclare, а затем назначьте его.

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; 
+0

Я положил объявление и не получал: встретил символ «DECLARE», ожидая одно из следующего: начало функции pragma procedure подтип type <идентификатор> текущий курсор delete существует предшествующий внешний язык – user3495658

Смежные вопросы