как применить параметры в этой процедуре? - PullRequest
0 голосов
/ 26 сентября 2010

Как применить параметр IN как my_email и OUT как my_salary в этой процедуре:

CREATE OR REPLACE PROCEDURE FYI_CENTER AS
  my_email employees.email%TYPE;    -- **IN Parameter**
  my_salary employees.salary%TYPE;  -- **OUT Parameter**

BEGIN

  SELECT email, salary INTO my_email, my_salary
    FROM employees WHERE employee_id = 101;

  DBMS_OUTPUT.PUT_LINE('My email = ' || my_email);
  DBMS_OUTPUT.PUT_LINE('My salary = ' || my_salary);
END;

Ответы [ 3 ]

4 голосов
/ 26 сентября 2010

Вы не можете вернуть значение в параметр IN.Я подозреваю, что вам нужна процедура общего назначения, такая как:

CREATE OR REPLACE PROCEDURE FYI_CENTER 
  ( p_employee_id IN employees.employee_id%TYPE
  , p_email OUT employees.email%TYPE
  , p_salary OUT employees.salary%TYPE
  )
AS
BEGIN

  SELECT email, salary INTO p_email, p_salary
    FROM employees WHERE employee_id = p_employee_id;

END;
/

... которую вы можете затем назвать так:

DECLARE
  my_email employees.email%TYPE;    -- **IN Parameter**
  my_salary employees.salary%TYPE;  -- **OUT Parameter**
BEGIN
  fyi_center (101, my_email, my_salary);
  DBMS_OUTPUT.PUT_LINE('My email = ' || my_email);
  DBMS_OUTPUT.PUT_LINE('My salary = ' || my_salary);
END;
/
0 голосов
/ 26 сентября 2010

IN и OUT относительно чего? Ни один из параметров не является на данный момент. Похоже, вы хотите, чтобы оба этих параметра были параметрами OUT, а идентификатор сотрудника - параметром IN, что-то вроде:

CREATE OR REPLACE PROCEDURE FYI_CENTER(my_id IN number, my_email OUT varchar2,
    my_salary OUT varchar2) AS
BEGIN
    SELECT email, salary INTO my_email, my_salary
    FROM employees WHERE employee_id = my_id;
END;

... который вы называете что-то вроде:

DECLARE
    my_email employees.email%TYPE;
    my_salary employees.salary%TYPE;
BEGIN
    FYI_CENTER(101, my_email, my_salary);

    DBMS_OUTPUT.PUT_LINE('My email = ' || my_email);
    DBMS_OUTPUT.PUT_LINE('My salary = ' || my_salary);
END;

Вы не можете указать точный формат входных и выходных переменных (`% TYPE ') в процедуре, просто общий формат. Как указал Тони, вы можете объявить процедуру следующим образом:

CREATE OR REPLACE PROCEDURE FYI_CENTER(my_id IN employees.employee_id%TYPE,
    my_email OUT employees.email%TYPE
    my_salary OUT employees.salary%TYPE) AS
BEGIN
...
0 голосов
/ 26 сентября 2010

Вы устанавливаете параметр IN и добавляете параметр OUT в качестве переменной следующим образом:

DECLARE   
    salary employees.salary%TYPE;    
BEGIN    
    FYI_CENTER('jonhdoe@email.com', salary);    
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...