基本的なOracle質問
-
30-09-2019 - |
質問
これまで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;
シェア楽しめます。