2014-12-01 5 views
-1

테이블이 있는데이 프로 시저에서 이름이 지정된 테이블의 모듈을 삭제하는 프로 시저를 사용해야합니다 ... 어떻게해야합니까? 그렇게?테이블의 행을 삭제하기위한 PLSQL 프로 시저

table1: 
id number 
module varchar2 

PROC1 : 당신이 제공하는 제한된 정보에서

input parameter --> module (optional) 
if module exists then delete all rows in table1 named module 
if module is null then truncate table1 

답변

0

, 나는 귀하의 요구 사항에 대한 절차 row_delete()을 준비했습니다 :

DELIMITER $$ 

CREATE PROCEDURE row_delete(
IN moduleName VARCHAR2(100)) 

BEGIN 

DECLARE 
IF moduleName == NULL THEN 
    EXECUTE IMMEDIATE 'TRUNCATE TABLE table1'; 
    RETURN; 
END IF; 

SELECT count(module) 
INTO total 
FROM table1 
WHERE WHERE module = moduleName; 

CASE total 
    WHEN 0 THEN 
     RAISE_ERROR(-6592, 'Expecting at least one row'); 
    WHEN when_expression_2 THEN 
     DELETE FROM table1 WHERE module = moduleName; 
     DBMS_OUTPUT.PUT_LINE('Removed module: ' || moduleName); 
    ELSE; 
END CASE; 
END 
$$ 

실행 데이터베이스 엔진이 코드. 그리고 당신처럼이 프로 시저를 호출 할 때 :

CALL row_delete('module_name'); 
CALL row_delete(NULL); 
CALL row_delete('XYY'); 

module_name로 구성된 행이 제거됩니다.

NULL을 지정하면 테이블이 잘립니다.

그리고 다른 값 매개 변수의 경우 예외가 발생합니다.

감사합니다.

+0

답장을 보내고 싶지만 동일한 모듈 이름이 프로 시저에서 제공되면 테이블의 행을 삭제하는 절차가 필요하다는 것을 의미합니다. 파라미터가 null의 경우, 그 테이블을 잘라 버린다. 매개 변수의 모듈 이름이 테이블의 이름과 같지 않으면 오류를 발생시키고 아무 것도하지 않습니다. –

+0

죄송합니다. 그건 말이되지 않습니다. 내가 말한 것을 이해하지 못합니다 - "동일한 모듈 이름이 절차에 제공되면" 분명히하십시오. –

+0

내가 말하는 경우 : procedure1 (modulname) 그 다음 테이블의 해당 모듈 이름이있는 행을 삭제합니다. 내가 말한다면 : procedure1 (null) 다음 전체 table1 잘린 싶습니다. 내가 말하길 : procedure1 (xyy), table1에 xyy라는 모듈이 없다면 오류를 발생시키고 아무 것도하지 않겠다. –

관련 문제