¿Cuál es la diferencia entre "AS" e "IS" en un procedimiento almacenado de Oracle?

95

Veo procedimientos de Oracle a veces escritos con "AS" y, a veces, con la palabra clave "IS".

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

vs.

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

¿Hay alguna diferencia entre los dos?


Editar: Aparentemente, no hay diferencia funcional entre los dos, pero algunas personas siguen una convención para usar "AS" cuando el SP es parte de un paquete y "IS" cuando no lo es. O de otra forma. Meh.

Ismaeel
fuente
1
¿No apuntaría siempre el segundo simplemente a otro procedimiento que realmente implementa la funcionalidad?
Joel Coehoorn
1
En mi prueba, ambos parecían funcionar exactamente con el mismo cuerpo. No sé si apuntar a otro proc.
Ishmaeel

Respuestas:

66

Ninguno en absoluto. Son sinónimos que se proporcionan para que su código sea más legible:

FUNCIÓN f IS ...

CREAR VISTA v COMO SELECCIONAR ...

Tony Andrews
fuente
54

Una pequeña diferencia ...

Son sinónimos de paquetes y procedimientos, pero no de cursores:

Esto funciona...

cursor test_cursor
is
select * from emp;

... pero esto no:

cursor test_cursor
as
select * from emp;
Nick Pierpoint
fuente
4
La respuesta de Dileep Krishnamurthy completa esto
Imad
21

"IS" y "AS" actúan como sinónimo al crear procedimientos y paquetes, pero no para un cursor, tabla o vista.

Dileep Krishnamurthy
fuente
11

Aquí hay otra diferencia (en 10 g, al menos)

Dado un tipo de objeto suelto:

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

Puede crear un loosetipo de tabla de este tipo de objeto con ASoIS

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

Sin embargo, si crea este mismo tipo de tabla dentro de un paquete, debe usar IS:

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

El uso de ASen el paquete produce el siguiente error:

Error (2,30): PLS-00103: Se encontró el símbolo "TABLE" cuando esperaba uno de los siguientes: objeto opaco

StuartLC
fuente
1

Según TutorialsPoint

La palabra clave AS se utiliza en lugar de la palabra clave IS para crear un procedimiento independiente.

y considerando respuestas anteriores,

supongo

AS es para entidades independientes (fuera de cualquier bloque, subprograma, paquete)

y

IS es para entidades integradas (dentro de un bloque, subprograma o paquete).

.

Dániel Sándor
fuente
1

La palabra clave AS se utiliza en lugar de la palabra clave IS para crear una función independiente .

[Una función almacenada independiente es una función ( un subprograma que devuelve un solo valor ) que se almacena en la base de datos. Nota: Una función almacenada independiente que crea con la instrucción CREATE FUNCTION es diferente de una función que declara y define en un bloque o paquete PL / SQL. ]

Para más explicación, lea esto ...

Pankaj Shivalkar
fuente