Oracle Run Procedure,其中包含一个参数和多个参数

时间:2016-06-17 18:37:01

标签: oracle stored-procedures plsql

我刚刚开始与Oracle合作,我在开始向我的应用程序添加内容之前使用SQL Developer进行测试,但我遇到了问题,因为Oracle的行为与其他所有数据库引擎不同。与我合作过。

我创建了一个虚拟表:

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; 

我收到此错误:

ORA-06550:第8行第4栏: PLS-00103:遇到符号"文件结束"期待以下之一:

(如果循环mod,则为goto开始大小写声明结束异常退出    null pragma raise返回选择更新时使用    双引号的标识符 06550. 00000 - "行%s,列%s:\ n%s" *原因:通常是PL / SQL编译错误。 *行动: PL / SQL过程已成功完成。

我真的不确定如何更改对程序的调用以使其与SQL Developer一起使用。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

这是正确的语法

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

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

答案 1 :(得分:0)

或者另一个版本的存根执行。

var x varchar2(30);
var y varchar2(30);
var z varchar2(40);
exec GET_EMPLOYEE(1, :x, :y, :z);