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**
...

两者之间有什么区别吗?


编辑:显然,两者之间没有功能上的区别,但是当SP是软件包的一部分时,有些人遵循约定使用“ AS”,而当软件包不是软件包时,则遵循“ IS”。或反过来。嗯


1
第二个程序不是总是简单地指向实际实现该功能的另一个过程吗?
乔尔·科恩荷恩

1
在我的测试中,两者似乎都可以在完全相同的身体上工作。不丹关于指向另一个过程。
Ishmaeel

Answers:


66

没有什么。它们是提供的同义词,以使您的代码更具可读性:

功能f是...

CREATE VIEW v AS SELECT ...


54

一小差...

它们是包和过程的同义词,而不是游标的同义词:

这有效...

cursor test_cursor
is
select * from emp;

...但这不是:

cursor test_cursor
as
select * from emp;

4
Dileep Krishnamurthy的回答完成了这一点
Imad


11

这是另一个差异(无论如何,以10克计)

给定一个松散的对象类型:

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

根据TutorialsPoint

使用AS关键字而不是IS关键字来创建独立过程。

考虑以前的答案

我猜

AS 适用于独立实体(在任何块,子程序,程序包之外)

IS 用于嵌入式(在块,子程序或程序包中)实体。


1

使用AS关键字代替IS关键字创建独立函数

[ 独立存储的函数是存储在数据库中的函数(返回单个值的子程序)。注意:使用CREATE FUNCTION语句创建的独立存储函数是不同的您在PL / SQL块或包中声明和定义的函数。]

有关更多说明,请阅读 ...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.