2015-03-16 2 views
0

Я хочу получить запись из таблицы всякий раз, когда выполняется процедура. Процедура будет вводить число, скажем, employee_number, и оно вернет целую запись, в которой будут указаны, например, имя сотрудника, компания, дата присоединения и т. Д. Обычно я не работаю с процедурами. Я занимаюсь аналитическим SQL.Как получить запись, используя предложение where в Oracle?

create or replace procedure getdetails (search_strin table_name.column_1%type, 
         p_recordset out sys_refcursor) as 
begin 
    open p_recordset for 
    select column_2, column_3 
    from table_name 
    where column_1= search_str; 
end getdetails; 

Это должно работать, не так ли? Но, я получаю следующую ошибку!

PLS-00306: неправильное число или типы аргументов в вызове '' GET_EMP_RS

+0

Ваша процедура называется 'getdetails', так что такое' GET_EMP_RS'? –

ответ

1

Скажем, ваша таблица с именем Employee. Для того, чтобы делать то, что вы спрашиваете о вы могли бы сделать что-то вроде следующего:

CREATE OR REPLACE FUNCTION GET_EMPLOYEE_RECORD(nEmployee_number IN NUMBER) 
    RETURN EMPLOYEE%ROWTYPE 
IS 
    rowEmployee EMPLOYEE%ROWTYPE; 
BEGIN 
    SELECT e.* 
    INTO rowEmployee 
    FROM EMPLOYEE e 
    WHERE e.EMPLOYEE_NUMBER = nEmployee_number; 

    RETURN rowEmployee; 
END GET_EMPLOYEE_RECORD; 

Надеюсь, это поможет вам начать работу.

Делитесь и наслаждайтесь.

EDIT

Если вам необходимо использовать процедуры, а не функции, то вам необходимо использовать выходной параметр, чтобы вернуть данные; Таким образом, вы можете сделать что-то вроде следующего:

CREATE OR REPLACE PROCEDURE GET_EMPLOYEE_RECORD 
    (pin_Employee_number IN NUMBER 
    pout_Employee_row OUT EMPLOYEE%ROWTYPE) 
IS 
BEGIN 
    SELECT e.* 
    INTO pout_Employee_row 
    FROM EMPLOYEE e 
    WHERE e.EMPLOYEE_NUMBER = pin_Employee_number ; 
END GET_EMPLOYEE_RECORD; 

Вы бы затем вызвать эту процедуру из кода ищет что-то вроде следующего:

DECLARE 
    nEmployee_number NUMBER; 
    rowEmployee  EMPLOYEE%ROWTYPE; 
BEGIN 
    nEmployee_number := 123; -- or whatever value you like 

    GET_EMPLOYEE_RECORD(pin_Employee_number => nEmployee_number, 
         pout_Employee_row => rowEmployee); 

    -- Now do something with the fields in rowEmployee... 
END; 

Делите и наслаждайтесь.

+0

спасибо! Я получаю это, когда использую код. ORA-06553: PLS-801: внутренняя ошибка [55018] 06553. 00000 - «PLS-% s:% s» – MontyPython

+0

Кроме того, существует ограничение на применение приложения, которое мы используем. Мы не можем использовать функции - мы можем использовать только процедуры для получения записей. – MontyPython

+0

Да, для компиляции требуется объявление для rowEmployee, 'rowEmployee EMP% ROWTYPE;'. –

0

Вы должны попытаться выполнить функцию в анонимном блоке, я думаю, вы попытались добавить функцию в оператор select.

DECLARE l_cust_record x_remedy_oracle% ROWTYPE; BEGIN

l_cust_record: = get_CUSTOMER ('02393', 'Service');

END;

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