質問

これまでoracle.を制作する場合、保管使用時の手順:

CREATE OR REPLACE PROCEDURE PROCEDURE1 
AS
BEGIN

  SELECT FIRSTNAME,
         LASTNAME
    INTO FirstName,LastName
    FROM EMPLOYEE;

END PROCEDURE1;

を取得し、次のエラー:

PL/SQL文を無視 識別名として宣言する必要があ オーラ-00904無効な識別子

役に立ちましたか?

解決


「As」キーワードは機能しないと思います。うまくいかない場合は、「IS」を使用します。
休憩は大丈夫で、とても良いヒントです。

PL/SQLに関するヘルプが必要な場合は、このリンクを確認できます。とてもシンプルで理解しやすいです。
http://plsql-tutorial.com/

これは、あなたが得ているエラーに対する私の解決策です。

CREATE OR REPLACE PROCEDURE PROCEDURE1 IS
  v_FIRSTNAME EMPLOYEE.FIRSTNAME%TYPE;
  v_LASTNAME EMPLOYEE.LASTNAME%TYPE;
  CURSOR EMPCURSOR IS
  SELECT FIRSTNAME, LASTNAME FROM EMPLOYEE;      
  BEGIN   
     IF NOT EMPCURSOR%ISOPEN THEN
         OPEN EMPCURSOR;
     END IF;
     LOOP
        FETCH EMPCURSOR INTO V_FIRSTNAME,V_LASTNAME;
        EXIT WHEN EMPCURSOR%NOTFOUND;
     END LOOP;
     IF EMPCURSOR%ISOPEN THEN
        CLOSE EMPCURSOR;
     END;
  END PROCEDURE1;

使用することもできます DBMS_OUTPUT.PUT_LINE(V_FIRSTNAME || ','|| V_LASTNAME), 、ループ内で出力を表示します。しかし、それを行うには、最初にコマンドを実行する必要があります server output on

他のヒント

変数を入力しようとする前に、次を宣言する必要があります。

CREATE OR REPLACE PROCEDURE PROCEDURE1 
AS

 FirstName EMPLOYEE.FIRSTNAME%TYPE;
 LastName EMPLOYEE.LASTNAME%TYPE;

BEGIN

  SELECT FIRSTNAME,
         LASTNAME
    INTO FirstName,LastName
    FROM EMPLOYEE;

END PROCEDURE1;

%タイプ表記は、列データ型と一致するデータ型宣言の速記です。そのデータ型が変更された場合、手順を更新する必要はありません。

変数を宣言する必要があります。

CREATE OR REPLACE
PROCEDURE PROCEDURE1 AS
 V_FIRSTNAME VARCHAR2(60);
 V_LASTNAME  VARCHAR2(60);
BEGIN
        SELECT FIRSTNAME,LASTNAME
         INTO V_FIRSTNAME ,V_LASTNAME  
         FROM EMPLOYEE;
END PROCEDURE1;

コメントへの返信として、PL/SQLブロックのSQLステートメントは1つのレコードのみを取得できます。複数のレコードを取得する必要がある場合は、レコードをカーソルに保存して処理する必要があります。

CREATE OR REPLACE
    PROCEDURE PROCEDURE1 AS

     CURSOR EMP_CUR IS
         SELECT FIRSTNAME,LASTNAME
         FROM EMPLOYEE;
    EMP_CUR_REC EMP_CUR%ROWTYPE;

    BEGIN
     FOR EMP_CUR_REC IN EMP_CUR LOOP
         -- do your processing
         DBMS_OUTPUT.PUT_LINE('Employee first name is ' || EMP_CUR_REC.FIRSTNAME);
         DBMS_OUTPUT.PUT_LINE('Employee last name is ' || EMP_CUR_REC.LASTNAME);
    END LOOP;
    END PROCEDURE1;

説明する: EMP_CUR 実行するSQLステートメントを保持します。 EMP_CUR_REC SQLステートメントによって取得されるレコードを保持します。 %ROWTYPE レコードがデータを保持する行と同じデータ型であることを示します

FOR LOOP 各レコードを取得し、実行する必要がある処理を行うことができます。

に対@Sathyaの対応は、上記@のカヤックだったら良いか分からないようにSelect*from Tablename選択し、名、姓からの配列のように、まさにsqlサーバー".

ることができないことだどちらかを含んでいます。WHERE節またはカーソルを移動させます。場のニーズに合わせてさまざまなWHERE節限定結果を単行き書きのようなもの

CREATE OR REPLACE PROCEDURE PROCEDURE1
IS
  rowEmployees EMPLOYEE%ROWTYPE;
BEGIN
  SELECT *
    INTO rowEmployees
    FROM EMPLOYEE
    WHERE EMPLOYEE_ID = 12345;
END PROCEDURE1; 

一方、だいWHERE節で希望工程のすべてのテーブルの行のや、WHERE節するという結果を単行きのカーソルは以下のように

CREATE OR REPLACE PROCEDURE PROCEDURE1 IS
BEGIN
  FOR rowEmployees IN (SELECT *
                         FROM EMPLOYEE
                         WHERE EMPLOYEE_ID IN (12345, 67890, 111213, 141516))
  LOOP
    <do something with rowEmployees here>
  END LOOP;
END PROCEDURE1; 

シェア楽しめます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top