, 나는 귀하의 요구 사항에 대한 절차 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을 지정하면 테이블이 잘립니다.
그리고 다른 값 매개 변수의 경우 예외가 발생합니다.
감사합니다.
답장을 보내고 싶지만 동일한 모듈 이름이 프로 시저에서 제공되면 테이블의 행을 삭제하는 절차가 필요하다는 것을 의미합니다. 파라미터가 null의 경우, 그 테이블을 잘라 버린다. 매개 변수의 모듈 이름이 테이블의 이름과 같지 않으면 오류를 발생시키고 아무 것도하지 않습니다. –
죄송합니다. 그건 말이되지 않습니다. 내가 말한 것을 이해하지 못합니다 - "동일한 모듈 이름이 절차에 제공되면" 분명히하십시오. –
내가 말하는 경우 : procedure1 (modulname) 그 다음 테이블의 해당 모듈 이름이있는 행을 삭제합니다. 내가 말한다면 : procedure1 (null) 다음 전체 table1 잘린 싶습니다. 내가 말하길 : procedure1 (xyy), table1에 xyy라는 모듈이 없다면 오류를 발생시키고 아무 것도하지 않겠다. –