0

私は Oracle SQL 開発者を実行しており、次のストアド プロシージャがあります。私はこれにかなり慣れていませんが、なぜこれが機能しないのか本当にわかりません:

CREATE OR REPLACE PROCEDURE CHECKDUPLICATE(
       username1 IN USERS.USERNAME%TYPE,
       o_username OUT USERS.USERNAME%TYPE
)

IS
BEGIN

  SELECT USERNAME
  INTO o_username
  FROM USERS WHERE username1 = o_username;

END;

私がそれを呼び出そうとすると:

DECLARE
   o_username USERS.USERNAME%TYPE;
BEGIN

   CHECKDUPLICATE('Jacklin', o_username);

   DBMS_OUTPUT.PUT_LINE('username :  ' || o_username);

END;

エラーメッセージが表示されます:

Error starting at line 1 in command:
DECLARE
   o_username USERS.USERNAME%TYPE;
BEGIN

   CHECKDUPLICATE(Jacklin, o_username);

   DBMS_OUTPUT.PUT_LINE('username :  ' || o_username);

END;
Error report:
ORA-06550: line 5, column 19:
PLS-00201: identifier 'JACKLIN' must be declared
ORA-06550: line 5, column 4:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

「識別子 'Jacklin' を宣言する必要がある」とはどういう意味ですか? (テーブルは USERS と呼ばれ、列名は USERNAME と呼ばれます)。

編集** Jacklin を引用符で囲んだところ、次のメッセージが表示されました。

Error report:
ORA-01403: no data found
ORA-06512: at "L13JAV04.CHECKDUPLICATE", line 9
ORA-06512: at line 6
01403. 00000 -  "no data found"
*Cause:    
*Action:

ジャックリンはデータベースに存在しますが!

4

3 に答える 3

1

文字列として扱うには、Jacklin を引用符で囲む必要があります。それ以外の場合、パーサーはそれがフィールド名であると認識します。

于 2013-07-31T15:28:21.570 に答える
0

「Jacklin」という名前のユーザーはいないため、エラーが発生します。最後に例外を追加してください

WHEN NO_DATA_FOUND 
THEN
......
于 2013-07-31T15:50:27.083 に答える