อะไรคือความแตกต่างระหว่าง“ AS” และ“ IS” ในขั้นตอนการจัดเก็บของ Oracle?


97

ฉันเห็นบางครั้งโพรซีเดอร์ของ Oracle เขียนด้วย "AS" และบางครั้งก็มีคีย์เวิร์ด "IS"

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

เทียบกับ

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

มีความแตกต่างระหว่างทั้งสองหรือไม่?


แก้ไข: เห็นได้ชัดว่าไม่มีความแตกต่างในการทำงานระหว่างทั้งสอง แต่บางคนปฏิบัติตามแบบแผนในการใช้ "AS" เมื่อ SP เป็นส่วนหนึ่งของแพ็กเกจและ "IS" เมื่อไม่ได้ หรืออีกทางหนึ่ง Meh.


1
ข้อที่ 2 จะไม่ชี้ไปที่ขั้นตอนอื่นที่ใช้ฟังก์ชันนี้จริงหรือ?
Joel Coehoorn

1
ในการทดสอบของฉันทั้งสองดูเหมือนจะทำงานกับร่างกายเดียวกันแน่นอน Dunno เกี่ยวกับการชี้ไปที่ proc อื่น
อิชมาเอล

คำตอบ:


68

ไม่มีอะไรเกินเลย เป็นคำพ้องความหมายที่จัดทำขึ้นเพื่อให้โค้ดของคุณอ่านง่ายขึ้น:

ฟังก์ชั่น f คือ ...

สร้างมุมมอง v ตามที่เลือก ...


57

ความแตกต่างเล็กน้อย ...

เป็นคำพ้องความหมายสำหรับแพ็คเกจและโพรซีเดอร์ แต่ไม่ใช่สำหรับเคอร์เซอร์:

งานนี้ ...

cursor test_cursor
is
select * from emp;

... แต่สิ่งนี้ไม่:

cursor test_cursor
as
select * from emp;

4
คำตอบของ Dileep Krishnamurthy เสร็จสมบูรณ์
Imad

24

"IS" และ "AS" ทำหน้าที่เป็นคำพ้องความหมายในขณะที่สร้างโพรซีเดอร์และแพ็กเกจ แต่ไม่ใช่สำหรับเคอร์เซอร์ตารางหรือมุมมอง


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

ตามTutorialsPoint

คีย์เวิร์ด AS ถูกใช้แทนคีย์เวิร์ด IS สำหรับการสร้างโพรซีเดอร์แบบสแตนด์อโลน

และพิจารณาคำตอบก่อนหน้านี้

ฉันคิดว่า

AS มีไว้สำหรับเอนทิตีแบบสแตนด์อโลน (นอกบล็อกโปรแกรมย่อยแพ็คเกจ)

และ

IS มีไว้สำหรับเอนทิตีแบบฝัง (ภายในบล็อกโปรแกรมย่อยหรือแพ็คเกจ)

.


1

ASคำหลักที่ถูกนำมาใช้แทนของISคำหลักสำหรับการสร้างฟังก์ชั่นแบบสแตนด์อโลน

[ ฟังก์ชันที่จัดเก็บแบบสแตนด์อโลนคือฟังก์ชัน ( โปรแกรมย่อยที่ส่งคืนค่าเดียว ) ที่เก็บไว้ในฐานข้อมูล หมายเหตุ: ฟังก์ชันที่จัดเก็บแบบสแตนด์อโลนที่คุณสร้างด้วยคำสั่ง CREATE FUNCTION แตกต่างจากฟังก์ชันที่คุณประกาศและกำหนดในบล็อก PL / SQL หรือแพ็คเกจ ]

สำหรับคำอธิบายเพิ่มเติมโปรดอ่านสิ่งนี้ ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.