72379


現在plsqlを勉強しています。

以下のような文法が現場のSQLであったのですが、どこかにリファレンスなどございますでしょうか？

[code]

    procedure プロシージャ名
    (
        引数
    )
    as 
        メンバ変数のようなもの
    begin 
        処理
    end
    
[/code]

それこそ何となくわかるような気はしますが、私が知っている文法は以下です。

[code]

    CREATE [OR REPLACE] PROCEDURE   
        ストアドプロシージャ名[(引数名 {IN | OUT | INOUT} データ型,...)] 
    IS   
        宣言部 
    BEGIN   
        処理部 
    EXCEPTION   
        例外処理部 
    END ;
    
[/code]

これに比べるとCREATEが省略されていたり、ISでなくASであったりしています。

少し何をリソースとして前者のような文法があり得るのかを知りたいです。よろしくお願いいたします。


CC BY-SA 4.0
2020-12-03T13:55:39.390
72373
2020-12-04T00:02:33.610
2020-12-04T00:02:33.610
3060
40231
question
sql oracle plsql
plsql における procedure as begin end の文法を理解したい


原典のOracleのドキュメントを検索してみることをお勧めしておきます。

* * *

[Procedure
Declaration](https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/procedure_declaration.htm#i35564)  
(最新の[Oracle 19c用ドキュメント](https://docs.oracle.com/en/database/oracle/oracle-
database/19/lnpls/procedure-declaration-and-
definition.html#GUID-9A48D7CE-3720-46A4-B5CA-C2250CA86AF2)では  
`procedure_definition`に変わってますが、こっちの方が見やすかったので10g用から引用。)

(中略)

> Note that the procedure declaration in a PL/SQL block or package is not the
> same as creating a procedure in SQL. For information on the CREATE PROCEDURE
> SQL statement, see Oracle Database SQL Reference.

(中略)

> procedure declaration ::=  
>  [![illustration
> procedure_declaration](https://i.stack.imgur.com/n3EmW.gif)](https://i.stack.imgur.com/n3EmW.gif)

* * *

[14.11 CREATE PROCEDURE
Statement](https://docs.oracle.com/en/database/oracle/oracle-
database/19/lnpls/CREATE-PROCEDURE-
statement.html#GUID-5F84DB47-B5BE-4292-848F-756BF365EC54)

(中略)

> create_procedure ::=  
>  [![illustration
> create_procedure](https://i.stack.imgur.com/qJwKP.gif)](https://i.stack.imgur.com/qJwKP.gif)

> plsql_procedure_source ::=  
>
> [![plsql_procedure_source](https://i.stack.imgur.com/mL40l.gif)](https://i.stack.imgur.com/mL40l.gif)

* * *

前者の方は、プログラミング言語としてのPL/SQLでの手続宣言(手続定義)、後者はストアドPL/SQLを定義するためのSQL文、と言うことになりますね。相互に埋め込めるためあまり厳密に区別してもかえってわかりにくいかもしれませんが。  
キーワードの大文字小文字は区別しない、`AS`, `IS`はどちらでも良い、というのは両者共通です。

手続宣言(手続定義)はPL/SQLでの「宣言部」(あなたの前者の例での「メンバ変数のようなもの」)に書くことができます。


CC BY-SA 4.0
2020-12-03T23:11:39.660
72379
2020-12-03T23:11:39.660
13972
72373
answer