Oracleストアドプロシージャの「AS」と「IS」の違いは何ですか?


95

Oracleプロシージャが "AS"で記述されていることもあれば、 "IS"キーワードで記述されていることもあります。

CREATE OR REPLACE Procedure TESTUSER.KILLINSTANCE (INSTANCEID integer) **AS**
...

CREATE OR REPLACE Procedure TESTUSER.KILLINSTANCE (INSTANCEID integer) **IS**
...

2つの間に違いはありますか?


編集:明らかに、2つの間に機能的な違いはありませんが、一部の人々は、SPがパッケージの一部である場合は「AS」を使用し、そうでない場合は「IS」を使用するという慣例に従っています。またはその逆です。ええ。


1
2番目は常に、実際に機能を実装する別のプロシージャを単に指すのではないでしょうか?
Joel Coehoorn、2008年

1
私のテストでは、どちらもまったく同じボディで動作するように見えました。Dunnoが別のプロシージャを指すことについて。
Ishmaeel、2008年

回答:


66

何もありません。これらは、コードを読みやすくするために提供される同義語です。

関数f IS ...

CREATE VIEW v AS SELECT ...


54

1つの小さな違い...

これらはパッケージとプロシージャの同義語ですが、カーソルの同義語ではありません。

これは機能します...

cursor test_cursor
is
select * from emp;

...しかし、これはしません:

cursor test_cursor
as
select * from emp;

4
Dileep Krishnamurthyの回答がこれを完了
Imad


11

ここに別の違いがあります(とにかく10gで)

緩やかなオブジェクトタイプがあるとします。

CREATE TYPE someRecordType AS OBJECT
(
   SomeCol VARCHAR2(12 BYTE)
);

またはのlooseいずれASかを使用して、このオブジェクトタイプのテーブルタイプを作成できます。IS

CREATE OR REPLACE TYPE someTableType
        IS {or AS} TABLE OF someRecordType;

ただし、パッケージ内にこれと同じテーブルタイプを作成する場合は、以下を使用する必要がありますIS

CREATE OR REPLACE PACKAGE SomePackage IS
    TYPE packageTableType IS TABLE OF someRecordType;
END SomePackage;

ASパッケージでを使用すると、次のエラーが発生します。

エラー(2,30):PLS-00103:次のいずれかが予期されているときに、記号「TABLE」が発生しました:オブジェクトが不透明


1

チュートリアルポイントによると

スタンドアロンプ​​ロシージャを作成するには、ISキーワードの代わりにASキーワードを使用します。

以前の答えを考慮して、

私は推測する

AS スタンドアロン(ブロック、サブプログラム、パッケージの外部)エンティティ用

そして

IS 埋め込まれた(ブロック、サブプログラム、またはパッケージ内の)エンティティ用です。


1

ASのキーワードが使用されている代わりにIS作成するためのキーワードスタンドアロン機能を

[ スタンドアロンのストアド関数は、データベースに格納されている関数(単一の値を返すサブプログラム)です。注意:CREATE FUNCTION文を使用して作成するスタンドアロンのストアド関数は、PL / SQLブロックまたはパッケージで宣言および定義する関数とは異なります。]

詳細については、こちらをお読みください ...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.