2016-06-17 2 views
2

Я только начал работать с Oracle, и я использую SQL Developer для тестирования, прежде чем я начну добавлять материал в свое приложение, но у меня возникают проблемы, потому что Oracle ведет себя по-другому, чем каждый другой механизм базы данных, с которым я работал.Процедура Oracle Run с одним параметром и множественным параметром

Я создал фиктивную таблицу:

CREATE TABLE "ROOT"."EMPLOYEES" 
( "ID" NUMBER NOT NULL ENABLE, 
"FIRSTNAME" VARCHAR2(30 BYTE) NOT NULL ENABLE, 
"LASTNAME" VARCHAR2(30 BYTE) NOT NULL ENABLE, 
"EMAIL" VARCHAR2(40 BYTE) NOT NULL ENABLE, 
CONSTRAINT "EMPLOYEES_PK" PRIMARY KEY ("ID") 
) 

И тогда я создал процедуру:

create or replace PROCEDURE get_employee 
(
    emp_id IN NUMBER, 
    m_FirstName OUT Varchar2, 
    m_LastName OUT Varchar2, 
    m_Email OUT Varchar2 
) 
AS 
BEGIN 
SELECT 
    FirstName 
    ,LastName 
    ,Email 
INTO 
    m_FirstName, 
    m_LastName, 
    m_Email 
FROM EMPLOYEES 
WHERE 
    ID = emp_id; 
END get_employee; 

Проблема в том, я получаю ошибку компиляции, когда я пытаюсь запустить процедуру:

Declare x VARCHAR2(30); 
y VARCHAR2(30); 
z VARCHAR2(40); 

Begin 
exec GET_EMPLOYEE(1, :x, :y, :z); 
SYS.DBMS_OUTPUT.PUT_LINE(x); 
End; 

Я получаю эту ошибку:

ОРА-06550: строка 8, колонка 4: PLS-00103: Встречающиеся символ «конец файла», когда ожидает одно из следующих действий:

(начало случай объявить конечный выход исключений для Goto, если мод петли null pragma raise return select update while with идентификатор double-quoted 06550. 00000 - "строка% s, столбец% s: \ n% s" * Причина: Обычно ошибка компиляции PL/SQL. * Действие: PL/SQL процедура успешно завершен.

Я действительно не уверен, как изменить свой вызов процедуры, чтобы заставить ее работать с SQL Developer. Любая помощь будет принята с благодарностью.

+1

Заменить эту строку: 'EXEC GET_EMPLOYEE (1, Х, у,:: г);' 'только с GET_EMPLOYEE (1, х, у, г);' - удалить 'exec' и все двоеточие , Также поместите '/' после последнего 'конца;' – krokodilko

ответ

2

Это правильный синтаксис

Declare 
x VARCHAR2(30); 
y VARCHAR2(30); 
z VARCHAR2(40); 

Begin 
GET_EMPLOYEE(1, x, y, z); 
DBMS_OUTPUT.PUT_LINE(x); 
End; 
0

Или другой вариант выполнения заглушки.

var x varchar2(30); 
var y varchar2(30); 
var z varchar2(40); 
exec GET_EMPLOYEE(1, :x, :y, :z); 
Смежные вопросы