sql >> データベース >  >> RDS >> Oracle

Oracle11g-PL/SQLカーソルの実行

    いくつかの問題があります:

    • カーソル定義の後(つまり、クエリの後)にセミコロンが必要です。
    • bookCursorは使用できません カーソルの名前としても、フェッチするレコードの名前としても。 (コードの一部でbookCursorRecが使用されていることに気付きました 後者の場合は、それを使用します。)
    • fetch にフェッチする必要があります 何か、つまりbookCursorRecに 。
    • dbms_output.put_lineの呼び出し後にセミコロンが必要です 。
    • クエリが間違っているようです。両方の結合が相互結合のようです。

    それをまとめて、フォーマットと構造を少し調整して、少し「慣用的な」PL / SQLにします:

    DECLARE
        CURSOR bookcursor IS
        SELECT btname, isbn, pubname, datedestroyed
          FROM booktitle bt
          JOIN publisher p
            ON bt.pid = p.id -- this is just a guess
          JOIN bookcopy bc
            ON bt.bcid = bc.id -- this is just a guess
         WHERE datedestroyed IS NULL
        ;
        bookcursorrec bookcursor%ROWTYPE;
    BEGIN
        OPEN bookcursor;
        LOOP
            FETCH bookcursor INTO bookcursorrec;
            EXIT WHEN bookcursor%NOTFOUND;
            dbms_output.put_line( 'ISBN: ' ||bookcursorrec.isbn
                                  || ' - Book Name: ' || bookcursorrec.btname
                                  || ' - Publisher: ' || bookcursorrec.pubname );
        END LOOP;
        CLOSE bookcursor;
    END;
    /
    

    ちなみに、Oracle識別子はほとんど大文字と小文字が区別されるため(二重引用符で囲まない限り、暗黙的に大文字に変換されます)、通常、人々はbook_cursor_recのような識別子を使用します。 およびdate_destroyed bookCursorRecではなく (=bookcursorrec )およびdateDestroyed (=datedestroyed



    1. エラー1064(42000):SQL構文にエラーがあります。ユーザーであるrootとしてパスワードを設定したい

    2. DLL「OraOps10.dll」を読み込めません

    3. NpgSql接続文字列でApplicationNameを指定する方法

    4. サーバーはホストlocalhost(::1)で実行されており、ポート5432でTCP / IP接続を受け入れていますか?