TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-15 |
제목 | STORED PROCEDURE | ||
---|---|---|---|
1. Oracle Forms 4.5에서는 PL/SQL Code를 Server-Side에 저장하거나 Forms 내 Trigger, Procedure로 갖을 수도 있다. 다음과 같은 경우 Procedure를 Database Server에 저장하는 방법을 선택하는 것이 좋다. - Procedure가 Standard한 기능을 제공하여 다른 Tool이 공유할 수 있을 때. - Procedure가 중요한 DML 기능을 가질 경우. - Oracle Forms 4.5에서는 PL/SQL의 Version을 1.1까지 지원하므로, PL/SQL Version 2.X 의 기능이 필요한 경우. 2. Stored Procedure의 제한사항 (1) Server가 7.0 이상이어야 한다. (2) Pass되는 Variable은 2000 Byte이하이어야 한다. - 2000이 넘으면 Truncate가 되고, PL/SQL에서 Value_Error Exception이 발생한다. (3) Menu PL/SQL에서는 Stored Procedure와 Function을 부를 수 없다. (4) Stored Subprogram의 정의가 바뀐 경우, Forms를 다시 Server와 Connect 하기 전에는 영향을 주지 않는다. 3. Oracle 7 Server 에서 제공하는 Standard Package들 - dbms_alert - dbms_ddl - dbms_describe - dbms_lock - dbms_mail - dbms_output - dbms_pipe - dbms_session - dbms_snapshot - dbms_standard - dbms_transaction - dbms_utility < Oracle7 Developers Guide 참조> 4. Calling Stored Procedures (1) Database Procedure는 Server-Side PL/SQL Engine에 의해 실행되도록 Design된 PL/SQL Block이다. (2) Stored Procedure를 Call하기 위해서는 EXECUTE Privilege가 필요하다. (3) Server-Side Procedure와 Forms에서의 PL/SQL의 중요한 차이점은 Server-Side 에서는 Forms의 Bind Variable (:Block_Name.Item_Name 등) 을 인식하지 못한다는 것이다. (4) Parameter/Return이 가능한 Data Type - VARCHAR2 : Maximum of Varchar2(2000) - NUMBER - DATE - BOOLEAN 제한사항 - TABLE%ROWTYPE, TABLE.COLUMN%ROWTYPE으로 정의된 것은 Reference가 안된다. - Unsupported Parameter나 Return Value를 사용하면 다음의 Error가 발생한다. * PL/SQL error 313 at line xxx, column yyy 'PROCNAME' not declared in this scope. * PL/SQL error 201 at line xxx, column yyy identifier 'FUNCTNAME' must be declared. (5) Formal Parameter의 Default Value - Defulat Value는 제공하지 않는다. - User가 임의로 줄 수 있다. - Procedure Private_Test(a in VARCHAR2 := 'Hello' b in VARCHAR2 := 'There') IS BEGIN Dbms_Output.Put_Line(a); Dbms_Output.Put_Line(b); END; (6) 다른 User의 Stored Subprogram이나 Remote Database를 Call하려면 - User Name이나 Database Link명을 숨기기 위하여 Synonym을 생성하여야 한다. - CREATE SYNONYM lib_hr_syn FOR libowner.lib_hr; - Program에서 Call할 때에는 ss_num ;= lib_hr_syn.get_ssn(:EMP.EMPNO); 5. PL/SQL Compiler가 해당 Procedure를 찾는 순서 (1) Current PL/SQL Block 내에 정의되어 있는가? (2) Standard PL/SQL Command인가? (3) Oracle Forms 내의 Built-in Procedure 혹은 Function인가? (4) User_Named Procedure 혹은 Function인가? (5) Server-side에 정의된 DBMS_STANDARD Package인가? (6) Current user가 Server-Side의 어떤 Procedure나 Function을 Access 하는가? * 이상의 질문에 대하여 전부 'NO'라는 대답이 나오면 Compiler는 다음과 같은 Error Message를 준다. - PL/SQL error 313 at line xxx, column yyy 'PROCNAME' not declared in this scope. - PL/SQL error 201 at line xxx, column yyy identifier 'FUNCTNAME' must be declared. * DATABASE TRIGGER 1. Database Trigger는 Forms에서의 Trigger와 개념적으로 거의 동일하다. 차이점은 Trigger가 Fire되는 원인을 제공하는 사건과 후속코드가 실행되는 장소가 틀린 것이다. 2. Database Trigger는 Table과 연관된 PL/SQL Block들이다. Table에 대한 UPDATE, INSERT, DELETE 등의 행위에 의해 Fire된다. 3. Error 발생 시에는 RAISE_APPLICATION_ERROR Built-In Procedure를 사용하 여 Error를 표시한다. RAISE_APPLICATION_ERROR Procedure에서는 Error Number가 20000 - 20999의 Range를 가진다. 4. Creating & Editing Database Triggers 아래와 같은 적절한 권한이 주어진다면 Forms Designer Mode에서 Database Trigger를 직접 Create, Edit, Compile, Browse 할 수 있다. - Execute Privilege, Create Privilege, Compile Privilege, Drop Privilege * Create하려면 - Navigator에서 Database Objects와 Table Nodes를 Expand한다. - 원하는 Table을 선택하고 Expand한다. - Triggers Nodes를 선택하고 Menu Bar의 Navigator*Create를 선택한다. - Database Trigger Editor에서 작성, compile한다. * Edit 하려면 - Navigator에서 Database Objects와 Table Nodes를 Expand한다. - 원하는 Table을 선택하고 Expand한다. - 원하는 Trigger에서 Double-Click하면 Editor가 나타난다. - Database Trigger Editor에서 변경, compile한다. 1097 보기 태그: |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |