PL/SQL은 강력한 데이터베이스 응용 프로그램을 만들기 위해 Oracle이 개발 한 강력한 절차 언어입니다. 저장된 절차, 기능 및 트리거를 작성하는 데 사용하는 방법은 다음과 같습니다.
저장 절차 :
저장된 절차는 응용 프로그램에서 호출 할 수있는 데이터베이스 내에 저장된 서브 프로그램입니다. 저장된 프로 시저를 만들려면 CREATE PROCEDURE
문을 사용하십시오. 예는 다음과 같습니다.
<code class="sql">CREATE OR REPLACE PROCEDURE greet_user(p_user_name IN VARCHAR2) AS BEGIN DBMS_OUTPUT.PUT_LINE('Hello, ' || p_user_name); END; /</code>
CALL
문을 사용 하여이 절차를 호출 할 수 있습니다.
<code class="sql">CALL greet_user('John');</code>
기능 :
함수는 절차와 유사하지만 값을 반환합니다. CREATE FUNCTION
문을 사용하여 함수를 만듭니다. 예는 다음과 같습니다.
<code class="sql">CREATE OR REPLACE FUNCTION calculate_total(p_price IN NUMBER, p_quantity IN NUMBER) RETURN NUMBER AS v_total NUMBER; BEGIN v_total := p_price * p_quantity; RETURN v_total; END; /</code>
이 기능을 SQL 쿼리 또는 다른 PL/SQL 블록 내에서 호출 할 수 있습니다.
<code class="sql">SELECT calculate_total(10.50, 5) AS total FROM DUAL;</code>
트리거 :
트리거는 특정 테이블 또는 뷰의 특정 이벤트에 응답하여 자동으로 실행되는 특수 유형의 저장 프로 시저입니다. 트리거를 만들려면 CREATE TRIGGER
문을 사용하십시오. 예를 들어, 로그인하는 트리거는 직원 테이블로 변경됩니다.
<code class="sql">CREATE OR REPLACE TRIGGER log_emp_update AFTER UPDATE ON employees FOR EACH ROW BEGIN INSERT INTO emp_log (emp_id, operation, old_salary, new_salary) VALUES (:OLD.employee_id, 'UPDATE', :OLD.salary, :NEW.salary); END; /</code>
이 트리거는 emp_log
테이블에 대한 급여 업데이트를 기록합니다.
PL/SQL 저장 프로 시저 최적화는 성능 향상을 위해 중요합니다. 모범 사례는 다음과 같습니다.
대량 작업 사용 :
벌크 작업은 SQL과 PL/SQL 사이의 컨텍스트 스위치를 크게 줄여 성능을 향상시킬 수 있습니다. 데이터 조작에서 더 나은 성능을 위해 BULK COLLECT
및 FORALL
사용하십시오.
<code class="sql">DECLARE TYPE emp_tab IS TABLE OF employees%ROWTYPE; l_employees emp_tab; BEGIN SELECT * BULK COLLECT INTO l_employees FROM employees WHERE department_id = 10; FORALL i IN 1..l_employees.COUNT UPDATE employees SET salary = salary * 1.1 WHERE employee_id = l_employees(i).employee_id; END; /</code>
FORALL
같은 효율적인 루프 구조를 사용하고 SQL에서 수행 할 수있는 불필요한 PL/SQL 루프를 피하십시오.PL/SQL의 기능 및 절차는 유사한 목적을 제공하지만 뚜렷한 차이를 가지고 있습니다.
반품 값 :
RETURN
절로 정의됩니다.OUT
변수를 사용하여 값을 호출 환경으로 다시 전달할 수 있습니다.사용법 컨텍스트 :
통사론:
RETURN
절과 함께 CREATE FUNCTION
문을 사용합니다.CREATE PROCEDURE
문을 사용하고 RETURN
절이 필요하지 않습니다.매개 변수 처리 :
IN
)를 처리하고 단일 출력 값을 반환합니다. 그들은 또한 IN OUT
매개 변수를 가질 수 있습니다.IN
, OUT
및 IN OUT
매개 변수를 처리 할 수있어 절차와 호출 환경 사이의보다 복잡한 데이터 교환이 가능합니다.PL/SQL 트리거 디버깅은 어려울 수 있지만 다음은 효과적인 방법이 있습니다.
dbms_output :
DBMS_OUTPUT
사용하여 트리거 코드 내에서 디버그 메시지를 인쇄하십시오. 이렇게하면 트리거 실행 중 흐름과 값을 추적하는 데 도움이 될 수 있습니다.
<code class="sql">CREATE OR REPLACE TRIGGER debug_trigger BEFORE INSERT ON employees FOR EACH ROW BEGIN DBMS_OUTPUT.PUT_LINE('Trigger fired for employee: ' || :NEW.employee_id); END; /</code>
출력을 보려면 세션에서 DBMS_OUTPUT
활성화되어 있는지 확인하십시오.
<code class="sql">SET SERVEROUTPUT ON;</code>
디버깅 도구 :
Oracle SQL 개발자와 같은 Oracle의 내장 디버깅 도구를 사용하십시오. 이 도구는 중단 점을 설정하고 코드를 통해 단계를 통해 변수를 검사 할 수 있습니다.
벌채 반출:
트리거 내에서 로깅 메커니즘을 구현하십시오. 지정된 디버그 테이블에 중요한 정보를 기록하십시오.
<code class="sql">CREATE TABLE trigger_debug_log ( id NUMBER PRIMARY KEY, trigger_name VARCHAR2(100), log_time TIMESTAMP, message VARCHAR2(4000) ); CREATE SEQUENCE trigger_debug_seq; CREATE OR REPLACE TRIGGER debug_trigger_with_logging BEFORE INSERT ON employees FOR EACH ROW BEGIN INSERT INTO trigger_debug_log (id, trigger_name, log_time, message) VALUES (trigger_debug_seq.NEXTVAL, 'debug_trigger_with_logging', SYSTIMESTAMP, 'Employee ID: ' || :NEW.employee_id); END; /</code>
예외 처리 :
예외 처리를 사용하여 오류를 잡고 나중에 검사를 위해 로그인하십시오.
<code class="sql">CREATE OR REPLACE TRIGGER error_handling_trigger BEFORE INSERT ON employees FOR EACH ROW BEGIN -- Trigger logic IF :NEW.salary </code>
이러한 방법을 결합하면 Oracle 데이터베이스에서 PL/SQL 트리거를 효과적으로 디버깅하고 유지 관리 할 수 있습니다.
위 내용은 PL/SQL을 사용하여 Oracle에 저장된 절차, 기능 및 트리거를 작성하려면 어떻게합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!