Was ist der Unterschied zwischen "AS" und "IS" in einer gespeicherten Oracle-Prozedur?

95

Ich sehe Oracle-Prozeduren, die manchmal mit "AS" und manchmal mit dem Schlüsselwort "IS" geschrieben wurden.

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

vs.

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

Gibt es einen Unterschied zwischen den beiden?


Bearbeiten: Anscheinend gibt es keinen funktionalen Unterschied zwischen den beiden, aber einige Leute folgen einer Konvention, um "AS" zu verwenden, wenn der SP Teil eines Pakets ist, und "IS", wenn dies nicht der Fall ist. Oder umgekehrt. Meh.

Ishmaeel
quelle
1
Würde die 2. nicht immer einfach auf eine andere Prozedur verweisen, die die Funktionalität tatsächlich implementiert?
Joel Coehoorn
1
In meinem Test schienen beide mit genau demselben Körper zu arbeiten. Keine Ahnung, auf einen anderen Prozess zu zeigen.
Ishmaeel

Antworten:

66

Überhaupt keine. Dies sind Synonyme, die bereitgestellt werden, um Ihren Code besser lesbar zu machen:

FUNKTION f IST ...

CREATE VIEW v AS SELECT ...

Tony Andrews
quelle
54

Ein kleiner Unterschied ...

Sie sind Synonyme für Pakete und Prozeduren, jedoch nicht für Cursor:

Das funktioniert...

cursor test_cursor
is
select * from emp;

... aber das geht nicht:

cursor test_cursor
as
select * from emp;
Nick Pierpoint
quelle
4
Dileep Krishnamurthys Antwort vervollständigt dies
Imad
21

"IS" und "AS" fungieren beim Erstellen von Prozeduren und Paketen als Synonym, jedoch nicht für einen Cursor, eine Tabelle oder eine Ansicht.

Dileep Krishnamurthy
quelle
11

Hier ist ein weiterer Unterschied (jedenfalls in 10 g)

Bei einem losen Objekttyp:

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

Sie können einen looseTabellentyp dieses Objekttyps mit entweder ASoder erstellenIS

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

Wenn Sie jedoch denselben Tabellentyp in einem Paket erstellen, müssen Sie Folgendes verwenden IS:

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

Die Verwendung von ASin der Packung führt zu folgendem Fehler:

Fehler (2,30): PLS-00103: Das Symbol "TABELLE" ist aufgetreten, als eines der folgenden Ereignisse erwartet wurde: Objekt undurchsichtig

StuartLC
quelle
1

Laut TutorialsPoint

Das AS-Schlüsselwort wird anstelle des IS-Schlüsselworts zum Erstellen einer eigenständigen Prozedur verwendet.

und unter Berücksichtigung früherer Antworten,

ich vermute

AS ist für eigenständige Entitäten (außerhalb von Block-, Unterprogramm-, Paket-) Entitäten

und

IS ist für eingebettete (innerhalb eines Blocks, Unterprogramms oder Pakets) Entitäten.

.

Dániel Sándor
quelle
1

Das AS- Schlüsselwort wird anstelle des IS- Schlüsselworts zum Erstellen einer eigenständigen Funktion verwendet .

[Eine eigenständige gespeicherte Funktion ist eine Funktion ( ein Unterprogramm, das einen einzelnen Wert zurückgibt ), die in der Datenbank gespeichert ist. Hinweis: Eine eigenständige gespeicherte Funktion, die Sie mit der Anweisung CREATE FUNCTION erstellen, unterscheidet sich von einer Funktion, die Sie in einem PL / SQL-Block oder -Paket deklarieren und definieren. ]]

Weitere Erklärungen finden Sie hier ...

Pankaj Shivalkar
quelle