2016-06-17 33 views
2

Oracleで作業を開始したばかりで、アプリケーションに追加する前にSQL Developerを使用してテストしていますが、他のすべてのデータベースエンジンと一緒に作業しました。1つのパラメータと複数の出力パラメータを持つ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ならジャンプの終了例外出口を宣言する nullプラグマ・レイド・リターン選択更新中に 識別子を二重引用符で囲んだ 06550. 00000 - "行%s、列%s:\ n%s" *原因:通常はPL/SQLコンパイル・エラーです。 *処置: PL/SQLプロシージャが正常に完了しました。

SQL Developerで動作させるためのプロシージャの呼び出しを変更する方法がわかりません。どんな助けでも大歓迎です。

+1

この行置換: 'EXEC GET_EMPLOYEE(1:X:Y:Z)を、単に' GET_EMPLOYEE(1、X、Y、Z)と ';' - '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); 
関連する問題